【天地图】使用天地图api绘制GeoJson数据

55 篇文章 4 订阅
23 篇文章 0 订阅
该博客介绍了如何在天地图上通过JavaScript实现GeoJson数据的加载和绘制,包括解析GeoJson文件获取坐标数据,创建多边形以及实现立体阴影效果。主要涉及的技术包括Ajax请求、地图初始化、GeoJson解析和多边形绘制。通过创建两个多边形,一个用于正常绘制,另一个作为背景偏移蒙版,从而达到立体效果。
摘要由CSDN通过智能技术生成

天地图没有直接提供加载GeoJson数据或者文件的api,但是我们可以借助绘制多边形的方式实现

1 实现效果

绘制如下的矢量多边形效果;

 2 实现技术

(1) 首先用ajax请求geojson文件,从文件解析并获取到坐标数据

下面这个方法就是解析geojson返回的featurecollection中的坐标方式;其中可能有多段线稍微处理一下即可


/**
 * 从featureCollection获取所有linestring
 * @param {*} featureCollection 
 * @returns  返回线段数组
 */
function  getLinesFromGeojson(featureCollection){
    let lines=[];
    let geometries=featureCollection.geometries
    for(let i=0;i<geometries.length;i++){
        let geometry=geometries[i]
        let type=geometry.type;
        if(type==="LineString"){
            let line=geometry.coordinates
            lines.push(line)
        }
        if(type==="MultiLineString"){
            let subLines=geometry.coordinates
           lines=lines.concat(subLines) 
        }
    }
    return lines
}
                                    

(2) 创建两个多边形,一个正常绘制;另一个背景偏移蒙版;可以表现出一定的立体效果;效果可以自己调样式 

/**
 * 创建polygon
 * @param {*} points 多边形坐标 二维数组
 * @param {*} option 
 * @returns  返回polygon
 */
function createPolygon(coors,option){
    let points=[];
    coors.forEach((lonlat)=>{
        points.push(new T.LngLat(lonlat[0], lonlat[1]));
    })
    return new T.Polygon(points,{
        color: option.lineColor||"#47D4DE", 
        weight:  option.lineWidth||1, 
        opacity:  option.lineOpacity||1, 
        fillColor: option.fillColor||"black", 
        fillOpacity: option.fillOpacity||1
    });
}

 3 主要代码

代码是vue工程编写;可根据情况适当更改

// 初始化地图
    initMap(){
        var zoom = 8;
        var imageURL = "http://t0.tianditu.gov.cn/img_w/wmts?" +"SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +"&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=你自己的key";
        this.map = new T.Map("mapContainer", {
            layers: [this.createBaseLayer(imageURL)],
            minZoom: 5, maxZoom: 18
        });

        window.map=this.map;
        this.map.centerAndZoom(new T.LngLat(116.40969, 39.89945), zoom);
        this.map.enableScrollWheelZoom();
    },
    // 创建底图
    createBaseLayer(url){
        let layer = new T.TileLayer(url, {minZoom: 1, maxZoom: 18});
        return layer
    },
    // 异步加载Geojson数据
    async initPolygon(geojsonUrl,styleOption){
        let res= await axios.get(geojsonUrl);
        let featureCollection=res.data;
        let lines=tdtUtil.getLinesFromGeojson(featureCollection)
        lines.forEach((coors)=>{
            let polygon=tdtUtil.createPolygon(coors,styleOption);
            this.map.addOverLay(polygon);
        })   
    }

 初始调用

mounted(){
    // 初始化地图
    this.initMap();
    // 初始化区边界
    this.initPolygon("./static/district_county_bound.json",
    {
        fillOpacity:0.001
    });
    // 初始化市边界
    this.initPolygon("./static/district_city_bound.json",
    {
        lineWidth:3,
        fillOpacity:0.001
    });
    // 市背景蒙版
    this.initOffsetPolygon("./static/district_city_bound.json",
    {
        lineWidth:0.6,
        fillOpacity:0.5,
    });
  }

全部代码见【天地图:立体阴影地图效果】使用天地图api绘制GeoJson数据tdUtil见

【天地图api工具类】api方法封装

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨大大28

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值