天地图关键字搜索列表纯js版本

先看效果

1.引入脚本

html 复制代码
 <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=key"></script>

2.html部分

html 复制代码
<div class="form-group">
    <label class="col-sm-3 control-label">选取坐标</label>
    <div class="col-sm-9">
        <div id="container" class="map"></div>
        <div class="search" style="z-index: 999; opacity: 0.6;">
            <input id="complete" type="text" placeholder="输入您要定位的地址"  style="width:70%;"/>
            <button type="button" class="btn" onClick="localsearch.search(document.getElementById('complete').value,7)">搜索</button>

            @*<div class="list-group">  此处用到 Bootstrap
                <button type="button" class="list-group-item">Cras justo odio</button>
            </div>*@

        </div>
    </div>

</div>

3.js部分 初始化地图中心点 搜索对象 点击地图事件

javascript 复制代码
var autocomplete;
var localsearch;
var tianditumap;

function ontiandituLoaded() {
    // 初始化天地图地图
    tianditumap = new T.Map('container', {
        projection: 'EPSG:3785'
    })
    // 中心点和初始化级别
    // 如果是编辑设备, 则设置原站点的坐标为中心点, 否则不设置, 默认
    //if (g_info.isEdit === true) { alert("zj"); alert(g_info.LONG); map.centerAndZoom(new T.LngLat(g_info.LONG, g_info.LAT), 12); }
    //else { alert("bj"); map.centerAndZoom(new T.LngLat(116.40769, 39.89945), 12); }
    tianditumap.centerAndZoom(new T.LngLat(114.42594, 30.4555), 15);
    
    var Searchconfig = {
        pageCapacity: 5,	//每页显示的数量
        onSearchComplete: localSearchResult	//接收数据的回调函数
    };
    //创建搜索对象
    localsearch = new T.LocalSearch(tianditumap, Searchconfig);
   
    // 地图点击事件
    tianditumap.addEventListener("click", (e) => {
        setLocationInputVal(e.lnglat);
    });
}
  1. js部分 搜索回调方法 和点击定位
javascript 复制代码
function localSearchResult(result) {
    let obj = result.getPois();
    if (obj) {
        //坐标数组,设置最佳比例尺时会用到
        var zoomArr = [];
        var divMarker = document.createElement("div");
        divMarker.className = "list-group";
        obj.forEach((item) => {
            var buttont1 = document.createElement("button");
            buttont1.type = "button";
            buttont1.className = "list-group-item";
            buttont1.innerHTML = item.name; 

            //创建标注对象
            var winHtml = "名称:" + item.name + "<br/>地址:" + item.address;
            let lnglat = new T.LngLat(item.lonlat.split(",")[0], item.lonlat.split(",")[1]);

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

            buttont1.onclick = function () {
                let markerInfoWin = new T.InfoWindow(winHtml, { autoPan: true });
                marker.openInfoWindow(markerInfoWin);
            }
            divMarker.appendChild(buttont1);
            zoomArr.push(lnglat);
        });
        //显示地图的最佳级别
        tianditumap.setViewport(zoomArr);
        document.getElementsByClassName("search")[0].appendChild(divMarker);
       
    }
}

// 设置坐标输入框数据
function setLocationInputVal(location) {
    $('#input_long_id').val(location.getLng());
    $('#input_lat_id').val(location.getLat());
}
相关推荐
徐子颐10 分钟前
从 Vibe Coding 到 Agent Coding:Cursor 2.0 开启下一代 AI 开发范式
前端
小月鸭22 分钟前
如何理解HTML语义化
前端·html
jump6801 小时前
url输入到网页展示会发生什么?
前端
诸葛韩信1 小时前
我们需要了解的Web Workers
前端
brzhang1 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
yivifu1 小时前
JavaScript Selection API详解
java·前端·javascript
这儿有一堆花1 小时前
告别 Class 组件:拥抱 React Hooks 带来的函数式新范式
前端·javascript·react.js
十二春秋1 小时前
场景模拟:基础路由配置
前端
六月的可乐2 小时前
实战干货-Vue实现AI聊天助手全流程解析
前端·vue.js·ai编程
一 乐2 小时前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习