现在的位置: 首页 > 综合 > 正文

国家天地图API 绘制多边形 覆盖物

2018年02月18日 ⁄ 综合 ⁄ 共 5308字 ⁄ 字号 评论关闭

先上效果图

html代码:

<body onload="onLoad()">
    <div style="position: absolute; float: left; margin-left: 23%; margin-top: 1%; z-index: 500;">
        <input type="button" onclick="vector()" value="矢 量" />
        <input type="button" onclick="satellite()" value="影 像" />
        <input type="button" onclick="hybrid()" value="混 合" />
    </div>
    <div id="map" ondblclick="ShowInfoWindow()" style="border: 1px solid black; position: absolute;
        width: 81%; height: 95%; margin-left: 19%;">
    </div>
    <span id="info" style="position: absolute; float: left; border: 2px solid black;
        width: 18%;"></span>
    <div id="div" style="position: absolute; border: 2px solid black; height: 95%; width: 18%;">
        <br />
        <p>
            <label id="lab">
            </label>
            <br />
            <span id="info2" style="position: relative;"></span>
        </p>
    </div>
</body>

javascript代码:

<script src="JScript/jquery1.7.2.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="http://api.tianditu.com/js/maps.js"></script>
    <script type="text/javascript">
        var map, zoom = 18, mapdraw, mapclick;
        var polygonTool;
        var count = 0, geometry = 0;
        var polygonPoints = [];
        var polygon;
        var bool = 0;
        var drag = false;
        var infoWin;
        function onLoad() {
            $(function () {
                document.onkeydown = killesc;
            })


            function killesc() {
                polygonTool.open();
                $("#info2").text("");
                $("#lab").text("");
                polygonPoints = [];
                drag = false;
            }


            map = new TMap("map");
            map.centerAndZoom(new TLngLat(104.06321, 30.65983), zoom);
            map.enableHandleMouseScroll();
            TEvent.addListener(map, "mousemove", function (p) {
                debugger;
                var lnglat = map.fromContainerPixelToLngLat(p);
                $("#info").text("当前鼠标坐标:" + lnglat.getLng() + " , " + lnglat.getLat());


                //当鼠标移动到上下左右 边缘时  地图自动拖动  
                if (drag == true) {
                    var bs = map.getBounds();   	//获取可视区域 
                    var bssw = bs.getSouthWest();   //可视区域左下角 
                    var bsne = bs.getNorthEast();   //可视区域右上角 
                    var distancelat = bsne.getLat() - bssw.getLat();
                    var distancelng = bsne.getLng() - bssw.getLng();
                    if (lnglat.getLat() > (bsne.getLat() - distancelat / 25)) {
                        map.panBy(new TSize(0, -100));
                    }
                    if (lnglat.getLat() < (bssw.getLat() + distancelat / 25)) {
                        map.panBy(new TSize(0, 100));
                    }
                    if (lnglat.getLng() > (bsne.getLng() - distancelng / 30)) {
                        map.panBy(new TSize(100, 0));
                    }
                    if (lnglat.getLng() < (bssw.getLng() + distancelng / 30)) {
                        map.panBy(new TSize(-100, 0));
                    }
                }
            });


            var config = {
                strokeColor: "blue", //折线颜色 
                fillColor: "#FFFFFF", //填充颜色。当参数为空时,折线覆盖物将没有填充效果 
                strokeWeight: "3px", //折线的宽度,以像素为单位 
                strokeOpacity: 0.5, //折线的透明度,取值范围0 - 1 
                fillOpacity: 0.5			//填充的透明度,取值范围0 - 1 
            };


            polygonTool = new TPolygonTool(map, config);
            polygonTool.open();
            polygonTool.setTips("双击结束,右键移动");
            polygonTool.showLabel = false;
            mapdraw = TEvent.addListener(polygonTool, "draw", onDrawPolygon);


            function onDrawPolygon(bounds, line) {
                polygon = new TPolygon(bounds, { strokeColor: "blue", strokeWeight: 3, strokeOpacity: 0.5, fillOpacity: 0.5 });
                map.addOverLay(polygon);
                TEvent.addListener(polygon, "click", onClickPolygon);
                polygonTool.close();
            }


            //单机多边形,显示自定义的信息窗口  
            function onClickPolygon() {
                map.addOverLay(infoWin);
            }

	//用mouseup 不用click是因为在拖动的时候也会添加点,所有用mouseup可以确定拖动后鼠标添加点的位置
            mapclick = TEvent.addListener(map, "mouseup", function (p) {
                //将像素坐标转换成经纬度坐标
                if (event.button == 2) {
                    return;
                }
                if (bool == 1) {
                    return;
                }
                drag = true;
                var lnglat = map.fromContainerPixelToLngLat(p);
                var lng = lnglat.getLng();
                var lat = lnglat.getLat();
                if (count != geometry) {
                    geometry = count;
                    $("#info2").text("");
                    polygonPoints = [];
                }
                polygonPoints.push(new TLngLat(lng, lat));
                var val = $("#info2").text();
                $("#info2").text(val + "\n" + lng + "," + lat);
                $("#lab").text("共" + polygonPoints.length + "点");
            });
        }


        //删除多边形,和左边的text  
        function ClearOverLay() {
            map.clearOverLays();
            polygonTool.open();
            $("#info2").text("");
            $("#lab").text("");
            bool = 0;
            polygonPoints = [];
        }


        //显示信息窗口  
        function ShowInfoWindow() {
            var area = map.getArea(polygonPoints) / 100;
            var html = [];
            html.push('<div id="div" style=" height:40px; width:130px;">');
            html.push('<table style=" width:100%;height:100%;">');
            html.push('<tbody>');
            html.push('<tr><td style=" font-size:14px; font-weight:bold;"><center>面积:</center></td><td style=" font-size:14px;">' + area + ' 亩</td></tr>');
            html.push('<tr><td colspan=2><a href="#" style=" margin-top:8px; font-size:12px; float:right;" onclick="ClearOverLay()">删除</a></td></tr>');
            html.push('</tbody>');
            html.push('</table>');
            html.push('</div>');


            var lnglat = polygonPoints[polygonPoints.length - 1];
            infoWin = new TInfoWindow(lnglat, new TPixel([0, -34]));
            infoWin.setLabel(html.join(' '));
            map.addOverLay(infoWin);


            //防止InfoWindow被卡住  
            var top = $("#div").offset().top;
            if (top < 0) {
                map.panBy(new TSize(0, -50 + top));
            }
            bool = 1;
            drag = false;
        }


        //下面三个方法是切换底图模式  
        function satellite() {
            map.setMapType(TMAP_SATELLITE_MAP);
        }
        function vector() {
            map.setMapType(TMAP_NORMAL_MAP);
        }
        function hybrid() {
            map.setMapType(TMAP_HYBRID_MAP);
        }
    </script>

抱歉!评论已关闭.