function initTdt(){
    var token = 'e95115c454a663cd052d96019fd83840';
    // 服务域名
    var tdtUrl = 'https://t{s}.tianditu.gov.cn/';
    // 服务负载子域
    var subdomains=['0','1','2','3','4','5','6','7'];

    // cesium 初始化
    var viewer = new Cesium.Map('cesiumContainer', {
        animation: false,
        vrButton: false, // VR模式
        sceneModePicker: false,
        baseLayerPicker: false,
        shouldAnimate: true,
        selectionIndicator:true,
        infoBox:true,
        homeButton: true
    });

    // 叠加影像服务
    var imgMap = new Cesium.UrlTemplateImageryProvider({
        url: tdtUrl + 'DataServer?T=img_w&x={x}&y={y}&l={z}&tk=' + token,
        subdomains: subdomains,
        tilingScheme : new Cesium.WebMercatorTilingScheme(),
        maximumLevel : 18
    });
    viewer.imageryLayers.addImageryProvider(imgMap);

    // 叠加地形服务
    var terrainUrls = new Array();

    for (var i = 0; i < subdomains.length; i++){
        var url = tdtUrl.replace('{s}', subdomains[i]) + 'mapservice/swdx?tk=' + token;
        terrainUrls.push(url);
    }

    var provider = new Cesium.GeoTerrainProvider({
        urls: terrainUrls
    });

    viewer.terrainProvider = provider;

    // 叠加三维地名服务
    var wtfs = new Cesium.GeoWTFS({
        viewer,
        subdomains:subdomains,
        metadata:{
            boundBox: {
                minX: -180,
                minY: -90,
                maxX: 180,
                maxY: 90
            },
            minLevel: 1,
            maxLevel: 20
        },
        aotuCollide: true, //是否开启避让
        collisionPadding: [5, 10, 8, 5], //开启避让时，标注碰撞增加内边距，上、右、下、左
        serverFirstStyle: true, //服务端样式优先
        labelGraphics: {
            font:"28px sans-serif",
            fontSize: 28,
            fillColor:Cesium.Color.WHITE,
            scale: 0.5,
            outlineColor:Cesium.Color.BLACK,
            outlineWidth: 5,
            style:Cesium.LabelStyle.FILL_AND_OUTLINE,
            showBackground:false,
            backgroundColor:Cesium.Color.RED,
            backgroundPadding:new Cesium.Cartesian2(10, 10),
            horizontalOrigin:Cesium.HorizontalOrigin.MIDDLE,
            verticalOrigin:Cesium.VerticalOrigin.TOP,
            eyeOffset:Cesium.Cartesian3.ZERO,
            pixelOffset:new Cesium.Cartesian2(0, 8)
        },
        billboardGraphics: {
            horizontalOrigin:Cesium.HorizontalOrigin.CENTER,
            verticalOrigin:Cesium.VerticalOrigin.CENTER,
            eyeOffset:Cesium.Cartesian3.ZERO,
            pixelOffset:Cesium.Cartesian2.ZERO,
            alignedAxis:Cesium.Cartesian3.ZERO,
            color:Cesium.Color.WHITE,
            rotation:0,
            scale:1,
            width:18,
            height:18
        }
    });

    //三维地名服务，使用wtfs服务
    wtfs.getTileUrl = function(){
        return tdtUrl + 'mapservice/GetTiles?lxys={z},{x},{y}&tk='+ token;
    }
    wtfs.initTDT([{"x":6,"y":1,"level":2,"boundBox":{"minX":90,"minY":0,"maxX":135,"maxY":45}},{"x":7,"y":1,"level":2,"boundBox":{"minX":135,"minY":0,"maxX":180,"maxY":45}},{"x":6,"y":0,"level":2,"boundBox":{"minX":90,"minY":45,"maxX":135,"maxY":90}},{"x":7,"y":0,"level":2,"boundBox":{"minX":135,"minY":45,"maxX":180,"maxY":90}},{"x":5,"y":1,"level":2,"boundBox":{"minX":45,"minY":0,"maxX":90,"maxY":45}},{"x":4,"y":1,"level":2,"boundBox":{"minX":0,"minY":0,"maxX":45,"maxY":45}},{"x":5,"y":0,"level":2,"boundBox":{"minX":45,"minY":45,"maxX":90,"maxY":90}},{"x":4,"y":0,"level":2,"boundBox":{"minX":0,"minY":45,"maxX":45,"maxY":90}},{"x":6,"y":2,"level":2,"boundBox":{"minX":90,"minY":-45,"maxX":135,"maxY":0}},{"x":6,"y":3,"level":2,"boundBox":{"minX":90,"minY":-90,"maxX":135,"maxY":-45}},{"x":7,"y":2,"level":2,"boundBox":{"minX":135,"minY":-45,"maxX":180,"maxY":0}},{"x":5,"y":2,"level":2,"boundBox":{"minX":45,"minY":-45,"maxX":90,"maxY":0}},{"x":4,"y":2,"level":2,"boundBox":{"minX":0,"minY":-45,"maxX":45,"maxY":0}},{"x":3,"y":1,"level":2,"boundBox":{"minX":-45,"minY":0,"maxX":0,"maxY":45}},{"x":3,"y":0,"level":2,"boundBox":{"minX":-45,"minY":45,"maxX":0,"maxY":90}},{"x":2,"y":0,"level":2,"boundBox":{"minX":-90,"minY":45,"maxX":-45,"maxY":90}},{"x":0,"y":1,"level":2,"boundBox":{"minX":-180,"minY":0,"maxX":-135,"maxY":45}},{"x":1,"y":0,"level":2,"boundBox":{"minX":-135,"minY":45,"maxX":-90,"maxY":90}},{"x":0,"y":0,"level":2,"boundBox":{"minX":-180,"minY":45,"maxX":-135,"maxY":90}}]);
    return viewer;
}

