1. 程式人生 > >vue引入maptalks地圖及聚合效果

vue引入maptalks地圖及聚合效果

1、安裝maptalks.js

npm install maptalks --save

2、安裝聚合mapkercluster

npm install maptalks.markercluster

3、vue頁面引入

import * as maptalks from 'maptalks'
import {ClusterLayer} from 'maptalks.markercluster'

4、初始化地圖並新增聚合

mounted() {
  let that = this
  //--0--//地圖物件的初始化
  this.map = new maptalks.Map('map', {
    center: [109.1748453547,21.4586700546],
    //中心點標記紅十字,用於開發debug
    centerCross : false,
    zoom: 13,
    minZoom : 10,
    maxZoom : 18,
    //縮放級別控制元件
    zoomControl : false, // add zoom control
    scaleControl : true, // add scale control
    //鷹眼控制元件
    overviewControl : true, // add overview control
    //設定瓦片圖層的空間參考spatialReference預設就是3857,googlemap的解析度
    spatialReference : {
      projection : 'EPSG:3857'
      //與map一樣,支援更詳細的設定resolutions,fullExtent等
    },
    baseLayer: new maptalks.TileLayer('base', {
      //  urlTemplate: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
      //renderer : 'canvas', // set TileLayer's renderer to canvas
      //底圖伺服器地址,如下為瓦片地址
      urlTemplate: 'http://xxx.xx.xxx.xxx:xxxx/mapdata/tiles/{z}/{x}/{y}.png',
      //tileSystem 控制瓦片的x,y以及行列,後兩個是origin原點位置(很重要)
      tileSystem : [1, 1, -20037508.3427890,-20037508.3427890], // tile system
      //subdomains: ['a','b','c'],
      minZoom : 10,
      maxZoom : 18
      // css filter 濾鏡配置
      // cssFilter : 'sepia(60%) invert(95%)',
      // attribution: '© <a href="http://maptalks.org/" target="_blank">Maptalk for Amap</a> contributors'
    }),
    layers : [
      new maptalks.VectorLayer('v')
    ],
    attribution: {//左下角info
      content: '©qmap'
    }
  })

  // 拖動範圍限制,黑框控
  let extent = new maptalks.Extent(108.8584570000,20.9790840000,110.0569128018,22.1177123207)
  // var extent = new maptalks.Extent(112.5381688894,26.8876543885,112.5605009244,26.9012691519);
  // set map's max extent to map's extent at zoom 14
  this.map.setMaxExtent(extent)
  this.map.setZoom(this.map.getZoom(), { animation : false })
  this.map.getLayer('v')
    .addGeometry(
      new maptalks.Polygon(extent.toArray(), {
        symbol : { 'polygonOpacity': 0, 'lineWidth': 0 }
      })
    )

// 往地圖上新增點位

this.markInfo()
},

