GeoJson和TopoJson数据格式的对比

作者: 宥_Hugh | 来源:发表于2018-04-25 08:42 被阅读44次

    GeoJson格式数据:

    //这是一个简单的矩形(坐标系:WGS_84)
    {
        "type":"FeatureCollection", 
        "features": [
            {
            "type":"Feature",
            "geometry":{
                "type":"Polygon",
                "coordinates":
                [
                    [[117.42218831167838,31.68971206252246],
                    [118.8025942451759,31.685801564127132],
                    [118.79961418869482,30.633841626314336],
                    [117.41920825519742,30.637752124709664],
                    [117.42218831167838,31.68971206252246]]
                ]
            },
            "properties":{"Id":0}
            }
        ]
    }
    

    TopoJson格式数据:

    //这是一个简单的矩形(坐标系:WGS_84)
    {
    "type":"Topology","arcs":
        [
            [[0,100],[100,0],[0,-100],[-100,0],[0,100]]
        ],
        "transform":
        {
        "scale":
            [0.013833859899784785,0.010558704362081244],
            "translate":
            [117.41920825519742,30.633841626314336]
        },
        "objects":
        {
        "polygon":
            {
            "type":"GeometryCollection",
            "geometries":
                [
                    {
                    "arcs":[[0]],
                    "type":"Polygon",
                    "properties":{"Id":0}
                    }
                ]
            }
        }
    }
    

    两个JSON数据展示是同一个矩形面,对比一下差异:
    GeoJson:
    (1)GeoJson 是用于描述地理空间信息的数据格式。GeoJSON 不是一种新的格式,其语法规范是符合 JSON 格式的,只不过对其名称进行了规范,专门用于表示地理信息。
    (2)GeoJson 的最外层是一个单独的对象(object)。这个对象有:

    • 几何体(Geometry)
    • 特征(Feature)
    • 特征集合(FeatureCollection)
      每一个对象都有一个成员变量 coordinates。
      (3)type 的值为 GeometryCollection,那么该对象一定要有变量 geometries。
    {
        "type": "GeometryCollection",
        "geometries": [
            {
                "type": "Point",
                "coordinates": [116.3232, 35.2154]
            },
            {
                "type": "LineString",
                "coordinates": [ [116.3232, 35.2154], [116.854,35.8854] ]
            }
        ]
    }
    

    type 的值为 Feature,那么此特征对象必须包含有变量 geometry,表示几何体,geometry 的值必须是几何体对象。此特征对象还包含有一个 properties,表示特性,properties 的值可以是任意 JSON 对象或 null。

    {
        "type": "Feature",
        "properties": {
            "name": "合肥"
        },
        "geometry": {
            "type": "Point",
            "coordinates": [ 116.3751, 31.5631]
        }
    }
    

    如果 type 的值为 FeatureCollection(特征集合),则该对象必须有一个名称为 features 的成员。features 的值是一个数组,数组的每一项都是一个特征对象。

    TopoJson:
    TopoJSON 是 GeoJSON 按拓扑学编码后的扩展形式,是由 D3 的作者 Mike Bostock 制定的。相比 GeoJSON 直接使用 Polygon、Point 之类的几何体来表示图形的方法,TopoJSON 中的每一个几何体都是通过将共享边(被称为arcs)整合后组成的。
    TopoJSON 消除了冗余,文件大小缩小了 80%,因为:边界线只记录一次(国境线为例)。地理坐标使用整数,不使用浮点数。

    推荐网站:
    在线生成 GeoJSON:http://geojson.io/
    GeoJSON 和 TopoJSON简化、转换:http://mapshaper.org/
    GeoServer装载插件可以生成GeoJson和TopoJson

    现在大多数地图API支持GeoJson和TopoJson格式数据地图的调用(Openlayers、Leaflet等),这些Json文件只记录空间要素的几何属性,数据在前端渲染进行展示。

    Cesium加载GeoJson数据效果
    //贴出部分代码
        var promise = Cesium.GeoJsonDataSource.load('date/wuhu.json');
        promise.then(function(dataSource) {
            viewer.dataSources.add(dataSource);
            var entities = dataSource.entities.values;
            var colorHash = {};
            for (var i = 0; i < entities.length; i++) {
                var entity = entities[i];
                var name = entity.name;
                var color = colorHash[name];
                if (!color) {
                    color = Cesium.Color.fromRandom({
                        alpha : 1.0
                    });
                    colorHash[name] = color;
                }
                entity.polygon.material = color;
                entity.polygon.outline = false;
                entity.polygon.extrudedHeight =5000.0;
            }
        });
        viewer.flyTo(promise);
    

    相关文章

      网友评论

        本文标题:GeoJson和TopoJson数据格式的对比

        本文链接:https://www.haomeiwen.com/subject/sshelftx.html