1. 程式人生 > >基於cesuim框架開發接入線上天地圖服務(特別全的)

基於cesuim框架開發接入線上天地圖服務(特別全的)

1、首先理解線上天地圖服務的兩種座標系;
(1)經緯度座標;
(2)墨卡託投影座標;

2、其實經緯度座標與墨卡託投影座標的差別,你只需記住經緯度座標是球面座標,墨卡託投影座標是平面座標;

3、還需要注意:Cesium大多是預設Provider是按照墨卡託投影的,所以你要用經緯度的天地圖服務需要進行一定的配置;

4、cesuim中新增經緯度座標下的天地圖服務:
(1)需要在建立Provider時需要同時構建tilingScheme,指定其為經緯度座標系;
(2)需要配置tileMatrixLabels,因為level是從1開始(而不是0),所以需要指定每一層級的索引號(由於天地圖最大層級為18級,所以在配置tileMatrixLabels的時候,配滿18級即可)。

5、 建立天地圖不麻煩,但如何更好的建立呢?
(1)輪詢機制,我們知道天地圖提供了’t0’,‘t1’,‘t2’,‘t3’,‘t4’,‘t5’,‘t6’,'t7’8個域名,服務端TCP最大連結數是有限制的,輪詢機制下瓦片下載的速度更有保證;
(2)利用Cesium提供了subdomains的屬性,把url按照format的方式來指定引數 ,配置一下天地圖的URL就可以實現了;

6、輪詢機制配置的天地圖URL,參照以下程式碼,親測有效:

var URL_CONFIG={
    TDT_IMG_W:"http://{s}.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles"   //線上天地圖影像服務地址(墨卡託投影)
    ,TDT_VEC_W:"http://{s}.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles"   //線上天地圖向量地圖服務(墨卡託投影)
    ,TDT_CIA_W:"http://{s}.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default.jpg"            //線上天地圖影像中文標記服務(墨卡託投影)
    ,TDT_CVA_W:"http://{s}.tianditu.com/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default.jpg"            //線上天地圖向量中文標記服務(墨卡託投影)
    ,TDT_IMG_C:"http://{s}.tianditu.com/img_c/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles"  //線上天地圖影像服務地址(經緯度)
    ,TDT_VEC_C:"http://{s}.tianditu.com/vec_c/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=vec&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles"   //線上天地圖向量地圖服務(經緯度)
    ,TDT_CIA_C:"http://{s}.tianditu.com/cia_c/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles"      //線上天地圖影像中文標記服務(經緯度)
    ,TDT_CVA_C:"http://{s}.tianditu.com/cva_c/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=cva&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles"       //線上天地圖向量中文標記服務(經緯度)
};

7、cesuim天地圖服務接入程式碼:

var viewerObj = new Cesium.Viewer('cesiumContainer',  {
                selectionIndicator: false,
                animation: false,  //是否顯示動畫控制元件
                baseLayerPicker: false, //是否顯示圖層選擇控制元件
                geocoder: false, //是否顯示地名查詢控制元件
                timeline: false, //是否顯示時間線控制元件
                sceneModePicker: true, //是否顯示投影方式控制元件
                navigationHelpButton: false, //是否顯示幫助資訊控制元件
                infoBox: false,  //是否顯示點選要素之後顯示的資訊
                fullscreenButton:true,
                //天地圖影像服務(經緯度)
                imageryProvider:new Cesium.WebMapTileServiceImageryProvider({
                    url: URL_CONFIG.TDT_IMG_C,
                    layer: "tdtImg_c",
                    style: "default",
                    format: "tiles",
                    tileMatrixSetID: "c",
                    subdomains:["t0","t1","t2","t3","t4","t5","t6","t7"],
                    tilingScheme:new Cesium.GeographicTilingScheme(),
                   tileMatrixLabels:["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],
                    maximumLevel:18,
                    show: false
                })
            });
            //設定初始位置
            viewerObj.camera.setView( {
                destination: Cesium.Cartesian3.fromDegrees(118.63854163, 32.04047801, 1000)
            } );
            //呼叫設定天地圖函式
            //setOnlineMap.setTdt();
        });

8、cesuim疊加多圖層程式碼:

//天地圖影像中文標記服務(經緯度)
    var tdtCva=new Cesium.WebMapTileServiceImageryProvider({
        url: URL_CONFIG.TDT_CIA_C,
        layer: "tdtCva",
        style: "default",
        format:  "tiles",
        tileMatrixSetID: "c",
        subdomains:["t0","t1","t2","t3","t4","t5","t6","t7"],
        tilingScheme:new Cesium.GeographicTilingScheme(),
       	tileMatrixLabels:["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],
      	maximumLevel:18,
        show: false
    });
    var layers = viewerObj.imageryLayers;
    layers.addImageryProvider(tdtCva);

好的整理完成。