methods: {
  setCenter: function(center) {
    //標註點平移到某個點
    let centerV = maptalks1.CRSTransform.transform(center, 'bd09ll', 'gcj02')
    this.map.animateTo({
      zoom: 17,
      center: centerV
    }, {
      duration: 1000
    })
  },
  // 上圖
  markInfo: function () {
    let that = this
    that.map.removeLayer(that.clusterLayer)
    let markers = []
    //--2--//前端聚合查詢
    // data from realworld.50000.1.js
    //需要引入maptalks.markercluster.js
    //資料格式[lon,lat,name]
    // 如:[[21.8129763667, 109.2714296333, "曉港名城4號樓"],[21.8131727667, 109.2710308833, "曉港名城6號樓"]]
    for (let i = 0; i < that.addressPoints.length; i++) {
      let a = that.addressPoints[i]
      markers.push(new maptalks.Marker(maptalks1.CRSTransform.transform([a.latitude, a.longitude], 'bd09ll', 'gcj02'),
        {
          'properties': {
            'name': a.name,
            'onSale': a.onSale
          },
          symbol : [
            {
              'markerFile'   : a.onSale ? require('../../../static/img/on.png') : require('../../../static/img/off.png'),//標註點圖示
              'markerWidth'  : 30,
              'markerHeight' : 35
            },{
              'textName' : '{name}',
              'textSize' : 12,
              'textDy'   : -50,
              'textHaloRadius' : 5,
              'textHaloFill' : a.onSale ? '#FFB427' : '#B9B9B9',
              'textFill' : '#fff' // color
            }
          ]
        }
      ))//.on('mousedown', onClick))
    }
    let clusterLayer = new ClusterLayer('cluster', markers, {
      'noClusterWithOneMarker' : true,
      'noClusterWithHowMany': 8,//聚合的最小個數
      'maxClusterZoom' : 15,
      //"count" is an internal variable: marker count in the cluster.
      'symbol': {
        'markerType' : 'ellipse',
        'markerFill' : { property:'count', type:'interval', stops: [[0, 'rgb(135, 196, 240)'], [9, '#1bbc9b'],[50, 'rgb(116, 115, 149)'],
            [99, 'rgb(216, 115, 149)']]},
        'markerFillOpacity' : 0.7,
        'markerLineOpacity' : 1,
        'markerLineWidth' : 3,
        'markerLineColor' : '#fff',
        'markerWidth' : { property:'count', type:'interval', stops: [[0, 40], [9, 60], [50, 70],[99, 80]] },
        'markerHeight' : { property:'count', type:'interval', stops: [[0, 40], [9, 60], [50, 70],[99, 80]] }
      },
      'drawClusterText': true,
      'geometryEvents' : true,
      'single': true
    })
    that.map.addLayer(clusterLayer)
    that.clusterLayer = clusterLayer

    function onClick(e) {
      e.target.setInfoWindow({
        'content': '<div class="content-' + e.target.properties.onSale + '">' + e.target.properties.name + '</div>',
        'width'  : 150,
        'dy' : 5,
        'autoPan': true,
        'custom': false,
        'autoOpenOn' : 'click',  //set to null if not to open when clicking on marker
        'autoCloseOn' : 'click'
      })
    }
  }
}



相關推薦

vue引入maptalks地圖聚合效果

1、安裝maptalks.js npm install maptalks --save 2、安裝聚合mapkercluster npm install maptalks.markercluster 3、vue頁面引入 import * as maptalks f

vue引入地圖

最終效果圖: 1、新建一個初始化js(init.js) 在index.html引入js <script src="http://api.tianditu.gov.cn/api?v=4.0&tk=您的tk" type="text/javascript"></scrip

vue引入animate.css樣式大全

一、首先我們要在小黑窗中下載: npm install animate.css --save 二、在main.js中引入: import animated from ‘animate.css’ Vue.use(animated) 三、開始寫我們的t

ionic 修改應用名稱 修改百度離線地圖聚合 圖標

離線 百度離線地圖 分享 應用名稱 技術分享 修改 com http ges 1.ionic 修改應用名稱 2.修改百度離線地圖 點聚合 圖標 ionic 修改應用名稱 及 修改百度離線地圖 點聚合 圖標

新建VUE 2.0 專案引入Element UI 步驟常見問題

