国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

使用百度地圖實現地圖網格的示例

2024-05-06 15:22:06
字體:
來源:轉載
供稿:網友

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

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);}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 资中县| 涡阳县| 平阳县| 汶上县| 东兰县| 宁海县| 伊川县| 勃利县| 平凉市| 上饶县| 邛崃市| 兴宁市| 同仁县| 武定县| 龙岩市| 天门市| 台山市| 延津县| 张家港市| 柏乡县| 林周县| 通榆县| 澄迈县| 罗平县| 哈尔滨市| 五指山市| 富顺县| 罗源县| 三穗县| 江口县| 鄂州市| 株洲市| 青田县| 屏边| 益阳市| 霍城县| 康平县| 化州市| 宜宾市| 乐昌市| 清新县|