Cesium学习(二)shp格式转为json格式并叠加到底图上使用

3 篇文章 0 订阅
1 篇文章 0 订阅

上一章提到Cesium添加json格式数据的三种方式,在部分主要讲shp转换为json格式的工具和应用案列。

案例中用到的中国省界地图的shp格式数据可在此处下载:http://download.csdn.net/download/baidu_34304646/9991998

一、shp转换成json格式

此处整理了两种shp转为json格式的方式:一是使用工具;二是使用ArcGIS进行转换。

在转换之前先做一些准备工作:

第一步:使用ArcGIS将shp文件的地理坐标设置为WGS_198484并导出为shp数据。

    1、打开ArcGIS的Toolbox工具箱,选择“定义投影”:

 

    2、选择要转换的shp格式文件并选择地理坐标为 WGS_1984,单击确认。

 

    3、将数据导出。

 

开始转换:

    方法一:

第一步:打开网站http://www.mapshaper.org/

第二步:点击select按钮,选择目标shp图层

 

第三步:确认,inport导入:

 

第四步:点击右上角的export,选择GeoJson ,输入encoding=utf8,点击export,方法一转换完成:

 

  

    方法二:

第一步:打开ArcGIS的Toolbox工具,选择转换工具中的要素转JSON,并选择前面设置过地理坐标的shp文件:

 


    至此,已使用两种方式将shp格式数据转换为json格式数据。

二、Cesium添加geoJson数据(以中国省界数据为例)

第一步:添加Cesium的底图数据并在图层上叠加各国夜晚灯光亮度图:

var viewer = new Cesium.Viewer('cesiumContainer', {
        imageryProvider:newCesium.ArcGisMapServerImageryProvider({
            url:'https://server.arcgisonline.com/arcgis/rest/services/World_Terrain_Base/MapServer'
        }),
        baseLayerPicker:true//地图切换控件(底图以及地形图)是否显示,默认显示true
    });


    var layers = viewer.imageryLayers;
    //添加各国夜晚灯光亮度图
    var blackMarble =layers.addImageryProvider(Cesium.createTileMapServiceImageryProvider({
        url: 'https://cesiumjs.org/blackmarble',
        credit: 'Black Marble imagery courtesy NASA EarthObservatory',
        flipXY: true // Only old gdal2tile.py generatedtilesets need this flag.
    }));


    blackMarble.alpha = 0.5;    //透明度
    blackMarble.brightness = 1.5;   //亮度


第二步:使用前一篇文章中提到的Cesium添加GEOjson数据的方式,将前面转换得到的json格式中国省界数据叠加到Cesium的底图上。


 //添加geojson格式地理数据(由shp格式文件转换得来)

    Cesium.Math.setRandomNumberSeed(0);

    var promise =Cesium.GeoJsonDataSource.load('Output_bou2_4p.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);



第三步:运行得到效果图:

延伸:如果shp格式文件中有包含各个面的面积或者周长的话,通过一下代码使得加载出来的json数据呈立体形状(因为此处省界数据)中没有各省的面积和周长的完整数据,就不再演示:

entity.polygon.extrudedHeight= entity.properties.Shape_Area / 100000.0;


                              

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值