新建Vue專案: 淘寶映象(npm install -g cnpm –registry=https://registry.npm.taobao.org) webpack(cnpm install webpack -g 或 npm install webpack -g) Vue

解決Vue引入百度地圖JSSDK:BMap is undefined 問題

原文連結: 解決Vue引入百度地圖JSSDK:BMap is undefined 問題 百度地圖官網文件介紹使用JSSDK時,僅提供了2種引入方式: script引入 非同步載入 但vue專案中僅某一兩個頁面需要用到百度地圖,所以不想在 index.html 中全域性引用。 那

vue之動畫過渡效果

1、自定義css樣式實現 css(注:若未定義transition的name,預設未v-) <style> .v-enter, .v-leave-to{ <#--過渡效果 透明度--> opacity:0; } .v-e

vue專案中實現maptalks地圖上彈框使用videojs播放實時視訊rtmp流

不限制於vue專案,區別只是相關檔案的引入 最終實現效果如下: 1、首先引入需要的資源:vue-video-player、maptalks相關 npm install vue-video-player --save npm install maptalks -

[android] 百度地圖開發 (一).申請AK顯示地圖解決顯示空白網格問題

定義 gps 官方 應用程序 2.x lns settings sap xmlns 近期做android百度地圖,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so顯示百度地圖時總是遇到問題——僅僅顯示

Vue 參數傳遞刷新後依舊存在

sent 多個 com col tar path .... ram ref 獲取參數方式有兩種: 1、params2、query第一種方式: params this.$router.push({name:‘Hello‘,params:{name:‘zs‘,age:‘22‘}

vue引入jq插件

http pro logs color brush 網上 {} 嘗試 vid 今天做官網,把unslider做成指令,但是一直提示$(el).unslider() no a function,一開始我想復雜了,後來在網上看了很多帖子,大多數都是修改webpack.base.

百度地圖 彈窗效果,標註總顯示在左上角

scroll coder 自動 poi level edr local board 放大縮小 現象一: 地圖彈窗先隱藏 ->顯示地圖彈窗->設置marker -> 設置centerAndZoom   看效果標註層定點位置有問題(因顯隱),中心點還是相對

Vue生命周期業務場景使用

create ext ans 圖片 gem tro observe 相關 重新 vue裏的生命周期是什麽? vue實例從創建到銷毀的過程稱之為vue的生命周期 vue的生命周期各階段都做了什麽? beforeCreate 實例創建前:這個階段實例的data、methods

Arcgis api for javascript學習筆記-三維地圖的飛行效果

com init viewport window eight put div speed null 其實就只是用到了 view.goTo() 函數,再利用 window.setInterval() 函數(定時器)定時執行goTo()。代碼如下: <!DOCTYP

聊一聊2D地圖的迷霧效果

png char 一段 行數據 編程經驗 lan get 第一個 色值 在經歷了17年諸般變動後,現在到了2018年。懷舊是因為之前幾年發生太多,好與不好都已過去,17年迎來新的開始,所以也就有了後來些許感慨,有機會再說說這些行業感受了。今天先讓我們專註於川最新解決的實際項

vue的登陸驗證返回登錄前頁面實現

ble AI ldr false 有一個 url 兩個 並不是 || 一、路由配置部分如下所示, 導出路由示例 let router = new VueRouter({ routes: [ // 登陸 { name: ‘login‘, path: ‘/

Vue項目搭建原理一

router 提高 nbsp .com 早已 實現 vuejs 前端框架 包括 一. Vue簡介 Vue簡介 Vue是近兩年來比較火的一個前端框架(漸進式框架),與reactjs和angularjs三國鼎立,根據不完全統計,包括餓了麽、稀土掘金、蘇寧易購、美團

vue引入jquery

plugin src ide ack pro nbsp ins -s ima 在vue中我們如何引入jquery 1.在package.json裏面的dependencies 加入“jquery”:“^3.2.1”, 圖示 2. 終端輸入 npm install j

Tutorial中代碼的區別不同效果

bsp 請求 吞吐量 req async 情況下 情況 gpo t對象 首先, Servlet 處理流程為如下過程:首先,Servlet 接收到請求之後,可能首先需要對請求攜帶的數據進行一些預處理;接著,Servlet 線程將請求轉交給一個異步線程來執行業務處理,線程本身返

vue 引入通用 css

組件 oba outer style 路由配置 smart rom eight css 1、在入口 js 文件 main.js 中引入,一些公共的樣式文件,可以在這裏引入。import Vue from ‘vue‘ import App from ‘./App‘ // 引入