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

已被阅读 2525 次 | 文章分类:gis随笔 | 2022-03-07 00:16

将常用的一些api方法进行了封装,比如创建多边形,解析geojson、创建点等方法,会不断增加

1 tdt_utils.js

                                        
// 天地图api方法封装
// 工具类

/**
 * 创建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
    });
}
/**
 * 从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
}
/**
 * 创建marker;默认或者自定义图片的marker
 * @param {*} coors 
 * @param {*} icon 
 * @returns 返回marker
 */
function createMarker(coors,icon){
    let marker= new T.Marker(new T.LngLat(coors[0],coors[1]));
    if(icon){
        //创建icon对象
        var icon = new T.Icon({
            iconUrl: icon.url,
            iconSize: new T.Point(icon.width, icon.height),
            iconAnchor: new T.Point(10, 25)
        });
        marker.setIcon(icon)
    }
    return marker
    
}
/**
 * 创建自定义覆盖物
 * @param {*} domId domid
 * @returns 返回覆盖物对象
 */
function createCustomOverlay(domId){
    var DefinedOverlay = T.Overlay.extend({
        initialize: function (lnglat,options) {
            this.lnglat = lnglat;
            this.setOptions(options);
        },
        onAdd: function (map) {
            this.map = map;
            this._div = document.getElementById(domId);
            map.getPanes().overlayPane.appendChild(this._div);
            this.update(this.lnglat);
        },
        onRemove: function () {
            var parent = this.div.parentNode;
            if (parent) {
                parent.removeChild(this.div);
                this.map = null;
                this.div = null;
            }
        },
        setLnglat: function (lnglat) {
            this.lnglat = lnglat;
            this.update();
        },
        getLnglat: function () {
            return this.lnglat;
        },
        setPos: function (pos) {
            this.lnglat = this.map.layerPointToLngLat(pos);
            this.update();
        },
        /**
         * 更新位置
         */
        update: function () {
            var pos = this.map.lngLatToLayerPoint(this.lnglat);
            this._div.style.top = ( pos.y -255) + "px";
            this._div.style.left = (pos.x - 135) + "px";
        }
    })
    return DefinedOverlay
}
export default{
    createPolygon:createPolygon,
    getLinesFromGeojson:getLinesFromGeojson,
    createMarker:createMarker,
    createCustomOverlay:createCustomOverlay
}

                                        
                                    

QQ:3410192267 | 技术支持 微信:popstarqqsmall

Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号