天地图坐标拾取

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <meta name="keywords" content="天地图"/>
    <title>天地图-地图API-范例-根据关键字本地搜索</title>
    <style type="text/css">
        .search {
            font-size: 13px;
            border: 1px solid #999999;
			background: #5677fc;
			color: #fff;
			border: none;
			margin-left: -6px;
			padding: 8px 15px;
			border-radius: 0px 4px 4px 0px;
        }

        .ls {
            line-height: 27px;
            padding-left: 7px;
        }

        .prompt {
            display: none;
            font-size: 13px;
            border: 1px solid #999999;
        }

        .statistics {
            display: none;
            font-size: 13px;
            border: 1px solid #999999;
            overflow-y: scroll;
            height: 150px;
        }

        .suggests {
            display: none;
            font-size: 13px;
            border: 1px solid #999999;
        }

        ;
        .lineData {
            display: none;
            font-size: 13px;
            border: 1px solid #999999;
        }

        .result {
            display: none;
            font-size: 12px;
            border: 1px solid #999999;
            line-height: 27px;
            padding-left: 7px;
        }
    </style>
    <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=您的密钥"></script>
    <style type="text/css">body,html{width:100%;height:100%;margin:0;font-family:"Microsoft YaHei"}#mapDiv{width:100%;height:400px}input,b,p{margin-left:5px;font-size:14px}</style>
    <script>
        var map;
        var zoom = 12;
        var localsearch;
        function onLoad() {
            //初始化地图对象
            map = new T.Map("mapDiv");
            //设置显示地图的中心点和级别
            map.centerAndZoom(new T.LngLat(116.40969, 39.89945), zoom);
 			var cp = new T.CoordinatePickup(map, {callback: getLngLat})
            cp.addEvent();
          
            var config = {
                pageCapacity: 10,	//每页显示的数量
                onSearchComplete: localSearchResult	//接收数据的回调函数
            };
            //创建搜索对象
            localsearch = new T.LocalSearch(map, config);
        }

        function localSearchResult(result) {
            //清空地图及搜索列表
            clearAll();

            //添加提示词
            prompt(result);

            //根据返回类型解析搜索结果
            switch (parseInt(result.getResultType())) {
                case 1:
                    //解析点数据结果
                    pois(result.getPois());
                    break;
                case 2:
                    //解析推荐城市
                    statistics(result.getStatistics());
                    break;
                case 3:
                    //解析行政区划边界
                    area(result.getArea());
                    break;
                case 4:
                    //解析建议词信息
                    suggests(result.getSuggests());
                    break;
                case 5:
                    //解析公交信息
                    lineData(result.getLineData());
                    break;
            }
        }

        //解析提示词
        function prompt(obj) {
            var prompts = obj.getPrompt();
            if (prompts) {
                var promptHtml = "";
                for (var i = 0; i < prompts.length; i++) {
                    var prompt = prompts[i];
                    var promptType = prompt.type;
                    var promptAdmins = prompt.admins;
                    var meanprompt = prompt.DidYouMean;
                    if (promptType == 1) {
                        promptHtml += "<p>您是否要在" + promptAdmins[0].name + "</strong>搜索更多包含<strong>" + obj.getKeyword() + "</strong>的相关内容?<p>";
                    }
                    else if (promptType == 2) {
                        promptHtml += "<p>在<strong>" + promptAdmins[0].name + "</strong>没有搜索到与<strong>" + obj.getKeyword() + "</strong>相关的结果。<p>";
                        if (meanprompt) {
                            promptHtml += "<p>您是否要找:<font weight='bold' color='#035fbe'><strong>" + meanprompt + "</strong></font><p>";
                        }
                    }
                    else if (promptType == 3) {
                        promptHtml += "<p style='margin-bottom:3px;'>有以下相关结果,您是否要找:</p>"
                        for (i = 0; i < promptAdmins.length; i++) {
                            promptHtml += "<p>" + promptAdmins[i].name + "</p>";
                        }
                    }
                }
                if (promptHtml != "") {
                    document.getElementById("promptDiv").style.display = "block";
                    document.getElementById("promptDiv").innerHTML = promptHtml;
                }
            }
        }

        //解析点数据结果
        function pois(obj) {
            if (obj) {
                //显示搜索列表
                var divMarker = document.createElement("div");
                //坐标数组,设置最佳比例尺时会用到
                var zoomArr = [];
                for (var i = 0; i < obj.length; i++) {
                    //闭包
                    (function (i) {
                        //名称
                        var name = obj[i].name;
                        //地址
                        var address = obj[i].address;
                        //坐标
                        var lnglatArr = obj[i].lonlat.split(" ");
                        var lnglat = new T.LngLat(lnglatArr[0], lnglatArr[1]);

                        var winHtml = "名称:" + name + "<br/>地址:" + address+"<br/>经纬度:" + lnglatArr[0]+","+lnglatArr[1];

                        //创建标注对象
                        var marker = new T.Marker(lnglat);
                        //地图上添加标注点
                        map.addOverLay(marker);
                        //注册标注点的点击事件
                        var markerInfoWin = new T.InfoWindow(winHtml, {autoPan: true});
                        marker.addEventListener("click", function () {
                            marker.openInfoWindow(markerInfoWin);
                        });

                        zoomArr.push(lnglat);

                        //在页面上显示搜索的列表
                        var a = document.createElement("a");
                        a.href = "javascript://";
                        a.innerHTML = name;
                        a.onclick = function () {
                            showPosition(marker, winHtml);
                        }
                        divMarker.appendChild(document.createTextNode((i + 1) + "."));
                        divMarker.appendChild(a);
                        divMarker.appendChild(document.createElement("br"));
                    })(i);
                }
                //显示地图的最佳级别
                map.setViewport(zoomArr);
                //显示搜索结果
                divMarker.appendChild(document.createTextNode('共' + localsearch.getCountNumber() + '条记录,分' + localsearch.getCountPage() + '页,当前第' + localsearch.getPageIndex() + '页'));
                document.getElementById("searchDiv").appendChild(divMarker);
                document.getElementById("resultDiv").style.display = "block";
            }
        }

        //显示信息框
        function showPosition(marker, winHtml) {
            var markerInfoWin = new T.InfoWindow(winHtml, {autoPan: true});
            marker.openInfoWindow(markerInfoWin);
        }

        //解析推荐城市
        function statistics(obj) {
            if (obj) {
                //坐标数组,设置最佳比例尺时会用到
                var pointsArr = [];
                var priorityCitysHtml = "";
                var allAdminsHtml = "";
                var priorityCitys = obj.priorityCitys;
                if (priorityCitys) {
                    //推荐城市显示
                    priorityCitysHtml += "在中国以下城市有结果<ul>";
                    for (var i = 0; i < priorityCitys.length; i++) {
                        priorityCitysHtml += "<li>" + priorityCitys[i].name + "(" + priorityCitys[i].count + ")</li>";
                    }
                    priorityCitysHtml += "</ul>";
                }

                var allAdmins = obj.allAdmins;
                if (allAdmins) {
                    allAdminsHtml += "更多城市<ul>";
                    for (var i = 0; i < allAdmins.length; i++) {
                        allAdminsHtml += "<li>" + allAdmins[i].name + "(" + allAdmins[i].count + ")";
                        var childAdmins = allAdmins[i].childAdmins;
                        if (childAdmins) {
                            for (var m = 0; m < childAdmins.length; m++) {
                                allAdminsHtml += "<blockquote>" + childAdmins[m].name + "(" + childAdmins[m].count + ")</blockquote>";
                            }
                        }
                        allAdminsHtml += "</li>"
                    }
                    allAdminsHtml += "</ul>";
                }
                document.getElementById("statisticsDiv").style.display = "block";
                document.getElementById("statisticsDiv").innerHTML = priorityCitysHtml + allAdminsHtml;
            }
        }

        //解析行政区划边界
        function area(obj) {
            if (obj) {
            	if(obj.points){
            		//坐标数组,设置最佳比例尺时会用到
                    var pointsArr = [];
                    var points = obj.points;
                    for (var i = 0; i < points.length; i++) {
                        var regionLngLats = [];
                        var regionArr = points[i].region.split(",");
                        for (var m = 0; m < regionArr.length; m++) {
                            var lnglatArr = regionArr[m].split(" ");
                            var lnglat = new T.LngLat(lnglatArr[0], lnglatArr[1]);
                            regionLngLats.push(lnglat);
                            pointsArr.push(lnglat);
                        }
                        //创建线对象
                        var line = new T.Polyline(regionLngLats, {
                            color: "blue",
                            weight: 3,
                            opacity: 1,
                            lineStyle: "dashed"
                        });
                        //向地图上添加线
                        map.addOverLay(line);
                    }
                    //显示最佳比例尺
                    map.setViewport(pointsArr);
            	}
            	if(obj.lonlat){
            		var regionArr = obj.lonlat.split(",");
            		map.panTo(new T.LngLat(regionArr[0], regionArr[1]));
            	}
            }
        }

        //解析建议词信息
        function suggests(obj) {
            if (obj) {
                //建议词提示,如果搜索类型为公交规划建议词或公交站搜索时,返回结果为公交信息的建议词。
                var suggestsHtml = "建议词提示<ul>";
                for (var i = 0; i < obj.length; i++) {
                    suggestsHtml += "<li>" + obj[i].name + "&nbsp;&nbsp;<font style='color:#666666'>" + obj[i].address + "</font></li>";
                }
                suggestsHtml += "</ul>";
                document.getElementById("suggestsDiv").style.display = "block";
                document.getElementById("suggestsDiv").innerHTML = suggestsHtml;
            }
        }

        //解析公交信息
        function lineData(obj) {
            if (obj) {
                //公交提示
                var lineDataHtml = "公交提示<ul>";
                for (var i = 0; i < obj.length; i++) {
                    lineDataHtml += "<li>" + obj[i].name + "&nbsp;&nbsp;<font style='color:#666666'>共" + obj[i].stationNum + "站</font></li>";
                }
                lineDataHtml += "</ul>";
                document.getElementById("lineDataDiv").style.display = "block";
                document.getElementById("lineDataDiv").innerHTML = lineDataHtml;
            }
        }

        //清空地图及搜索列表
        function clearAll() {
            map.clearOverLays();
            document.getElementById("searchDiv").innerHTML = "";
            document.getElementById("resultDiv").style.display = "none";
            document.getElementById("statisticsDiv").innerHTML = "";
            document.getElementById("statisticsDiv").style.display = "none";
            document.getElementById("promptDiv").innerHTML = "";
            document.getElementById("promptDiv").style.display = "none";
            document.getElementById("suggestsDiv").innerHTML = "";
            document.getElementById("suggestsDiv").style.display = "none";
            document.getElementById("lineDataDiv").innerHTML = "";
            document.getElementById("lineDataDiv").style.display = "none";
        }
      
         function getLngLat(lnglat) {
            document.getElementById("lnglatStr").value = lnglat.lng.toFixed(6) + "," + lnglat.lat.toFixed(6);
        }
    </script>
