vue3 集成天地图,完美实例

在Vue 3中,你可以使用天地图JavaScript API进行集成。以下是一个基本的例子,展示了如何在Vue 3组件中集成天地图并添加一个地图实例:

1、首先,确保你已经在你的项目中包含了天地图的JavaScript API。你可以通过以下方式添加:


<script src="http://api.tianditu.gov.cn/api?v=4.0&tk==你的天地图key">script>

2、创建一个Vue 3组件,并在组件中添加地图的初始化逻辑,先上代码,代码中实现了部分功能。如果需要详细,可以联系我。

<template>
  <div class="dashboard-editor-container">
    <div id="mapDiv" style="position: absolute; width: 96%; height: 80%">div>
  div>
template>
<script setup name="Index">
const dataMap = ref({})
// 响应式数据  
const data_info = ref([]); 
const init = () => {
 
    //这里T指向天地图对象
    var T = window.T;
    //初始化地图,创建一个新的地图实例
    //其中 `T.Map` 接收的第一个参数是在html中天地图标签的ID
    //第二个参数是天地图的参考系,我这里设置的是 `EPSG:4326`,也就是WGS84 坐标参考系。
    //map = new T.Map("mapDiv","EPSG:4326");
    map = new T.Map("mapDiv");
    //这一步调用了天地图的setMapType方法,用来设置天地图的图层类型,我这里设置的是卫星图图层
    map.setMapType(window.TMAP_HYBRID_MAP );
    //这一步设置的是地图的初始化后的中心点坐标以及缩放级别
    //做完这一步,天地图就以及能在地图上显示出来了
    map.centerAndZoom(new T.LngLat(105.28501, 27.301693), zoom);

    //创建缩放平移控件对象(H5)
    control = new T.Control.Zoom();
    // //添加缩放平移控件(H5)
    map.addControl(control);

    // //这里我创建了一个手动选址的实例,以后再讲
    // var cb = new T.CoordinatePickup(map, {callback: handChoose})
    // cb.addEvent();
    //这里我创建了一个地址搜索的实例
    //第一个参数固定为你的天地图实例,也就是上面的map
    //第二个参数是每页显示的最大内容数量,我这里设置的是显示10个地名搜索结果
    //locateSearch = new T.LocalSearch(map,{pageCapacity:10})
    //这里是我自己写的一个显示行政区划边界范围的组件,以后在讲
    //var YT = totianjson(yantian,"red",0.5)
    //map.addOverLay(YT)

    //创建图片对象
    // var icon = new T.Icon({
    //   iconUrl:"http://api.tianditu.gov.cn/img/map/markerA.png",
    //   iconSize:new T.Point(19,27),
    //   iconAnchor:new T.Point(10,25)
    // })
    // //向地图上添加自定义标
    // var marker = new T.Marker(new T.LngLat(116.411794, 39.9068), {icon: icon});
    // map.addOverLay(marker);

    // //设置显示地图的中心点和级别
    // map.centerAndZoom(new T.LngLat(116.40969, 39.89945), zoom);
    // var latlng = new T.LngLat(116.420837,39.902395);
    // var label = new T.Label({
    //     text: "天地图:https://www.tianditu.gov.cn ",
    //     position: latlng,
    //     offset: new T.Point(-9, 0)
    // });
    // //创建地图文本对象
    // map.addOverLay(label);


    // var definedOverlay = T.Overlay.extend({
    //             initialize: function (lnglat, text, text2, options) {
    //                 this.lnglat = lnglat;
    //                 this.setOptions(options);
    //                 this._text = text;
    //                 this._overText = text2;
    //             },

    //             onAdd: function (map) {
    //                 this.map = map;
    //                 var div = this._div = document.createElement("div");
    //                 div.style.position = "absolute";
    //                 div.style.backgroundColor = "#EE5D5B";
    //                 div.style.border = "1px solid #BC3B3A";
    //                 div.style.color = "white";
    //                 div.style.height = "18px";
    //                 div.style.padding = "2px";
    //                 div.style.lineHeight = "18px";
    //                 div.style.whiteSpace = "nowrap";
    //                 div.style.MozUserSelect = "none";
    //                 div.style.fontSize = "12px";
    //                 var span = this._span = document.createElement("span");
    //                 div.appendChild(span);
    //                 span.appendChild(document.createTextNode(this._text));
    //                 var that = this;

    //                 var arrow = this._arrow = document.createElement("div");
    //                 arrow.style.background = "url(http://map.baidu.com/fwmap/upload/r/map/fwmap/static/house/images/label.png) no-repeat";
    //                 arrow.style.position = "absolute";
    //                 arrow.style.width = "11px";
    //                 arrow.style.height = "10px";
    //                 arrow.style.top = "22px";
    //                 arrow.style.left = "10px";
    //                 arrow.style.overflow = "hidden";
    //                 div.appendChild(arrow);

    //                 div.onmouseover = function () {
    //                     this.style.backgroundColor = "#6BADCA";
    //                     this.style.borderColor = "#0000ff";
    //                     this.getElementsByTagName("span")[0].innerHTML = that._overText;
    //                     arrow.style.backgroundPosition = "0px -20px";
    //                 }

    //                 div.onmouseout = function () {
    //                     this.style.backgroundColor = "#EE5D5B";
    //                     this.style.borderColor = "#BC3B3A";
    //                     this.getElementsByTagName("span")[0].innerHTML = that._text;
    //                     arrow.style.backgroundPosition = "0px 0px";
    //                 }

    //                 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 - 36) + "px";
    //                 this._div.style.left = (pos.x - 11) + "px";

    //             }
    //         });
            
    //         var point = new T.LngLat(116.40438, 39.87877);
    //         var pdefinedOverlay = new definedOverlay(point, "天坛公园", "北京市东城区天坛东路甲1号", {});
    //         map.addOverLay(pdefinedOverlay);

            // var data_info = [[116.417854,39.921988,"地址:北京市东城区王府井大街88号乐天银泰百货八层"],
            //     [116.406605,39.921585,"地址:北京市东城区东华门大街"],
            //     [116.412222,39.912345,"地址:北京市东城区正义路甲5号"]
            // ];
              // 从接口获取坐标数据并更新地图  
              getIndexData().then(data_info => {  
                // 假设 data 是一个包含坐标的数组  
                // 你可以在这里添加标记、绘制路径等  
                // 例如,添加一个标记  
                for(var i=0;i<data_info.length;i++){
                  //var marker = new T.Marker(new T.LngLat(data_info[i][0],data_info[i][1]));  // 创建标注
                  var content = data_info[i][2];
                  //map.addOverLay(marker);               // 将标注添加到地图中
                  //创建图片对象
                  var icon = new T.Icon({
                    //iconUrl:"http://api.tianditu.gov.cn/img/map/markerA.png",
                    iconUrl:iconUrl,
                    iconSize:new T.Point(19,19),
                    iconAnchor:new T.Point(10,25)
                  })
                  //向地图上添加自定义标
                  var marker = new T.Marker(new T.LngLat(data_info[i][0],data_info[i][1]), {icon: icon});
                  map.addOverLay(marker);
                  addClickHandler(content,marker);
                }
            });  

            
            function addClickHandler(content,marker){
                marker.addEventListener("click",function(e){
                    openInfo(content,e)}
                );
            }
            function openInfo(content,e){
                var point = e.lnglat;
                var marker = new T.Marker(point);// 创建标注
                var markerInfoWin = new T.InfoWindow(content,{offset:new T.Point(0,-30)}); // 创建信息窗口对象
                map.openInfoWindow(markerInfoWin,point); //开启信息窗口
            }
}
script>

你可能感兴趣的:(vue)