样式
样式即图形的皮肤,比如线的宽度,面的填充色,点的图片标注等
maptalks里样式系统是个比较复杂的东西,需要你仔细的阅读对应的文档, 一开始maptalks里的样式仅仅是个二维的系统,后来开发了 maptalks-gl
webgl包后,整个样式系统又扩展了三维的样式系统,加上整个样式统本身又支持 function-type
故复杂度还是挺高的,需要耐心的阅读对应的文档
样式的分类
虽然样式系统复杂,但是其可以主要分成几类:
类别 | 描述 |
---|---|
polygon | 填充类 |
line | 线条类 |
marker | 点的标注类 |
text | 文本类 |
material | 材质 |
其中 material材质时 maptalks-gl
特有的:
材质是指三维渲染算法中,物体和光的交互过程中涉及到的参数。当前可用到的材质有pbr材质和phong(冯氏光照)两种材质。
目前材质主要用于:
VectorTileLayer的lit渲染插件(pbr材质)和phong渲染插件。 GLTF图层渲染模型默认的渲染材质是pbr材质。 Geo3DTilesLayer默认用的phong材质。
polygon类举例
symbol:{
polygonFill:'red',
polygonOpaicty:0.6
}
line类举例
symbol: {
lineColor: "red";
lineWidth: 2;
}
marker类举例
symbol:{
markerFile:'./poi.png'
markerWidth:20,
markerHeight:20
}
text类举例
symbol:{
textName:'hello maptalks',
textFill:'#fff',
textSize:14
}
样式组合
样式混合指的是一个图形里可以多个样式分类,比如点图形的样式里既可以有marker类
,也可以有text类
const symbol = [
{
markerType: "rectangle",
markerWidth: nameWidth + 30,
markerHeight: fontSize * 4,
markerHorizontalAlignment: "middle",
markerVerticalAlignment: "top",
markerLineWidth: 0,
markerFill: "#CBE7F5",
},
{
markerType: "rectangle",
markerWidth: nameWidth + 20,
markerHeight: fontSize * 2,
markerHorizontalAlignment: "middle",
markerVerticalAlignment: "top",
markerLineWidth: 2,
markerFill: "#CBE7F5",
},
{
markerType: "rectangle",
markerWidth: nameWidth + 30,
markerHeight: fontSize * 2,
markerHorizontalAlignment: "middle",
markerVerticalAlignment: "top",
markerLineColor: "#CBE7F5",
markerLineWidth: 0,
markerFill: "#CBE7F5",
},
{
textSize: fontSize,
textName: "{name}",
textDy: -fontSize * 3,
},
{
textDy: -fontSize,
textSize: fontSize,
textName: "{type}",
},
{
markerType: "ellipse",
markerFill: "red",
markerWidth: 4,
markerHeight: 4,
},
];
TIP
复杂的样式可以通过这种组合的方式来达到你的期望的需求,但是不是所有的样式都可以通过这种 方式来实现的,这里想表达的意思通过组合样式可以达到很多有意思的效果,取决于你的想象力
funtion-type
funtion-type表示样式的属性值可以是个表达式函数,比如一个点的图片大小随着地图缩放动态改变大小
这里以markerWidth为例: 以下的function-type定义能让图标的高宽随zoom级别线性变化。 1级上是4像素,20级上是20像素,中间级别则线性变化。
markerWidth: {
stops: [
[1, 4],
[20, 20]
]
},
关于function-type的具体文档请参考 function-type文档
颜色插值
maptalks样式系统里的function-type补充了个颜色插值,方便用户根据业务的信息给图形自动配色,其maptalks的一个特色功能
symbol: {
markerWidth: 2,
markerHeight: 2,
markerType: 'ellipse',
markerFill: {
type: 'color-interpolate',
property: 'value',
stops: [
[0, 'green'],
[50, 'yellow'],
[360, 'red']
]
},
markerLineWidth: 0
}
这个样式表示markerFill根据图形属性的value
来自动进行颜色插值,给每个图形自动配置出对应的颜色