</head>
<body onLoad="onLoad()" style="height:100%">

<div style="height:50px;line-height:50px;margin:0px 15px 0px;">
    <img src="http://api.tianditu.gov.cn/v4.0/image/logo.png" style="float: left;display: inline-block;padding-top: 16px;"/>
    <input type="text" id="keyWord" value="天安门" style="height:26px;width:230px;"/>
    <input type="button" class="search" onClick="localsearch.search(document.getElementById('keyWord').value)" value="搜索"/>
    <span style="margin-left:40px;">拾取坐标点位置:  <input type="text" id="lnglatStr" value="" style="height:26px;"/></span>
</div>

<div style="display:flex;flex-column:rows;height: calc(100vh - 53px);
    overflow: hidden;">
	<div id="mapDiv" style="flex:5;height:100%;display:inline-block"></div>
	<div style="flex:2;height:100%;border:1px solid #cdcd">
		 <p>本示例演示如何根据关键字本地搜索。</p>
		<!-- 提示词面板 -->
		<div id="promptDiv" class="prompt"></div>
		<!-- 统计面板 -->
		<div id="statisticsDiv" class="statistics"></div>
		<!-- 建议词面板 -->
		<div id="suggestsDiv" class="suggests"></div>
		<!-- 公交提示面板 -->
		<div id="lineDataDiv" class="lineData"></div>
		<!-- 搜索结果面板 -->
		<div id="resultDiv" class="result">
			<div id="searchDiv"></div>
			<div id="pageDiv">
				<input type="button" value="第一页" onClick="localsearch.firstPage()"/>
				<input type="button" value="上一页" onClick="localsearch.previousPage()"/>
				<input type="button" value="下一页" onClick="localsearch.nextPage()"/>
				<input type="button" value="最后一页" onClick="localsearch.lastPage()"/>
				<br/>
				转到第<input type="text" value="1" id="pageId" size="3"/>页
				<input type="button" onClick="localsearch.gotoPage(parseInt(document.getElementById('pageId').value));"
					   value="转到"/>
			</div>
		</div>
	</div>

</div>

</body>
</html> 
 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值