docs: 修改官网文档

This commit is contained in:
shihui 2022-01-04 11:26:08 +08:00
parent 9048cd034e
commit 256957d9a1
12 changed files with 444 additions and 1022 deletions

View File

@ -26,860 +26,4 @@ const layer = new BaseLayer(option) // option - 传入构造函数的参数对
scene.addLayer(layer);
```
## options 配置项
通过 options我们可以在初始化的时候指定图层状态
```javascript
const options = {
name: 'xxx',
zIndex: 1,
};
const layer = new Layer(options);
```
### name
<description> _string_ **optional** _default:_ 自动数字编号</description>
设置图层名称,可根据 name 获取 layer
```javascript
scene.getLayerByName(name);
```
### visible
<description> _bool_ **optional** _default:_ true</description>
图层是否可见
### zIndex
<description> _int_ **optional** _default:_ 0</description>
图层绘制顺序,数值大绘制在上层,可以控制图层绘制的上下层级
L7 采用队列渲染的机制,所有的图层在内部保存在一个数组中,每一帧的渲染会将图层数组按照 zIndex 的值进行排序,然后遍历数组,将符合条件的图层渲染到场景中
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*a5xKRZmhoogAAAAAAAAAAAAAARQnAQ'>
### minZoom
<description> _number_ **optional** _default:_ Mapbox 0-24 高德 2-19)</description>
图层显示最小缩放等级
### maxZoom
<description> _number_ **optional** _default:_ Mapbox 0-24 高德 2-19)</description>
图层显示最大缩放等级
### autoFit
<description> _bool_ **optional** _default:_ false</description>
layer 初始化完成之后,地图是否自动缩放到图层范围
### pickingBuffer
<description> _bool_ **optional** _default:_ 0</description>
图层拾取缓存机制,如 1px 宽度的线鼠标很难拾取(点击)到, 通过设置该参数可扩大拾取的范围(放大图层对象的尺寸)
### blend
<description> _string_ **optional** _default:_ 'normal'</description>
图层元素混合效果
- normal 正常效果 默认 发生遮挡的时候,只会显示前面的图层的颜色
- additive 叠加模式 发生遮挡的时候,显示前后图层颜色的叠加
- subtractive 相减模式 发生遮挡的时候,显示前后图层颜色的相减
- max 最大值 发生遮挡的时候,显示图层颜色 rgb 的最大值
# 方法
### source
设置图层数据以及解析配置 source(data, config)
- data { geojson | json | csv }
- config   可选   数据源配置项
- parser 数据解析,默认是解析层 geojson
- transforms [transformtransform ]  数据处理转换 可设置多个
parser 和  transforms [见 source 文档](../../source/source)
```javascript
layer.source(data, {
parser: {
type: 'csv',
x: 'lng',
y: 'lat',
},
transforms: [
{
type: 'map',
callback: function(item) {
const [x, y] = item.coordinates;
item.lat = item.lat * 1;
item.lng = item.lng * 1;
item.v = item.v * 1;
item.coordinates = [x * 1, y * 1];
return item;
},
},
{
type: 'hexagon',
size: 6000,
field: 'v',
method: 'sum',
},
],
});
```
### scale
设置数据字段映射方法。
用户在使用 color、size 或者是 style 中的数据映射字段的时候若是使用了指定了按比例映射则都需要处理字段到值的映射关系。scale 方法就可以设置字段到值的映射是按哪一种类型进行映射。
```javascript
.color('key', ['#f00', '#0f0', '#00f'])
.size('key', [10, 20, 30])
.style({
opacity: ['key', [0, 0.5, 1.0]]
})
```
- `field` 指定 source 中传入的数据中用于映射的字段名
- `scaleConfig` 列定义配置,对象类型,可配置的属性如下:
#### scale 类型
**连续型**
- linear 线性
- log
- pow 指数型
**连续分类型**
- quantile 等分位
- quantize 等间距
**枚举型**
- cat 枚举
```javascript
layer.scale('name', {
type: 'cat',
});
// 设置多个scale
// 字段名为 key, value 为scale配置项
layer.scale({
name: {
type: 'cat',
},
value: {
type: 'linear',
},
});
```
## 视觉编码方法
可视化编码是将数据转换为可视形式的过程L7 目前支持形状,大小,颜色 3 种视觉通道,你可以指定数据字段,为不同要素设置不同的图形属性。
<img width="100%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*PzoTRJnY-fIAAAAAAAAAAAAAARQnAQ'>
### size
将数据值映射到图形的大小上的方法size 方法具体的参数使用可以查看对应图层的详细文档
```javascript
pointLayer.size(10); // 常量
pointLayer.size('type'); // 使用字段映射到大小
pointLayer.size('type', [0, 10]); // 使用字段映射到大小,并指定最大值和最小值
pointLayer.size('type', (type) => {
// 回调函数
if (type === 'a') {
return 10;
}
return 5;
});
```
#### size(value
传入数字常量,如  `pointLayer.size(20)`
#### size(field)
根据 field 字段的值映射大小,使用默认的`最大值 max:10`  和`最小值 min: 1`。
#### size(field, callback)
使用回调函数控制图形大小。
- `callback`: function 回调函数。
```javascript
pointLayer.size('age', (value) => {
if (value === 1) {
return 5;
}
return 10;
});
```
### color
将数据值映射到图形的颜色上的方法。
```javascript
layer.color('red'); // 常量颜色
layer.color('type'); // 对 type 字段进行映射,使用内置的颜色
layer.color('type', ['red', 'blue']); // 指定颜色
layer.color('type', (type) => {
// 通过回调函数
if (type === 'a') {
return 'red';
}
return 'blue';
});
layer.color('type*value', (type, value) => {
//多个参数,通过回调函数
if (type === 'a' && value > 100) {
return 'red';
}
return 'blue';
});
```
#### color(value)
参数:`value` string
只支持接收一个参数value 可以是:
- 映射至颜色属性的数据源字段名,如果数据源中不存在这个字段名的话,则按照常量进行解析,这个时候会使用 L7 默认提供的颜色。
- 也可以直接指定某一个具体的颜色值 color如 '#fff', 'white','rgba(255,0,0,0.5)' ,rgb(255,0,1) 等。
示例
```javascript
layer.color('name'); // 映射数据字段
layer.color('white'); // 指定颜色
```
#### color(field, colors)
参数:
- `field`: stringfield 为映射至颜色属性的数据源字段名,也支持指定多个参数。
- `colors`: string | array | function
colors 的参数有以下情况:  如果为空,即未指定颜色的数组,那么使用内置的全局的颜色;如果需要指定颜色,则需要以数组格式传入,那么分类的颜色按照数组中的颜色确定。
```javascript
layer.color('name'); // 使用默认的颜色
layer.color('name', ['red', 'blue']); // 使用传入的指定颜色
```
- colors 如果是回调函数,则该回调函数的参数为对应字段的数值,具体使用如下,当 color 映射为多个字段时,参数按照字段声明的顺序传入:
```javascript
layer.color('gender', (value) => {
if (value === 1) {
return 'red';
}
return 'blue';
});
layer.color('gender*age', (gender, age) => {
if (age === 20 && gender == ' 男') {
return 'red';
}
return 'blue';
});
```
### shape
通常一种图层可以有多种表现形式shape 方法用于指定图层具体的表现形式,以 PointLayer 的 shape 为例:
```javascript
shape('circle'); // 圆形
shape('triangle'); // 三角形
shape('cylinder'); // 圆柱
```
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*iN0nTYRDd3AAAAAAAAAAAABkARQnAQ'>
**shape(shape)**
参数 `shape` string
- 只支持接收一个参数,指定几何图像对象绘制的形状。下表列出了不同的 图层 几何图形对象支持的 shape 形状
| layer 类型 | shape 类型 | 备注 |
| ---------- | -------------------------------------------------------------------------------------- | ---- |
| point | 2d:point,circle, square, triangle,hexagon,image,text 3d:circle,triangle,hexagon,square | |
| line | line,arc, arc3d, greatcircle | |
| polygon | fill,line, extrude | |
**shape(field, shapes)**
- shape 根据字段指定行形状,比如根据字段指定 PointLayer/imageLayer 的 icon 类型
```javascript
scene.addImage(
'00',
'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg',
);
scene.addImage(
'01',
'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg',
);
scene.addImage(
'02',
'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg',
);
const imageLayer = new PointLayer()
.source(data, {
parser: {
type: 'json',
x: 'longitude',
y: 'latitude',
},
})
.shape('name', ['00', '01', '02'])
.size(20);
scene.addLayer(imageLayer);
```
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*oVyHT5S3sv0AAAAAAAAAAABkARQnAQ'>
[在线案例](../../examples/point/image#image)
**shape(field, callback)**
- shape 也支持回调函数的写法
```javascript
.shape('key', value => {
if(value > 10) {
return 'circle';
} else {
return 'triangle';
}
}
```
### style
style 方法通常用于描述图层具体的样式,大多数图层会支持一些比较通用的属性, 如 opacity 属性,同时每个图层也会有仅限本图层支持的属性,如只有
CityBuildingLayer 支持的 windowColor 属性,每个图层具体要如何配置属性请查看每个图层的详细文档。
- opacity 设置透明度 大部分图层都支持
- stroke 线填充颜色 仅点图层支持
- strokeWidth 线的宽度 仅点图层支持
```javascript
layer.style({
opacity: 0.8,
stroke: 'white',
});
```
- 样式数据映射
在大多数情况下,用户需要将 source 中传入的数据映射到图层的元素中,以此来达到需要的可视化的效果,比如想要用柱形图表示各地的人口数据,代码可能是这个样子的:
```javascript
const population = await getPopulation();
const layer = new PointLayer()
.source(population)
.shape('cylinder')
.color('#f00')
.size('population'); // population 字段表示数据中的人口值
scene.addLayer(layer);
```
而在一些特殊的业务场景下,我们可能需要将除了 size、color、以外的属性根据数据动态设置如我们在绘制文本标注的时候需要根据文本的长短来设置偏移量以保证文本位置的相对固定。在这种情况下我们就需要使用图层样式数据纹理来完成这一项工作。
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*LPoeTJ5tPxMAAAAAAAAAAAAAARQnAQ'>
```javascript
const pointLayer = new PointLayer({})
.source(data, {
parser: {
type: 'json',
x: 'j',
y: 'w',
},
})
.shape('m', 'text')
.size(12)
.color('w', ['#0e0030', '#0e0030', '#0e0030'])
.style({
textAnchor: 'center', // 文本相对锚点的位置 center|left|right|top|bottom|top-left
textOffset: 'textOffset', // 文本相对锚点的偏移量 [水平, 垂直]
fontFamily,
iconfont: true,
textAllowOverlap: true,
});
```
[在线案例](../../examples/point/text#styleMap)
从 L7 2.5 开始,各图层样式将逐步支持样式数据映射
| layer 类型/shape | 支持的样式字段 | 备注 |
| ---------------------- | ---------------------------------------------------- | --------------------------------- |
| pointLayer/fill | opacity、strokeOpacity、strokeWidth、stroke、offsets | shape circle、triangle... |
| pointLayer/image | opacity、offsets | offsets 经纬度偏移 |
| pointLayer/normal | opacity、offsets | |
| pointLayer/text | opacity、strokeWidth、stroke、textOffset | textOffset 相对文字画布位置的偏移 |
| pointLayer/extrude | opacity | |
| polygonLayer/fill | opacity | |
| polygonLayer/extrude | opacity | |
| lineLayer/line | opacity | |
| lineLayer/arc | opacity、thetaOffset | thetaOffset 弧线的弯曲弧度 |
| lineLayer/arc3d | opacity | |
| lineLayer/great_circle | opacity | |
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*F_QoSr-W0BwAAAAAAAAAAAAAARQnAQ'>
[在线案例](../../examples/point/scatter#scatterStyleMap)
### 纹理方法
目前只在线图层上支持了纹理方法
- textute 方法支持传入由 scene.addImage 方法添加的全局 icon 贴图资源
```javascript
// 首先在全局加载图片资源
scene.addImage(
'plane',
'https://gw.alipayobjects.com/zos/bmw-prod/0ca1668e-38c2-4010-8568-b57cb33839b9.svg',
);
const layer = new LineLayer({
blend: 'normal',
})
.source(data, {
parser: {
type: 'json',
x: 'lng1',
y: 'lat1',
x1: 'lng2',
y1: 'lat2',
},
})
.size(25)
.shape('arc')
.texture('plane') // 为图层绑定纹理
.color('#8C1EB2')
.style({
lineTexture: true, // 开启线的贴图功能
iconStep: 30, // 设置贴图纹理的间距
textureBlend: 'replace', // 设置纹理混合方式,默认值为 normal可选值有 normal/replace 两种
});
```
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*0UrUTakTFQsAAAAAAAAAAAAAARQnAQ'>
[在线案例](../../examples/gallery/animate#animate_path_texture)
## 图层更新方法
如果已经添加了图层,需要修改图层显示样式可以再次调用图形映射方法,然后调用 `scene.render()`更新渲染即可
### 样式更新
```javascript
layer.color('blue');
layer.size(10);
layer.style({});
scene.render();
```
### shape 更新
在在某些场景下切换 shape 的时候,我们需要重新构建图层元素的顶点构造。这意味着我们简单的改变当前图层的单一属性就达到更新图层的目的。
L7 已经为某些图层的 shape 切换做了额外的处理,如 PointLayer 的 "circle" 切换 "cylinder" 等,具体哪些图层盒支持直接切换则需要用户查阅具体图层的文档。
🌟 在不支持直接切换 shape 的时候建议重新创建图层
### setData(data, option?: {})
更新 Source 数据
参数:
- data 数据
- option 默认和初始配置项一致,如果数据格式相同可不设置
调用 setData 方法会自动更新图层渲染
```javascript
layer.setData(data);
```
### setBlend(type: string)
设置图层叠加方法
参数:
- type blend 类型 normal additive subtractive max
## 图层控制方法
### show()
图层显示
```javascript
layer.show();
```
### hide()
图层隐藏
```javascript
layer.hide();
```
### isVisible(): boolean
图层是否可见
```javascript
layer.isVisible();
```
### setIndex(zIndex: int)
设置图层绘制顺序
```javascript
layer.setIndex(1);
```
### fitBounds()
缩放到图层范围
```javascript
layer.fitBounds();
```
### setMinZoom(zoom: number)
设置图层最小缩放等级
```javascript
layer.setMinZoom(zoom);
```
### setMaxZoom(zoom: number)
设置图层最大缩放等级
```javascript
layer.setMinZoom(zoom);
```
设置图层最大缩放等级
参数
- zoom {number}
```javascript
layer.setMinZoom(zoom);
```
## 图层交互方法
### active(activeOption | boolean)
开启或者关闭 mousehover 元素高亮效果
```javascript
activeOption: {
color: '#f00';
}
```
```javascript
// 开启 Active 使用默认高亮颜色
layer.active(true);
// 开启 Active 自定义高亮颜色
layer.active({
color: 'red',
});
// 关闭高亮效果
layer.active(false);
```
### setActive(featureId: int)
根据元素 ID 设置指定元素 hover 高亮
🌟 指定元素高亮不等于图层高亮,一个图层包含多个元素,一般传入 source 的数据数组中有多少单条数据,一个图层就有多少元素
```javascript
layer.setActive(featureId);
```
### select(selectOption | boolean)
开启或者关闭 mouseclick 元素选中高亮效果
```javascript
selectOption: {
color: '#f00';
}
```
```javascript
// 开启 Active 使用默认高亮颜色
layer.select(true);
// 开启 Active 自定义高亮颜色
layer.select({
color: 'red',
});
// 关闭高亮效果
layer.select(false);
```
### setSelect(featureId: int)
根据元素 ID 设置指定元素 click 选中 高亮
🌟 指定元素高亮不等于图层高亮,一个图层包含多个元素,一般传入 source 的数据数组中有多少单条数据,一个图层就有多少元素
```javascript
layer.setSelect(featureId);
```
### getLegendItems(type: string)
获取图例配置
- type 图例类型
```javascript
layer.getLegendItems('color');
layer.getLegendItems('size');
```
## 鼠标事件
鼠标事件回调参数 target
```javascript
layer.on(eventName, (target) => console.log(target));
```
- x: number 鼠标  在地图位置 x 坐标
- y: number 鼠标  在地图位置 y 坐标
- type: string 鼠标事件类型
- lngLat: 经度度对象 {lng:number, lat: number }; 鼠标所在位置经纬度
- feature: any; 数据选中的地理要素信息
- featureId: number | null; 数据选中的地理要素的 ID
### click
点击事件
```javascript
layer.on('click', (e) => console.log(e));
```
### mousemove
鼠标移动事件
```javascript
layer.on('mousemove', (e) => console.log(e));
```
### mouseout
鼠标移除
```javascript
layer.on('mouseout', (e) => console.log(e));
```
### mouseup
鼠标抬起
```javascript
layer.on('mouseup', (e) => console.log(e));
```
### mousedown
鼠标按下
```javascript
layer.on('mousedown', (e) => console.log(e));
```
### contextmenu
鼠标右键
```javascript
layer.on('contextmenu', (e) => console.log(e));
```
### unclick
点击未拾取到元素
```javascript
layer.on('unclick', (e) => console.log(e));
```
### unmousemove
鼠标移动未拾取到元素
```javascript
layer.on('unmousemove', (e) => console.log(e));
```
### unmouseup
鼠标抬起未拾取到元素
```javascript
layer.on('unmouseup', (e) => console.log(e));
```
### unmousedown
鼠标按下未拾取到元素
```javascript
layer.on('unmousedown', (e) => console.log(e));
```
### uncontextmenu
鼠标右键位拾取到元素
```javascript
layer.on('uncontextmenu', (e) => console.log(e));
```
### unpick
所有鼠标事件未拾取到
```javascript
layer.on('unpick', (e) => console.log(e));
```
使用示例
```javascript
layer.on('click', (ev) => {}); // 鼠标左键点击图层事件
layer.on('mouseenter', (ev) => {}); // 鼠标进入图层要素
layer.on('mousemove', (ev) => {}); // 鼠标在图层上移动时触发
layer.on('mouseout', (ev) => {}); // 鼠标移出图层要素时触发
layer.on('mouseup', (ev) => {}); // 鼠标在图层上单击抬起时触发
layer.on('mousedown', (ev) => {}); // 鼠标在图层上单击按下时触发
layer.on('contextmenu', (ev) => {}); // 图层要素点击右键菜单
// 鼠标在图层外的事件
layer.on('unclick', (ev) => {}); // 图层外点击
layer.on('unmousemove', (ev) => {}); // 图层外移动
layer.on('unmouseup', (ev) => {}); // 图层外鼠标抬起
layer.on('unmousedown', (ev) => {}); // 图层外单击按下时触发
layer.on('uncontextmenu', (ev) => {}); // 图层外点击右键
layer.on('unpick', (ev) => {}); // 图层外的操作的所有事件
```
## 图层事件
### inited
参数 option
- target 当前 layer
- type 事件类型
图层初始化完成后触发
```javascript
layer.on('inited', (option) => {});
```
### add
图层添加到 scene
参数 option
- target 当前 layer
- type 事件类型
```javascript
layer.on('add', (type) => console.log(type));
```
### remove
图层移除时触发
参数 option
- target 当前 layer
- type 事件类型
```javascript
layer.on('remove', (type) => console.log(type));
```
## 图层框选
### boxSelect
参数 option
- box [x1: number, y1: number, x2: number, y2: number] 相较于
- cb (...args: any[]) => void 传入的回调方法,返回框选内部的 feature
```javascript
layer.boxSelect(box, cb);
// (x1, y1), (x2, y2) 框选的方框左上角和右下角相对于地图左上角的像素坐标
// cb 是传入的回调函数,回调函数返回的参数是选中的 feature 对象数组,对象的字段和用户传入的数据相关
```
`markdown:docs/common/layer/base.md`

View File

@ -5,47 +5,32 @@ order: 3
`markdown:docs/common/style.md`
亮度图又称点密度图,单位面积的内点的个数越多,亮度会越亮,亮度图一般用来表达海量点数据分布情况
平面点图层在开启动画模式的情况下,是一种特殊的图层类型:水波点。图层由一圈圈向外扩散的圆环构成。
<img width="80%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*pcp3RKnNK1oAAAAAAAAAAAAAARQnAQ'>
## 使用
### shape
- dot 如果需要使用亮度图可以将 shape 设置为 dot,或者不设置 shape
- circle、triangle、square 等平面图形都可
### color
### animate
- 无权重
如果数据没有权重可以将颜色设置为常量,渲染时会自动进行颜色叠加,点越多颜色越亮
- 有权重
如果数据有权重可以设置一组同一色相,不同亮度的色带,值越大亮度会越亮。
- boolean animateOption
```javascript
const pointLayer = new PointLayer()
.source(data)
.size(2)
.shape('dot')
.color('h8', [
'#0A3663',
'#1558AC',
'#3771D9',
'#4D89E5',
'#64A5D3',
'#72BED6',
'#83CED6',
'#A6E1E0',
'#B8EFE2',
'#D7F9F0',
])
.style({
opacity: 1,
});
.animate(true)
scene.addLayer(pointLayer);
.animate({
enable: true
})
```
## 相关 demo
### size
在水波点图层中,由于边缘透明的原因,点的大小看上去要比相同 size 的非水波点要小一些。
[城市亮度图](../../../examples/point/dot#normal2)
[在线案例](../../../examples/point/scatter#animatePoint)
`markdown:docs/common/layer/base.md`

View File

@ -1,13 +1,13 @@
`markdown:docs/common/style.md`
## 配置项
`markdown:docs/common/layer/options.md`
`markdown:docs/common/layer/layer_encode.md`
`markdown:docs/common/layer/layer_style.md`
`markdown:docs/common/layer/layer_texture.md`
`markdown:docs/common/layer/layer_update.md`
`markdown:docs/common/layer/layer_ctr.md`

View File

@ -1,6 +1,6 @@
## 图层控制方法
### show 显示
### show()
图层显示
@ -8,7 +8,7 @@
layer.show();
```
### hide 隐藏
### hide()
图层隐藏
@ -16,17 +16,23 @@ layer.show();
layer.hide();
```
### isVisible 是否可见
### isVisible(): boolean
图层是否可见
return `true | false`
```javascript
layer.isVisible();
```
### setIndex 设置图层层级
### setIndex(zIndex: int)
设置图层绘制顺序
### fitBounds 缩放到图层范围
```javascript
layer.setIndex(1);
```
### fitBounds()
缩放到图层范围
@ -34,25 +40,18 @@ return `true | false`
layer.fitBounds();
```
### setMinZoom 设置图层最小可见等级
### setMinZoom(zoom: number)
设置图层最小缩放等级
参数
- zoom {number}
```javascript
layer.setMinZoom(zoom);
```
### setMaxZoom 设置图层最大可见等级
### setMaxZoom(zoom: number)
设置图层最大缩放等级
参数
- zoom {number}
```javascript
layer.setMinZoom(zoom);
```
@ -65,4 +64,4 @@ layer.setMinZoom(zoom);
```javascript
layer.setMinZoom(zoom);
```
```

View File

@ -1,16 +1,15 @@
## 数据映射
# 方法
### source 数据
### source
数据源为 layer 设置数据 source(data,config)
设置图层数据以及解析配置 source(data, config)
- data {geojson|json|csv}
源数据
- data { geojson | json | csv }
- config   可选   数据源配置项
- parser 数据解析,默认是解析层 geojson
- transforms [transformtransform ]  数据处理转换 可设置多个
parser 和  transforms [见 source 文档](../../api/source/source)
parser 和  transforms [见 source 文档](../../source/source)
```javascript
layer.source(data, {
@ -22,7 +21,7 @@ layer.source(data, {
transforms: [
{
type: 'map',
callback: function (item) {
callback: function(item) {
const [x, y] = item.coordinates;
item.lat = item.lat * 1;
item.lng = item.lng * 1;
@ -41,11 +40,23 @@ layer.source(data, {
});
```
### scale 度量
### scale
设置数据字段映射方法
设置数据字段映射方法
- `field` 字段名。
用户在使用 color、size 或者是 style 中的数据映射字段的时候若是使用了指定了按比例映射则都需要处理字段到值的映射关系。scale 方法就可以设置字段到值的映射是按哪一种类型进行映射。
```javascript
.color('key', ['#f00', '#0f0', '#00f'])
.size('key', [10, 20, 30])
.style({
opacity: ['key', [0, 0.5, 1.0]]
})
```
- `field` 指定 source 中传入的数据中用于映射的字段名
- `scaleConfig` 列定义配置,对象类型,可配置的属性如下:
@ -84,11 +95,16 @@ layer.scale({
},
});
```
## 视觉编码方法
可视化编码是将数据转换为可视形式的过程L7 目前支持形状,大小,颜色 3 种视觉通道,你可以指定数据字段,为不同要素设置不同的图形属性。
### size 大小
<img width="100%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*PzoTRJnY-fIAAAAAAAAAAAAAARQnAQ'>
将数据值映射到图形的大小上的方法,具体 size 的表示具体意义可以查看对应图层的文档
### size
将数据值映射到图形的大小上的方法size 方法具体的参数使用可以查看对应图层的详细文档
```javascript
pointLayer.size(10); // 常量
@ -103,15 +119,15 @@ pointLayer.size('type', (type) => {
});
```
#### size(value常量
#### size(value
传入数字常量,如  `pointLayer.size(20)`
#### size(field)
#### size(field)
根据 field 字段的值映射大小,使用默认的`最大值 max:10`  和`最小值 min: 1`。
#### size(field, callback) 回调函数
#### size(field, callback)
使用回调函数控制图形大小。
@ -126,7 +142,7 @@ pointLayer.size('age', (value) => {
});
```
### color 颜色
### color
将数据值映射到图形的颜色上的方法。
@ -150,7 +166,7 @@ layer.color('type*value', (type, value) => {
});
```
#### color(value) 常量
#### color(value)
参数:`value` string
只支持接收一个参数value 可以是:
@ -166,7 +182,7 @@ layer.color('name'); // 映射数据字段
layer.color('white'); // 指定颜色
```
#### color(field, colors) 字段映射
#### color(field, colors)
参数:
@ -198,15 +214,23 @@ layer.color('gender*age', (gender, age) => {
});
```
### shape 形状
### shape
将数据值映射到图形的形状上的方法。
通常一种图层可以有多种表现形式shape 方法用于指定图层具体的表现形式,以 PointLayer 的 shape 为例:
```javascript
shape('circle'); // 圆形
shape('triangle'); // 三角形
shape('cylinder'); // 圆柱
```
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*iN0nTYRDd3AAAAAAAAAAAABkARQnAQ'>
**shape(shape)**
参数`shape` string
参数 `shape` string
只支持接收一个参数,指定几何图像对象绘制的形状。下表列出了不同的 图层 几何图形对象支持的 shape 形状
- 只支持接收一个参数,指定几何图像对象绘制的形状。下表列出了不同的 图层 几何图形对象支持的 shape 形状
| layer 类型 | shape 类型 | 备注 |
| ---------- | -------------------------------------------------------------------------------------- | ---- |
@ -216,5 +240,48 @@ layer.color('gender*age', (gender, age) => {
**shape(field, shapes)**
- shape 根据字段指定行形状,比如根据字段指定 PointLayer/imageLayer 的 icon 类型
```javascript
scene.addImage(
'00',
'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg',
);
scene.addImage(
'01',
'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg',
);
scene.addImage(
'02',
'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg',
);
const imageLayer = new PointLayer()
.source(data, {
parser: {
type: 'json',
x: 'longitude',
y: 'latitude',
},
})
.shape('name', ['00', '01', '02'])
.size(20);
scene.addLayer(imageLayer);
```
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*oVyHT5S3sv0AAAAAAAAAAABkARQnAQ'>
[在线案例](../../examples/point/image#image)
**shape(field, callback)**
- shape 也支持回调函数的写法
```javascript
.shape('key', value => {
if(value > 10) {
return 'circle';
} else {
return 'triangle';
}
}
```

View File

@ -1,7 +1,6 @@
## 图层事件
### inited 图层初始化
<description> _bool_ **可选** _default:_ null</description>
### inited
参数 option
@ -14,7 +13,7 @@
layer.on('inited', (option) => {});
```
### add 图层被添加
### add
图层添加到 scene
@ -23,7 +22,11 @@ layer.on('inited', (option) => {});
- target 当前 layer
- type 事件类型
### remove 图层被移除
```javascript
layer.on('add', (type) => console.log(type));
```
### remove
图层移除时触发
@ -31,3 +34,22 @@ layer.on('inited', (option) => {});
- target 当前 layer
- type 事件类型
```javascript
layer.on('remove', (type) => console.log(type));
```
## 图层框选
### boxSelect
参数 option
- box [x1: number, y1: number, x2: number, y2: number] 相较于
- cb (...args: any[]) => void 传入的回调方法,返回框选内部的 feature
```javascript
layer.boxSelect(box, cb);
// (x1, y1), (x2, y2) 框选的方框左上角和右下角相对于地图左上角的像素坐标
// cb 是传入的回调函数,回调函数返回的参数是选中的 feature 对象数组,对象的字段和用户传入的数据相关
```

View File

@ -1,13 +1,14 @@
## 图层交互方法
### active 鼠标滑过高亮
### active(activeOption | boolean)
开启或者关闭 mousehover 元素高亮效果
参数: activeOption | boolean
activeOption
-color 填充颜色
```javascript
activeOption: {
color: '#f00';
}
```
```javascript
// 开启 Active 使用默认高亮颜色
@ -23,22 +24,25 @@ layer.active({
layer.active(false);
```
### setActive 设置指定要素高亮
### setActive(featureId: int)
根据元素 ID 设置指定元素 hover 高亮
🌟 指定元素高亮不等于图层高亮,一个图层包含多个元素,一般传入 source 的数据数组中有多少单条数据,一个图层就有多少元素
```javascript
layer.setActive(id);
layer.setActive(featureId);
```
### select 鼠标选中高亮
### select(selectOption | boolean)
开启或者关闭 mouseclick 元素选中高亮效果
参数: selectOption | boolean
selectOption
-color 填充颜色
```javascript
selectOption: {
color: '#f00';
}
```
```javascript
// 开启 Active 使用默认高亮颜色
@ -54,10 +58,24 @@ layer.select({
layer.select(false);
```
### setSelect 设置指定要求选中
### setSelect(featureId: int)
根据元素 ID 设置指定元素 click 选中 高亮
🌟 指定元素高亮不等于图层高亮,一个图层包含多个元素,一般传入 source 的数据数组中有多少单条数据,一个图层就有多少元素
```javascript
layer.setSelect(id);
layer.setSelect(featureId);
```
### getLegendItems(type: string)
获取图例配置
- type 图例类型
```javascript
layer.getLegendItems('color');
layer.getLegendItems('size');
```

View File

@ -1,13 +1,12 @@
### style 样式
### style
全局设置图形显示属性
style 方法通常用于描述图层具体的样式,大多数图层会支持一些比较通用的属性, 如 opacity 属性,同时每个图层也会有仅限本图层支持的属性,如只有
CityBuildingLayer 支持的 windowColor 属性,每个图层具体要如何配置属性请查看每个图层的详细文档。
- opacity   设置透明度
- opacity 设置透明度 大部分图层都支持
- stroke 线填充颜色 仅点图层支持
- offsets 偏移量 [number, number] x 和 y 方向偏移 仅支持 pointLayer
- strokeWidth 线的宽度 仅点图层支持
```javascript
@ -16,3 +15,63 @@ layer.style({
stroke: 'white',
});
```
- 样式数据映射
在大多数情况下,用户需要将 source 中传入的数据映射到图层的元素中,以此来达到需要的可视化的效果,比如想要用柱形图表示各地的人口数据,代码可能是这个样子的:
```javascript
const population = await getPopulation();
const layer = new PointLayer()
.source(population)
.shape('cylinder')
.color('#f00')
.size('population'); // population 字段表示数据中的人口值
scene.addLayer(layer);
```
而在一些特殊的业务场景下,我们可能需要将除了 size、color、以外的属性根据数据动态设置如我们在绘制文本标注的时候需要根据文本的长短来设置偏移量以保证文本位置的相对固定。在这种情况下我们就需要使用图层样式数据纹理来完成这一项工作。
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*LPoeTJ5tPxMAAAAAAAAAAAAAARQnAQ'>
```javascript
const pointLayer = new PointLayer({})
.source(data, {
parser: {
type: 'json',
x: 'j',
y: 'w',
},
})
.shape('m', 'text')
.size(12)
.color('w', ['#0e0030', '#0e0030', '#0e0030'])
.style({
textAnchor: 'center', // 文本相对锚点的位置 center|left|right|top|bottom|top-left
textOffset: 'textOffset', // 文本相对锚点的偏移量 [水平, 垂直]
fontFamily,
iconfont: true,
textAllowOverlap: true,
});
```
[在线案例](../../examples/point/text#styleMap)
从 L7 2.5 开始,各图层样式将逐步支持样式数据映射
| layer 类型/shape | 支持的样式字段 | 备注 |
| ---------------------- | ---------------------------------------------------- | --------------------------------- |
| pointLayer/fill | opacity、strokeOpacity、strokeWidth、stroke、offsets | shape circle、triangle... |
| pointLayer/image | opacity、offsets | offsets 经纬度偏移 |
| pointLayer/normal | opacity、offsets | |
| pointLayer/text | opacity、strokeWidth、stroke、textOffset | textOffset 相对文字画布位置的偏移 |
| pointLayer/extrude | opacity | |
| polygonLayer/fill | opacity | |
| polygonLayer/extrude | opacity | |
| lineLayer/line | opacity | |
| lineLayer/arc | opacity、thetaOffset | thetaOffset 弧线的弯曲弧度 |
| lineLayer/arc3d | opacity | |
| lineLayer/great_circle | opacity | |
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*F_QoSr-W0BwAAAAAAAAAAAAAARQnAQ'>
[在线案例](../../examples/point/scatter#scatterStyleMap)

View File

@ -0,0 +1,39 @@
### 纹理方法
目前只在线图层上支持了纹理方法
- textute 方法支持传入由 scene.addImage 方法添加的全局 icon 贴图资源
```javascript
// 首先在全局加载图片资源
scene.addImage(
'plane',
'https://gw.alipayobjects.com/zos/bmw-prod/0ca1668e-38c2-4010-8568-b57cb33839b9.svg',
);
const layer = new LineLayer({
blend: 'normal',
})
.source(data, {
parser: {
type: 'json',
x: 'lng1',
y: 'lat1',
x1: 'lng2',
y1: 'lat2',
},
})
.size(25)
.shape('arc')
.texture('plane') // 为图层绑定纹理
.color('#8C1EB2')
.style({
lineTexture: true, // 开启线的贴图功能
iconStep: 30, // 设置贴图纹理的间距
textureBlend: 'replace', // 设置纹理混合方式,默认值为 normal可选值有 normal/replace 两种
});
```
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*0UrUTakTFQsAAAAAAAAAAAAAARQnAQ'>
[在线案例](../../examples/gallery/animate#animate_path_texture)

View File

@ -11,9 +11,17 @@ layer.style({});
scene.render();
```
### setData
### shape 更新
在在某些场景下切换 shape 的时候,我们需要重新构建图层元素的顶点构造。这意味着我们简单的改变当前图层的单一属性就达到更新图层的目的。
L7 已经为某些图层的 shape 切换做了额外的处理,如 PointLayer 的 "circle" 切换 "cylinder" 等,具体哪些图层盒支持直接切换则需要用户查阅具体图层的文档。
🌟 在不支持直接切换 shape 的时候建议重新创建图层
### setData(data, option?: {})
更新 Source 数据
参数:
- data 数据
@ -25,9 +33,9 @@ scene.render();
layer.setData(data);
```
### setBlend(type)
### setBlend(type: string)
设置图层叠加方法
参数:
- type blend 类型
- type blend 类型 normal additive subtractive max

View File

@ -2,6 +2,10 @@
鼠标事件回调参数 target
```javascript
layer.on(eventName, (target) => console.log(target));
```
- x: number 鼠标  在地图位置 x 坐标
- y: number 鼠标  在地图位置 y 坐标
- type: string 鼠标事件类型
@ -9,10 +13,107 @@
- feature: any; 数据选中的地理要素信息
- featureId: number | null; 数据选中的地理要素的 ID
### 使用示例
### click
点击事件
```javascript
layer.on('click', (e) => console.log(e));
```
### mousemove
鼠标移动事件
```javascript
layer.on('mousemove', (e) => console.log(e));
```
### mouseout
鼠标移除
```javascript
layer.on('mouseout', (e) => console.log(e));
```
### mouseup
鼠标抬起
```javascript
layer.on('mouseup', (e) => console.log(e));
```
### mousedown
鼠标按下
```javascript
layer.on('mousedown', (e) => console.log(e));
```
### contextmenu
鼠标右键
```javascript
layer.on('contextmenu', (e) => console.log(e));
```
### unclick
点击未拾取到元素
```javascript
layer.on('unclick', (e) => console.log(e));
```
### unmousemove
鼠标移动未拾取到元素
```javascript
layer.on('unmousemove', (e) => console.log(e));
```
### unmouseup
鼠标抬起未拾取到元素
```javascript
layer.on('unmouseup', (e) => console.log(e));
```
### unmousedown
鼠标按下未拾取到元素
```javascript
layer.on('unmousedown', (e) => console.log(e));
```
### uncontextmenu
鼠标右键位拾取到元素
```javascript
layer.on('uncontextmenu', (e) => console.log(e));
```
### unpick
所有鼠标事件未拾取到
```javascript
layer.on('unpick', (e) => console.log(e));
```
使用示例
```javascript
layer.on('click', (ev) => {}); // 鼠标左键点击图层事件
layer.on('mouseenter', (ev) => {}); // 鼠标进入图层要素
layer.on('mousemove', (ev) => {}); // 鼠标在图层上移动时触发
layer.on('mouseout', (ev) => {}); // 鼠标移出图层要素时触发
layer.on('mouseup', (ev) => {}); // 鼠标在图层上单击抬起时触发
@ -26,53 +127,4 @@ layer.on('unmouseup', (ev) => {}); // 图层外鼠标抬起
layer.on('unmousedown', (ev) => {}); // 图层外单击按下时触发
layer.on('uncontextmenu', (ev) => {}); // 图层外点击右键
layer.on('unpick', (ev) => {}); // 图层外的操作的所有事件
```
### click
点击事件
### mousemove
鼠标移动事件
### mouseout
鼠标移除
### mouseup
鼠标按下
### mousedown
鼠标向下
### contextmenu
鼠标右键
### unclick
点击未拾取到元素
### unmousemove
鼠标移动未拾取到元素
### unmouseup
鼠标抬起未拾取到元素
### unmousedown
鼠标按下未拾取到元素
### uncontextmenu
鼠标右键位拾取到元素
### unpick
所有鼠标事件未拾取到
```

View File

@ -1,44 +1,73 @@
### name
<description> _string_ **可选** _default:_ 自动数字编号</description>
设置图层名称,可根据 name 获取 layer;
## options 配置项
通过 options我们可以在初始化的时候指定图层状态
```javascript
const options = {
name: 'xxx',
zIndex: 1,
};
const layer = new Layer(options);
```
### name
<description> _string_ **optional** _default:_ 自动数字编号</description>
设置图层名称,可根据 name 获取 layer
```javascript
scene.getLayerByName(name);
```
### visible
<description> _bool_ **可选** _default:_ `true`</description>
<description> _bool_ **optional** _default:_ true</description>
图层是否可见
### zIndex
<description> _int_ **可选** _default:_ `0`</description>
<description> _int_ **optional** _default:_ 0</description>
图层绘制顺序,数值大绘制在上层,可以控制图层绘制的上下层级
### minZoom
<description> _number_ **可选** _default:_ `0`</description>
L7 采用队列渲染的机制,所有的图层在内部保存在一个数组中,每一帧的渲染会将图层数组按照 zIndex 的值进行排序,然后遍历数组,将符合条件的图层渲染到场景中
图层显示最小缩放等级0-18   {number}  Mapbox 0-24 高德 2-19
<img width="60%" style="display: block;margin: 0 auto;" alt="案例" src='https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*a5xKRZmhoogAAAAAAAAAAAAAARQnAQ'>
### minZoom
<description> _number_ **optional** _default:_ Mapbox 0-24 高德 2-19)</description>
图层显示最小缩放等级
### maxZoom
<description> _number_ **可选** _default:_ `22`</description>
图层显示最大缩放等级 0-18   {number}  Mapbox 0-24 高德 2-19
<description> _number_ **optional** _default:_ Mapbox 0-24 高德 2-19)</description>
图层显示最大缩放等级
### autoFit
<description> _bool_ **可选** _default:_ `false`</description>
layer 初始化完成之后,是否自动缩放到图层范围 {bool } default false
<description> _bool_ **optional** _default:_ false</description>
layer 初始化完成之后,地图是否自动缩放到图层范围
### pickingBuffer
<description> _number_ **可选** _default:_ `0`</description>
<description> _bool_ **optional** _default:_ 0</description>
图层拾取缓存机制,如 1px 宽度的线鼠标很难拾取(点击)到, 通过设置该参数可扩大拾取的范围 {number} default 0
图层拾取缓存机制,如 1px 宽度的线鼠标很难拾取(点击)到, 通过设置该参数可扩大拾取的范围(放大图层对象的尺寸)
### blend
<description> _string_ **可选** _default:_ `normal`</description>
<description> _string_ **optional** _default:_ 'normal'</description>
图层元素混合效果
- normal 正常效果 默认
- additive 叠加模式
- subtractive 相减模式
- max 最大值
- normal 正常效果 默认 发生遮挡的时候,只会显示前面的图层的颜色
- additive 叠加模式 发生遮挡的时候,显示前后图层颜色的叠加
- subtractive 相减模式 发生遮挡的时候,显示前后图层颜色的相减
- max 最大值 发生遮挡的时候,显示图层颜色 rgb 的最大值