腾讯地图 jsapi 点聚合 信息窗

引入qqmap

<script src="https://map.qq.com/api/gljs?v=1.exp&key=自己申请的key&libraries=drawing,geometry"></script> 
// 本人是在vue2进行开发的,这个简书的编辑器真的太不好用了,代码的缩紧就不调整了
var map = null
data() {
  return {
    local: [22.54286, 114.05956],
    detailInfo: []
  }
}

// 以下均在method方法内
// 定义地图中心点坐标
const [ local1, local2 ] = this.local
var center = new window.TMap.LatLng(local1, local2)
var clusterBubbleList = []
var markerGeometries = []
var that = this
var marker = null
var infoWindow = nul // 信息窗
// 定义map变量,调用 TMap.Map() 构造函数创建地图
map = new window.TMap.Map(document.getElementById("mapContainer"), {
   center, //设置地图中心点坐标
    zoom: 15, //设置地图缩放级别
    viewMode: "2D", // 3d或者2d
    panControl: true, // 是否显示控件
    // mapStyleId: that.theme ? 'style1' : 'style2' // 根据夜间模式决定样式,样式在控制台的个性化地图中绑定样式
})
var markerCluster = new TMap.MarkerCluster({
   id: 'cluster', //图层id
   map: map, //设置点聚合显示在哪个map对象中(创建map的段落省略)
   enableDefaultStyle: false,   //使用默认样式
   minimumClusterSize: 2,  //最小聚合点数:2个
   geometries: [
      {position: new TMap.LatLng(39.982829,116.306934)}, // 对象内可以传点其他你需要用上的元素
      {position: new TMap.LatLng(39.989011,116.323586)}
   ], // 坐标列表
   zoomOnClick: true,  //点击聚合数字放大展开
   gridSize: 60,       //聚合算法的可聚合距离,即距离小于该值的点会聚合至一起,默认为60,以像素为单位
   averageCenter: false, //每个聚和簇的中心是否应该是聚类中所有标记的平均值
   maxZoom: 10 //采用聚合策略的最大缩放级别,若地图缩放级别大于该值,则不进行聚合,标点将全部被展开
})
map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE) // 移除坐标尺控件

// 初始化信息窗
infoWindow = new TMap.InfoWindow({
   map: map,
   content: "<div><p>Hello World!</p></div>",
   // enableCustom: true, // 是否开启自定义样式,如开启则content必须写成如上行的格式
   position: new TMap.LatLng(39.984104, 116.307503), // 初始化显示位置
   offset: { x: 0, y: -32 } // 设置信息窗相对position偏移像素
});
infoWindow.close()
markerCluster.on('cluster_changed', function (e) {
   // 销毁旧聚合簇生成的覆盖物
   if (clusterBubbleList.length) {
      clusterBubbleList.forEach(function (item) {
         item.destroy();
      })
      clusterBubbleList = [];
    }
    markerGeometries = []
    // 根据新的聚合簇数组生成新的覆盖物和点标记图层
    var clusters = markerCluster.getClusters()
    clusters.forEach(function (item) {
    if (item.geometries.length > 1) {
       let clusterBubble = new ClusterBubble({
       map,
       position: item.center,
       content: item.geometries.length
    });
    clusterBubble.on('click', () => {
        map.fitBounds(item.bounds)
     });
     clusterBubbleList.push(clusterBubble)
   } else {
      markerGeometries.push({
          position: item.center // 还能传点其他你要用到的参数
       })
  }
});
        
if (marker) {
    // 已创建过点标记图层,直接更新数据
    marker.setGeometries(markerGeometries)
} else {
   // 创建点标记图层 这里是自定义的样式
   marker = new TMap.MultiMarker({
      map: map,
      styles: {
         default: new TMap.MarkerStyle({
            'width': 34,
            'height': 38,
            'anchor': {
                x: 17,
                y: 21
              },
             'src': 'https://xxxxxxxx',
              }),
        },
       geometries: markerGeometries
     })
     // 用户自身定位标
     var marker2 = new TMap.MultiMarker({
        map: map,
        styles: {
           // 点标记样式
           default: new TMap.MarkerStyle({
                'width': 20, // 样式宽
                'height': 30, // 样式高
                'anchor': { x: 10, y: 30 }, // 描点位置
              }),
         },
         geometries: [
              // 点标记数据数组
              {
                // 标记位置(纬度,经度,高度)
                 position: center
              },
            ],
          })
          marker.on("click", function (evt) {
            infoWindow.close()
            //设置infoWindow
            infoWindow.setPosition(evt.geometry.position);//设置信息窗位置
            infoWindow.setContent(
              `
                <div class="infowindow-wrap" id="${evt.geometry.store_id}-1">
                  <div class="map-wrap" id="${evt.geometry.store_id}-2">
                 </div>
                </div>
              `
            );//设置信息窗内容
            infoWindow.open(); //打开信息窗
            that.detailInfo = evt.geometry
            // 监听信息窗关闭按钮
            infoWindow.on("closeclick", function (evt) {
              that.detailInfo = null
              infoWindow.close()
            })
            // 给信息窗绑定点击事件,暂时不知道怎么优化了,等大佬来优化吧....
            // 目前信息窗体能监听的事件没有点击信息窗体的内容的这个事件
            // 可以直接访问infowindow实例获取display, infoWindow.dom.style.display来判断是否显示
            document.getElementById(that.detailInfo.store_id+'-1').onclick = function(e) {
              that.jumpDetail(e.target.id.split('-')[0])
            }
          })
        }
      })

这里可以设置地图中心点

map.setCenter(new TMap.LatLng(location.lat, location.lng))

这里可以设置地图的个性化

map.setMapStyleId('style2')

最后效果图如下


1.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容