最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用百度地圖實(shí)現(xiàn)地圖網(wǎng)格的示例

 更新時(shí)間:2018年02月06日 08:58:43   作者:小胡嚕魚  
下面小編就為大家分享一篇使用百度地圖實(shí)現(xiàn)地圖網(wǎng)格的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

前言:最近要使用百度地圖實(shí)現(xiàn)樓盤可視化的功能,因此最基礎(chǔ)的功能就是將地圖網(wǎng)格化以后實(shí)現(xiàn)不同地域的樓盤劃分;

1,自行去百度地圖的開(kāi)放平臺(tái)申請(qǐng)秘鑰哈,這里我就把自己的秘鑰貼出來(lái)了;ak=A3CklGvnFOjkAzKzay2dySgfdig0GKz4

2,新建一個(gè)簡(jiǎn)單頁(yè)面,下面我把自己的頁(yè)面貼出來(lái)

<!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,這是我們公司的名字啦,我把代碼貼出來(lái),這個(gè)js是封裝了百度的js的api的,有人如果要問(wèn)為什么封裝,直接使用不可以么?那我的回答是:封裝可以將具體業(yè)務(wù)和地圖相結(jié)合,使代碼更清晰,并且可以持久化當(dāng)前地圖的狀態(tài),利于實(shí)現(xiàn)對(duì)地圖的操作。

