Skip to content
目录

坐标数据格式

什么是垂直高度和海拔

  • 垂直高度指的自身的高度,比如高度为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
  • 如果propertiescoordinates都携带海拔值,properties的优先级更高

maptalks生态体系内图层对高度和海拔的支持情况

maptalks里图形管理类图层都支持海拔数据(z)的渲染,包括:

名字
VectorLayer
PointLayer
LineStringLayer
PolygonLayer
GLTFLayer
ExtrudePolygonLayer
ThreeLayer

支持图形垂直高度(height)的图层有:

名字
GLTFLayer
ExtrudePolygonLayer
ThreeLayer

This document is generated by mdpress