使用百度地圖實現地圖網格的樣本,百度地圖網格樣本

來源:互聯網
上載者:User

使用百度地圖實現地圖網格的樣本,百度地圖網格樣本

前言:最近要使用百度地圖實現樓盤可視化的功能,因此最基礎的功能就是將地圖網格化以後實現不同地區的樓盤劃分;

1,自行去百度地圖的開放平台申請秘鑰哈,這裡我就把自己的秘鑰貼出來了;ak=A3CklGvnFOjkAzKzay2dySgfdig0GKz4

2,建立一個簡單頁面,下面我把自己的頁面貼出來

<!DOCTYPE html><html><head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style type="text/css">  html {   height: 100%  }  body {   height: 100%;   margin: 0px;   padding: 0px  }  #container {   height: 100%  } </style> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=A3CklGvnFOjkAzKzay2dySgfdig0GKz4"></script> <script type="text/javascript" src="ziroom-map.js"></script> </head> <body> <div id="container"></div> <script> var myMap = new ZMap("container"); </script> </body> </html>

3,其中引入了ziroom-map.js,這是我們公司的名字啦,我把代碼貼出來,這個js是封裝了百度的js的api的,有人如果要問為什麼封裝,直接使用不可以嗎?那我的回答是:封裝可以將具體業務和地圖相結合,使代碼更清晰,並且可以持久化當前地圖的狀態,利於實現對地圖的操作。

var ZMap = function (id, center, level) { this.initCenter = new ZPoint(116.404, 39.915);//初始化的中心點,同時為了定義網格的中心點 this.id = id;//div的id this.level = level ? level : 13;//地圖層級 this.center = center ? center : this.initCenter;//中心點 this.map = null;//百度地圖執行個體 this.xgrids = [];//經線 this.ygrids = [];//緯線 this.beSelectBounds = {}; this.bounds = null;//當前地圖的四個頂點 this.span = null;//當前網格的跨度 this.init();}ZMap.prototype = { init: function () {//全域初始化  var zMap = this;  this.map = new BMap.Map(this.id);  this.map.centerAndZoom(this.center.point, this.level);  this.map.enableScrollWheelZoom();  this.map.disableInertialDragging();  this.map.addControl(new BMap.NavigationControl({   anchor: BMAP_ANCHOR_BOTTOM_RIGHT,   type: BMAP_NAVIGATION_CONTROL_ZOOM  })); //縮放按鈕  this.map.addControl(new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT, offset: new BMap.Size(80, 25)})); //比例尺  this.map.disableDoubleClickZoom();  this.map.setMapStyle({style: 'googlelite'});  this.initProperty();  this.initGrid();  //添加移動後的點擊事件  this.map.addEventListener("dragend", function () {   zMap.initProperty();   zMap.initGrid();  });  //添加放大或縮小時的事件  this.map.addEventListener("zoomend", function () {   zMap.initProperty();   zMap.initGrid();  });  //設定點擊事件  this.map.addEventListener("click", function (e) {   var point = e.point;   //擷取當前點是在哪個區塊內,擷取正方形的四個頂點   var points = zMap.getGrid(point);   //判斷目前範圍是否已經被選中過,如果被選中過則取消選中   var key = '' + points[0].lng + points[0].lat + points[2].lng + points[2].lat;//使用兩個點的座標作為key   if (zMap.beSelectBounds[key]) {    zMap.map.removeOverlay(zMap.beSelectBounds[key]);    delete zMap.beSelectBounds[key];    return;   }   var polygon = new BMap.Polygon(points, {strokeColor: "red", strokeWeight: 2, strokeOpacity: 0.5});   zMap.map.addOverlay(polygon);   zMap.beSelectBounds[key] = polygon;  }); }, initProperty: function () {//初始化當前地圖的狀態  this.level = this.map.getZoom();  this.bounds = {   x1: this.map.getBounds().getSouthWest().lng,   y1: this.map.getBounds().getSouthWest().lat,   x2: this.map.getBounds().getNorthEast().lng,   y2: this.map.getBounds().getNorthEast().lat  };  this.span = this.getSpan();//需要使用level屬性 }, initGrid: function () {//初始化網格  var zMap = this;  //將原來的網格線先去掉  for (var i in zMap.xgrids) {   this.map.removeOverlay(zMap.xgrids[i]);  }  zMap.xgrids = [];  for (var i in zMap.ygrids) {   this.map.removeOverlay(zMap.ygrids[i]);  }  zMap.ygrids = [];  //擷取當前網格跨度  var span = zMap.span;  //初始化地圖上的網格  for (var i = zMap.bounds.x1 + (zMap.initCenter.point.lng - zMap.bounds.x1) % span.x - span.x; i < zMap.bounds.x2 + span.x; i += span.x) {   var polyline = new BMap.Polyline([    new BMap.Point(i.toFixed(6), zMap.bounds.y1),    new BMap.Point(i.toFixed(6), zMap.bounds.y2)   ], {strokeColor: "black", strokeWeight: 1, strokeOpacity: 0.5});   zMap.xgrids.push(polyline);   zMap.map.addOverlay(polyline);  }  for (var i = zMap.bounds.y1 + (zMap.initCenter.point.lat - zMap.bounds.y1) % span.y - span.y; i < zMap.bounds.y2 + span.y; i += span.y) {   var polyline = new BMap.Polyline([    new BMap.Point(zMap.bounds.x1, i.toFixed(6)),    new BMap.Point(zMap.bounds.x2, i.toFixed(6))   ], {strokeColor: "black", strokeWeight: 1, strokeOpacity: 0.5});   zMap.ygrids.push(polyline);   zMap.map.addOverlay(polyline);  } }, getSpan: function () {//擷取網格的跨度  var scale = 0.75;  var x = 0.00064;  for (var i = this.level; i < 19; i++) {   x *= 2;  }  var y = parseFloat((scale * x).toFixed(5));  return {x: x, y: y}; }, getGrid: function (point) {//返回當前點在所在區塊的四個頂點  var zMap = this;  //先找出兩條縱線座標  var xpoints = this.xgrids.map(function (polyline) {   return polyline.getPath()[0].lng;  }).filter(function (lng) {   return Math.abs(lng - point.lng) <= zMap.span.x;  }).sort(function (a, b) {   return a - b;  }).slice(0, 2);  //再找出兩條橫線的座標  var ypoints = this.ygrids.map(function (polyline) {   return polyline.getPath()[0].lat;  }).filter(function (lat) {   return Math.abs(lat - point.lat) <= zMap.span.y;  }).sort(function (a, b) {   return a - b;  }).slice(0, 2);  return [   new BMap.Point(xpoints[0], ypoints[0]),   new BMap.Point(xpoints[0], ypoints[1]),   new BMap.Point(xpoints[1], ypoints[1]),   new BMap.Point(xpoints[1], ypoints[0])  ]; }, reset: function () {//重設  this.map.reset(); }}var ZPoint = function (x, y, code) { this.code = code; this.point = new BMap.Point(x, y);}

總結:好了這篇隨筆就這麼多了,歡迎大家指正。

以上這篇使用百度地圖實現地圖網格的樣本就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.