var ZMap = function (id, center, level) {
 this.initCenter = new ZPoint(116.404, 39.915);//初始化的中心點(diǎn),同時(shí)為了定義網(wǎng)格的中心點(diǎn)
 this.id = id;//div的id
 this.level = level ? level : 13;//地圖級(jí)別
 this.center = center ? center : this.initCenter;//中心點(diǎn)
 this.map = null;//百度地圖實(shí)例
 this.xgrids = [];//經(jīng)線
 this.ygrids = [];//緯線
 this.beSelectBounds = {};
 this.bounds = null;//當(dāng)前地圖的四個(gè)頂點(diǎn)
 this.span = null;//當(dāng)前網(wǎng)格的跨度
 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();
  //添加移動(dòng)后的點(diǎn)擊事件
  this.map.addEventListener("dragend", function () {
   zMap.initProperty();
   zMap.initGrid();
  });
  //添加放大或縮小時(shí)的事件
  this.map.addEventListener("zoomend", function () {
   zMap.initProperty();
   zMap.initGrid();
  });
  //設(shè)置點(diǎn)擊事件
  this.map.addEventListener("click", function (e) {
   var point = e.point;
   //獲取當(dāng)前點(diǎn)是在哪個(gè)區(qū)塊內(nèi),獲取正方形的四個(gè)頂點(diǎn)
   var points = zMap.getGrid(point);
   //判斷當(dāng)前區(qū)域是否已經(jīng)被選中過(guò),如果被選中過(guò)則取消選中
   var key = '' + points[0].lng + points[0].lat + points[2].lng + points[2].lat;//使用兩個(gè)點(diǎn)的坐標(biāo)作為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 () {//初始化當(dāng)前地圖的狀態(tài)
  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 () {//初始化網(wǎng)格
  var zMap = this;
  //將原來(lái)的網(wǎng)格線先去掉
  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 = [];
  //獲取當(dāng)前網(wǎng)格跨度
  var span = zMap.span;
  //初始化地圖上的網(wǎng)格
  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 () {//獲取網(wǎng)格的跨度
  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) {//返回當(dāng)前點(diǎn)在所在區(qū)塊的四個(gè)頂點(diǎn)
  var zMap = this;
  //先找出兩條縱線坐標(biāo)
  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);
  //再找出兩條橫線的坐標(biāo)
  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);
}

總結(jié):好了這篇隨筆就這么多了,歡迎大家指正。

以上這篇使用百度地圖實(shí)現(xiàn)地圖網(wǎng)格的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Canvas + JavaScript 制作圖片粒子效果

    Canvas + JavaScript 制作圖片粒子效果

    本文將詳細(xì)介紹Canvas + JavaScript 制作圖片粒子效果的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • Javascript的表單驗(yàn)證-提交表單

    Javascript的表單驗(yàn)證-提交表單

    JavaScript 可用來(lái)在數(shù)據(jù)被送往服務(wù)器前對(duì) HTML 表單中的這些輸入數(shù)據(jù)進(jìn)行驗(yàn)證。通過(guò)本文給大家介紹Javascript的表單驗(yàn)證-提交表單,對(duì)javascript表單驗(yàn)證,提交表單相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • 詳解js跨域請(qǐng)求的兩種方式,支持post請(qǐng)求

    詳解js跨域請(qǐng)求的兩種方式,支持post請(qǐng)求

    原先一直以為要實(shí)現(xiàn)跨域請(qǐng)求只能用jsonp,只能支持GET請(qǐng)求,后來(lái)了解到使用POST請(qǐng)求也可以實(shí)現(xiàn)跨域,但是需要在服務(wù)器增加Access-Control-Allow-Origin和Access-Control-Allow-Headers頭,下面說(shuō)明下兩個(gè)不同的方法實(shí)現(xiàn)的方式和原理。
    2018-05-05
  • js如何對(duì)元素可視區(qū)域進(jìn)行判定

    js如何對(duì)元素可視區(qū)域進(jìn)行判定

    在前端開(kāi)發(fā)中,有時(shí)候我們需要判斷一個(gè)元素是否在可視區(qū)域內(nèi),本文主要介紹了js如何對(duì)元素可視區(qū)域進(jìn)行判定,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 關(guān)于微信中a鏈接無(wú)法跳轉(zhuǎn)問(wèn)題

    關(guān)于微信中a鏈接無(wú)法跳轉(zhuǎn)問(wèn)題

    微信頁(yè)面開(kāi)發(fā)時(shí),各個(gè)主頁(yè)之間的跳轉(zhuǎn),完全是通過(guò)a鏈接進(jìn)行的,但是來(lái)回跳轉(zhuǎn)幾次,再次從其他主頁(yè)面跳回首頁(yè)的時(shí)候,微信頭部出現(xiàn)了跳轉(zhuǎn)加載進(jìn)度條,但是就是不跳轉(zhuǎn),也沒(méi)有任何反應(yīng),怎么回事呢?下面小編給大家解答下
    2016-08-08
  • 詳解ES6中class的實(shí)現(xiàn)原理

    詳解ES6中class的實(shí)現(xiàn)原理

    這篇文章主要介紹了詳解ES6中class的實(shí)現(xiàn)原理,幫助大家更好的理解和學(xué)習(xí)JavaScript es6,感興趣的朋友可以了解下
    2020-10-10
  • JavaScript限定復(fù)選框的選擇個(gè)數(shù)示例代碼

    JavaScript限定復(fù)選框的選擇個(gè)數(shù)示例代碼

    有10個(gè)復(fù)選框,用戶最多只能勾選3個(gè),否則就灰掉所有復(fù)選框,具體實(shí)現(xiàn)思路及代碼如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
    2013-08-08
  • JavaScript 中this指向問(wèn)題案例詳解

    JavaScript 中this指向問(wèn)題案例詳解

    這篇文章主要介紹了JavaScript 中this指向問(wèn)題案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 一個(gè)js封裝的不錯(cuò)的選項(xiàng)卡效果代碼

    一個(gè)js封裝的不錯(cuò)的選項(xiàng)卡效果代碼

    在論壇里經(jīng)??吹饺藛?wèn)選項(xiàng)卡或者類似選項(xiàng)卡的切換效果 這里封裝了個(gè)js,希望對(duì)大家有用 所有代碼都在下面了 如果有錯(cuò)誤或者建議,可以回貼告訴我,謝謝
    2008-02-02
  • 20個(gè)你不得不知道的js位運(yùn)算用法

    20個(gè)你不得不知道的js位運(yùn)算用法

    位運(yùn)算,那些看似晦澀但又蘊(yùn)含無(wú)限魔力的數(shù)字魔術(shù),在JavaScript開(kāi)發(fā)中扮演了默默無(wú)聞卻又至關(guān)重要的角色,本文介紹多個(gè)js位運(yùn)算的使用場(chǎng)景,闡述在JavaScript中,如何巧妙運(yùn)用位運(yùn)算實(shí)現(xiàn)效率的提升和算法的優(yōu)化,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

中牟县| 历史| 黄平县| 四平市| 泸州市| 禄劝| 电白县| 中西区| 商都县| 顺昌县| 栾川县| 额济纳旗| 涞水县| 星座| 太白县| 遂溪县| 灵璧县| 黔东| 得荣县| 新密市| 元氏县| 龙陵县| 淄博市| 垣曲县| 高州市| 沙湾县| 申扎县| 九江市| 新津县| 页游| 新巴尔虎左旗| 金坛市| 饶平县| 迭部县| 闽侯县| 抚顺市| 含山县| 石门县| 玛沁县| 临夏市| 杭锦后旗|