SuperMap iClient for JavaScript矢量分块图层-地图快速渲染的利器
来源:互联网 发布:博爱网络智能路由中继 编辑:程序博客网 时间:2024/06/08 06:06
作者:doremi
一、简介
TiledVectorLayer,矢量分块图层属于客户端矢量地图,所有的渲染都是由客户端完成。服务器将矢量数据以及地图的渲染风格属性信息发送给浏览器或者是其他的客户端设备,这样客户端就能将地图渲染出来。客户端根据瓦片的位置以及比例尺向服务器请求矢量切片。每个矢量切片都包含多个数据集,一个数据集相当于一个图层,每个数据集都包含了多个要素,包括点、线、面和文本要素。 此外,服务器上还包含有每个图层的渲染风格信息,比如线宽,面的颜色等等信息。客户端根据这些信息就可以将矢量切片数据渲染成地图。
矢量分块除了提供根据服务端的渲染风格信息对地图进行渲染之外,还提供了用户自定义的渲染风格信息的渲染接口。这种渲染风格信息就是一种类CSS的地图风格样式表—— CartoCSS。其中,矢量分块只实现了CartoCSS标准中的一部分,除外, 还对标准的CartoCSS进行了相应的扩展。利用CartoCSS,用户可以方便地定义地图的渲染方式,从而定制属于自己的个性地图。
二 、基本用法
CartoCSS变量
在CartoCSS中,用户可以定义一个变量,然后在CartoCSS代码中使用,例如
@color1:#C00;@color2:#0AF;@width1:2;@width2:10;#China_Road_L__China400__1{ line-color: @color1; line-width: @width1;}#China_Road_L__China400__1::glow{ line-color: @color2; line-opacity: 0.5; line-width: @width2;}
CartoCSS的选择器
在CartoCSS中,地图样式通过一系列描述样式的规则来表达。这些样式规则被模块化的组织成样式块,作用于地图上的各种要素对象。每个样式块都由一对大括号{}包围,其中包含了若干条用于描述样式的属性和值。样式选择器的作用就是指明某个样式块是作用于哪个图层,或者进一步限定这些样式在特定图层中的作用范围是哪些要素对象。因此从本质上说,样式选择器其实就是描述了样式块的作用域。
ID选择器
图层ID就是图层名称,而图层名中的”@”和”#”符号需要替换成”__”双下划线。例如图层名为:” China_Province_ln@China#2”替换为”China_Province_In__China__2
# China_Province_In__China__2{}
类选择器
当需要对多个图层定义样式时,除了可以采用之前提到的ID选择器将所有图层列出来的方法以外,还可以使用图层类别来实现,也就是在这些图层标识的后面都加上一个类别名后缀,可以为它们增加一个同一个类别得到layer_1.roads和layer_2.roads两个新的标识,然后通过对.roads进行样式定义来实现与之前同样的效果。
.roads { // 这里定义的样式会被应用到所有 // 类别后缀为'roads'的图层上}
要素ID属性选择器
目前只支持featureID要素属性
#China_Road_L__China400{ [featureID=1]{ line-width:3; }}
缩放级别过滤器
将样式的作用范围限制在特定的地图缩放级别上
#China_Road_L__China400{ [zoom=1]{ line-width:2; }}
高亮显示
点击或者是移动鼠标样式
#China_Road_L__China400{ ::click{ line-color:#f00; } ::hover{ line-color:#0f0; }}
伪类
可以对同一图层设置不同的样式,如下代码:设置了红色细线和蓝色粗线配合透明度做出光晕效果
#China_Road_L__China400__1{ line-color: #C00; line-width: 2;}#China_Road_L__China400__1::glow{ line-color: #0AF;; line-opacity: 0.5; line-width: 10;}
CartoCSS实现的属性
其中的Color类型可为十六进行字符串:#000,也可为rgb:rgb(0,0,0)或者rgba:rgba(0,0,0,1)类型,和hsl类型:hsl(0.5,0.5,0.5)。 而point-comp-op的值可为以下几种:src-over、dst-over、src-in、dst-in、src-out、dst-atop、xor、plus、lighten。
点图层属性
线图层属性:
面图层属性:
文本图层属性:
三、CartoCSS在TiledVectorLayer中的使用
使用矢量分块进行客户端地图的配图非常容易上手,只需要创建一个矢量分块图层,然后编辑地图样式表就可以配出一幅好地图了,但是要配好一幅地图对用户对地图样式表——CartoCSS 的掌握程度要求比较高,因此,想在客户端配出一幅好地图,必须掌握好CartoCSS。以下为矢量分块客户端配图的详细步骤:
1. 创建TiledVectorLayer图层
使用矢量分块功能,必须先创建一个TiledVectorLayer图层并添加到地图中,例如:
layer = new SuperMap.Layer.TiledVectorLayer("China", url,{cacheEnabled:true}}); layer.events.on({"layerInitialized": addLayer}); function addLayer() { map.addLayers([layer]); var center = new SuperMap.LonLat(0,0); map.setCenter(center, 0); }
2. 编辑CartoCSS样式表
var cartoCss=["#World_Continent__China400{", "polygon-fill:rgb(245,243,240);", "line-width:1;", "line-color:#ddd;", "::hover[featureID=73]{", "polygon-fill:#f00;", "}", "}"].join("\n");
3. 应用CartoCSS
layer.setCartoCSS(cartoCss);
4. 其他用法
其中的CartoCSS样式文件也可以在创建TiledVectorLayer图层时传递进去,例如:
layer = new SuperMap.Layer.TiledVectorLayer("China", url,{cacheEnabled:true},{cartoCss:cartoCss});
也可以将cartoCSS样式保存在一个script标签里(把标签的type属性设置为”text”),然后获取下来,并设置到TiledVectorLayer上,例如:
<script type="text" id="cartoCssStr"> @color1:#C00; @color2:#0AF; @continentColor:#b7ae89; @width1:2; @width2:10; #China_Road_L__China400__1{ line-color: @color1; line-width: @width1; } #China_Road_L__China400__1::glow{ line-color: @color2; line-opacity: 0.5; line-width: @width2; } #China_Railway_L__China400 { ::line { line-width: 5; line-color: #777; } ::dash { line-color: #fff; line-width: 2.5; line-dasharray: 6, 6; } } #World_Continent__China400{ polygon-fill:@continentColor; line-width:1; line-color:@continentColor; } #China_Province_R__China400{ polygon-fill:@continentColor; line-color:rgba(0,0,0,0); } #China_Vegetation_R__China400{ polygon-fill: #579f33; polygon-opacity: 0.5; } #Chengqu_Text__China400{ text-size:20; text-face-name:"Times New Roman"; text-fill:"#036"; } </script> <script> var cartoCss=document.getElementById("cartoCssStr").text; layer.setCartoCSS(cartoCss); </script>
效果如下:
以上的例子只是个简单的展示,在咱们的产品包中也有相关的范例可以查看(http://support.supermap.com.cn/DataWarehouse/WebDocHelp/OnlineHelp/JavaScript/examples/examples.html#tiledVectorLayer),CartoCSS功能非常强大,目前我们的产品暂时只支持本文列表中的属性,相信你能够制作出非常精美的地图!
- SuperMap iClient for JavaScript矢量分块图层-地图快速渲染的利器
- supermap iclient for javascript开发中: 图层属性整理
- SuperMap iClient for JavaScript 时空数据动画的实现
- 浅谈iClient for javascript 要素图层
- iClient for JavaScript 图层过滤
- SuperMap之利用iclient获取wmts图层的方法
- SuperMap iClient 6R(2012) for JavaScript
- 浅谈Supermap iClient for JavaScript弹窗类
- SuperMap iClient for Silverlight 加载天地图
- SuperMap iClient 6R for Flex 简单操作地图
- SuperMap iClient 9D for MapboxGL地图风格浅析
- SuperMap iClient for JavaScript 时空数据动画的实现(二)
- SuperMap iClient for JavaScript 之连接查询-JoinItem
- SuperMap iClient for JavaScript 实现拖动半径进行距离查询
- SuperMap iClient for JavaScript常见问题解答集锦(一)
- SuperMap iClient for JavaScript常见问题解答集锦 (二)
- SuperMap iClient for javaScript 判断几何对象是否相交
- SuperMap iClient for JavaScript查询过滤条件构建
- win10 IE内核浏览器不能上网的问题
- linux下 查看外网IP命令
- 写一个PHP扩展
- 聊聊Makefile中的$(addprefix)
- 第三方登录的一些心得
- SuperMap iClient for JavaScript矢量分块图层-地图快速渲染的利器
- codeforces 236 B. Easy Number Challenge
- 八大排序方法解析与巧记(五)归并排序
- Ehcache 中ehcache.xml 配置详解和示例
- 开始记录问题
- 错误栈
- Python学习笔记-1(变量、类型、函数、类、作用域)
- Xcode断点调试
- STM32库函数端口初始化说明