function initCityLand(viewer, geoserver){
// 叠加广东地块服务
    var gridsetName = 'EPSG:3857';
    var gridNames = [];
    for(let i=0;i<=30;i++){
        gridNames.push(i)
    }
    var iboMap = new Cesium.WebMapTileServiceImageryProvider({
        url : geoserver+'/gwc/service/wmts/rest/wuhan:gdcityland30/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png',
        layer:'wuhan:gdcityland30',
        format: "image/png",
        style:'',
        maximumLevel: gridNames.length,
        tileMatrixSetID:gridsetName,
        tileMatrixLabels:gridNames,
        tilingScheme:new Cesium.WebMercatorTilingScheme()
    });
    // viewer.imageryLayers.addImageryProvider(iboMap);
}

function createCanvas(content, id, color){
    var conLen = content.length;
    var div = document.getElementById('tagDiv');
    var canvas = document.createElement('canvas');
    canvas.id = id;
    canvas.className="modelTag";
    div.appendChild(canvas);
    let width = 130
    let height = 34
    let h2 = (height - 4) / 2

    canvas.width = width; //
    canvas.height = height + 5;
    var c = document.getElementById(id);
    var cxt = c.getContext("2d");
    cxt.strokeStyle = color;
    cxt.lineWidth = cxt.lineWidth+1
    cxt.beginPath();
    cxt.moveTo(h2 + 5, 2);
    cxt.arc(h2 + 5, h2 + 2, h2, -Math.PI / 2, Math.PI / 2, true);

    cxt.lineTo(width / 2 - 5, height - 2);
    cxt.lineTo(width / 2, height - 2 + 5);
    cxt.lineTo(width / 2 + 5, height - 2);

    cxt.lineTo(width - 5 - h2 + 2, height - 2);

    cxt.arc(width - 5 - h2, h2 + 2, h2, Math.PI / 2, -Math.PI / 2, true);
    cxt.lineTo(h2 + 5, 2);
    cxt.stroke();
    cxt.font="14px Arial";
    cxt.fillStyle=color;
    let textCenter = (14 * conLen) / 2
    cxt.fillText(content, width / 2 - textCenter, (height / 2) + (14 / 2));
    return canvas;
}


function initXzqh(viewer, geoserver){
    var silhouetteBlue = Cesium.PostProcessStageLibrary.createEdgeDetectionStage();
    silhouetteBlue.uniforms.color = Cesium.Color.BLUE;
    silhouetteBlue.uniforms.length = 2;
    silhouetteBlue.selected = [];

    var silhouetteGreen = Cesium.PostProcessStageLibrary.createEdgeDetectionStage();
    silhouetteGreen.uniforms.color = Cesium.Color.LIME;
    silhouetteGreen.uniforms.length = 2;
    silhouetteGreen.selected = [];
    viewer.scene.postProcessStages.add(Cesium.PostProcessStageLibrary.createSilhouetteStage([silhouetteBlue, silhouetteGreen]));
    let flag = false

    let tool = layui.tool
    let geoJsonUrl = geoserver + "/wuhan/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wuhan:qy-z&maxFeatures=1000&outputFormat=application/json"
    geoJsonUrl += "&Filter=(<Filter><ogc:PropertyIsLike wildCard='*' singleChar='.' escape='!' xmlns:ogc='http://www.opengis.net/ogc' >" +
        "<ogc:PropertyName>pac</ogc:PropertyName><ogc:Literal>441821*</ogc:Literal></ogc:PropertyIsLike></Filter>)"
    console.log(geoJsonUrl)
    tool.get(geoJsonUrl, function(data){
        let res = Cesium.GeoJsonDataSource.load(data,{
            stroke: Cesium.Color.fromAlpha(Cesium.Color.WHITE, 1),
            fill: Cesium.Color.fromAlpha(Cesium.Color.WHITE, 0.01),
            strokeWidth: 1,
            markerSymbol: '?'
        })
        const promise = viewer.dataSources.add(res)
        viewer.dataSources.add(promise);   // 加载这个geojson资源
        promise.then((datasource) => {
            const entities = datasource.entities.values;
            for (let index = 0; index < entities.length; index++) {
                const entity = entities[index];
                entity.polygon.heightReference = Cesium.HeightReference.RELATIVE_TO_GROUND;  // 贴地
                entity.polygon.height = 0;  // 距地高度0米
                entity.polygon.extrudedHeightReference =Cesium.HeightReference.RELATIVE_TO_GROUND; //拉伸
                // entity.polygon.extrudedHeight = 800; // 拉伸高度
                let now = Cesium.JulianDate.now()
                let name = entity.properties.name.getValue(now)
                let id = entity.properties.objectid.getValue(now)
                let polyPositions = entity.polygon.hierarchy.getValue(now).positions;
                let polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center;//中心点
                viewer.entities.add({
                    position:polyCenter,
                    billboard:{
                        image: createCanvas(name,"tag_"+id,"WHITE"),
                        width: 130, // default: undefined
                        height: 34, // default: undefined
                    }
                });
            }
            viewer.flyTo(datasource)
        });

        viewer.screenSpaceEventHandler.setInputAction(function(movement) {
            let pickedFeature = viewer.scene.pick(movement.endPosition);
            if(Cesium.defined(pickedFeature)) {
                pickedFeature = pickedFeature.id;
                if (silhouetteBlue.selected[0] && silhouetteBlue.selected[0]._id === pickedFeature._id) {
                    return;
                } else {
                    silhouetteBlue.selected = [pickedFeature];
                }
            }
        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);



    })
}