坐标数据格式
什么是垂直高度和海拔
- 垂直高度指的自身的高度,比如高度为100米的一个建筑物, 图形的自身高度一般携带在图形的
properties
属性里,其不属于坐标的属性,属于图形的业务信息 - 海拔指的图形数据相对于海平面的高度,属于坐标的属性
- 在珠峰上建一个100M的房子,那么房子其海拔就是8849米,自身垂直高度就是100米
js
const point = new matapllks.Marker([x, y, 8849], {
properties: {
height: 100,
},
});
- 所有要注意海拔和垂直高度的区别
- 当然像点和线这些图形其是没有垂直高度,但是可以有海拔的
关于图形里的坐标数据格式
图形的一个坐标点(coordinate)数据支持[x,y,z]格式:
- x 经度
- y 纬度
- z 海拔,可省略,表示海拔为0
一般是线或者点的数据携带海拔高度数据,他们渲染的效果如下图:
点的数据格式
json
[120.60906706192384, 31.14629078302883, 0]
线的数据格式
json
[
[120.60649214126954, 31.16318465203338, 0],
[120.6315547023047, 31.15892474293159, 0],
[120.64408598282228, 31.17258515297388, 0],
[120.64425764419923, 31.172732028398713, 0]
]
面的数据格式
json
[
[
[120.62177000381837, 31.172878903595887],
[120.6154185328711, 31.167297485983823],
[120.61730680801759, 31.15554605815666],
[120.6205683741797, 31.148641414701814],
[120.63069639541993, 31.142617804361606],
[120.64202604629884, 31.145556198678406],
[120.65438566543946, 31.1646535417984],
[120.62177000381837, 31.172878903595887]
],
//内环洞
[
[120.6283637225373, 31.164847260634332],
[120.6356688979181, 31.164384229389412],
[120.63539833586697, 31.156512351996554],
[120.62560398961568, 31.161374471136725],
[120.6283637225373, 31.164847260634332]
]
]
关于海拔数据的兼容性问题
早期核心库里图形的海拔数据是携带在properties
上的,
js
// line with seperate alitutdes
var line2 = new maptalks.LineString(
[
[-0.131049, 51.498568],
[-0.107049, 51.498568],
[-0.093049, 51.498568],
],
{
properties: {
altitude: [400, 600, 1200], //seperate altitude for each vertex
},
symbol: {
lineColor: "rgb(135,196,240)",
lineWidth: 3,
textName: "{altitude}",
textPlacement: "vertex",
},
},
);
但是在webgl生态包图形的海拔值是携带在图形的 坐标coordinates
上的,后来核心库里为了和webgl包保持一致性也做了这个支持
js
// line with seperate alitutdes
var line2 = new maptalks.LineString(
[
[-0.131049, 51.498568, 400],
[-0.107049, 51.498568, 600],
[-0.093049, 51.498568, 1200],
],
{
properties: {},
symbol: {
lineColor: "rgb(135,196,240)",
lineWidth: 3,
textName: "{altitude}",
textPlacement: "vertex",
},
},
);
- 早期的把海拔值放到
properties
属于设计失误,但是任然被兼容 - 推荐把海拔值放到坐标
coordinates
里 - 如果
properties
和coordinates
都携带海拔值,properties
的优先级更高
maptalks生态体系内图层对高度和海拔的支持情况
maptalks里图形管理类图层都支持海拔数据(z)的渲染,包括:
名字 |
---|
VectorLayer |
PointLayer |
LineStringLayer |
PolygonLayer |
GLTFLayer |
ExtrudePolygonLayer |
ThreeLayer |
支持图形垂直高度(height)的图层有:
名字 |
---|
GLTFLayer |
ExtrudePolygonLayer |
ThreeLayer |