中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

javascript html5 canvas實(shí)現(xiàn)可拖動(dòng)省份的中國地圖
來源:易賢網(wǎng) 閱讀:4302 次 日期:2016-07-20 16:18:50
溫馨提示:易賢網(wǎng)小編為您整理了“javascript html5 canvas實(shí)現(xiàn)可拖動(dòng)省份的中國地圖”,方便廣大網(wǎng)友查閱!

本文實(shí)例分享了html5 canvas可拖動(dòng)省份的中國地圖實(shí)現(xiàn)方法,供大家參考,具體內(nèi)容如下

1.數(shù)據(jù)獲取

畫地圖需要省份邊界坐標(biāo),理論上可以每次都用百度API獲取數(shù)據(jù)并繪圖,但為了增加效率,首先將所有坐標(biāo)都獲取下來并存入數(shù)據(jù)庫中。

新建省份數(shù)據(jù)數(shù)組

代碼如下:

var allZoneData = [{'name':'遼寧省','been':'yes','id':'01'},<span style="font-family: Arial, Helvetica, sans-serif;">{'name':'吉林省','been':'yes','id':'02'},……];</span> 

輪詢?cè)摂?shù)組,根據(jù)省份名稱請(qǐng)求百度API獲取坐標(biāo)數(shù)據(jù),并將數(shù)據(jù)以ajax方式放松給php

var myGeo = new BMap.Geocoder(); 

(function(){ 

 for(var i = 0;i < allZoneData.length;i++){ 

  getAllZone(allZoneData[i].name,allZoneData[i].been,allZoneData[i].id); 

 } 

})(); 

//name為省份名,been表示是否去過,id為唯一標(biāo)識(shí),cir為省份圈號(hào)(有可能一個(gè)省份有兩部分封閉圓圈構(gòu)成) 

function getAllZone (name,been,id) { 

 var data,temp; 

 var bdary = new BMap.Boundary(); 

 bdary.get(name, function(rs){ 

  var count = rs.boundaries.length;  

  for(var j = 0; j < count; j++){      

   var ply = new BMap.Polygon(rs.boundaries[j], {strokeWeight: 2, strokeColor: "#ff0000"}); 

   data = ply.getPath(); 

   $.ajax({ 

    url: "addData.php", 

    type:"POST", 

    data: {'data':data,'name' : name,'cir':j,'been':been,'id':id}, 

    success: function(txt){ 

     console.log(txt); 

    }, 

    error: function(){ 

     alert('添加數(shù)據(jù)出錯(cuò)!'); 

    } 

   });   

  }         

 });         

php得到數(shù)據(jù)后,解析數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)到事先建好的數(shù)據(jù)庫中

<?php 

  header("content-type:text/html; charset=utf-8"); 

  $data = $_REQUEST['data']; 

  $name = $_REQUEST['name']; 

  $cir = $_REQUEST['cir']; 

  $been = $_REQUEST['been']; 

  $id = $_REQUEST['id']; 

  $con = mysql_connect("localhost","……","……"); 

  if (!$con){ 

    die('Could not connect: ' . mysql_error()); 

  } 

  mysql_select_db("……", $con); 

  mysql_set_charset('utf8',$con); 

  foreach ($data as $temp){ 

    $sql = "insert into place (id,name,lng,lat,cir,been) values ('".$id."', '".$name."', '".$temp['lng']."','".$temp['lat']."','".$cir."','".$been."')"; 

    if (!mysql_query($sql,$con)){ 

      die('Error: ' . mysql_error()); 

    } 

  } 

  mysql_close($con); 

  echo 'Success'; 

?> 

2.畫地圖(base地圖畫在mapCanvas層)

輪詢省份數(shù)組,并以ajax方式請(qǐng)求該省份邊界坐標(biāo),然后繪圖

var drawMap = function (context,data,l,t) { //context為繪制所在的層,l和t為相對(duì)位置,data為邊界對(duì)象數(shù)組 

 if(data.been == 'yes'){ 

  context.fillStyle = "green"; 

 }else{ 

  context.fillStyle = "grey"; 

 } 

 context.globalAlpha = 0.8; 

 context.beginPath(); 

 cleft = (data.coordinate[0].lng - temp_left) * bigger + l; //temp_left和temp_top為地圖偏移位置. 

 ctop = (temp_top - data.coordinate[0].lat) * bigger + t; //bigger為放大倍數(shù) 

 context.moveTo(cleft,ctop); 

 for(var j = 1;j < data.coordinate.length;j++){ 

  cleft = (data.coordinate[j].lng - temp_left) * bigger + l; 

  ctop = (temp_top - data.coordinate[j].lat) * bigger + t; 

  context.lineTo(cleft,ctop); 

 } 

 context.closePath(); 

 context.stroke(); 

 context.fill(); 

3.畫移動(dòng)連線(連線和移動(dòng)的省份畫在moveMapCanvas層)

當(dāng)在地圖上拖動(dòng)省份時(shí),出現(xiàn)若干條連接移動(dòng)的省份和原省份的直線

var drawLinkLine = function(data,l,t){ //此處的l和t表示移動(dòng)的相對(duì)位置 

 for(var k = 0;k < data.coordinate.length;k++){ 

  if(k % 60 == 0){ 

   moveMapContext.beginPath(); 

   //根據(jù)移動(dòng)距離的不同,設(shè)置連線的粗細(xì) 

   lineLength = Math.sqrt(l * l + t * t) / 100; 

   lineLength = lineLength >= 4.5 ? 4.5 : lineLength; 

   moveMapContext.lineWidth = 5 - lineLength; 

   moveMapContext.strokeStyle = "rgba(0,120,60,0.4)"; 

   cleft = (data.coordinate[k].lng - temp_left) * bigger; 

   ctop = (temp_top - data.coordinate[k].lat) * bigger; 

   moveMapContext.moveTo(cleft,ctop); 

   cleft = (data.coordinate[k].lng - temp_left) * bigger + l; 

   ctop = (temp_top - data.coordinate[k].lat) * bigger + t; 

   moveMapContext.lineTo(cleft,ctop); 

   moveMapContext.closePath(); 

   moveMapontext.stroke(); 

  } 

 } 

4.事件

鼠標(biāo)按下事件:當(dāng)點(diǎn)擊到地圖上時(shí),要做的事是,判斷點(diǎn)擊位置,將位置信息轉(zhuǎn)化成經(jīng)緯度,再通過百度API根據(jù)經(jīng)緯度獲得省份名稱。

$('#eventCanvas').mousedown(function(ev){ 

 //獲取點(diǎn)擊canvas的坐標(biāo) 

 var mouseX, mouseY; 

 if(ev.layerX || ev.layerX==0){ 

  mouseX = ev.layerX; 

  mouseY = ev.layerY; 

 }else if(ev.offsetX || ev.offsetX==0){ 

  mouseX = ev.offsetX; 

  mouseY = ev.offsetY; 

 } 

 //保存點(diǎn)擊時(shí)的原坐標(biāo)值 

 tempX = mouseX; 

 tempY = mouseY; 

 //將坐標(biāo)轉(zhuǎn)化為經(jīng)緯度 

 mouseX = mouseX/bigger + temp_left; 

 mouseY = temp_top - mouseY/bigger; 

 if(opts.dragAll){ 

  draging = true; 

 }else{ 

  moveMapContext.clearRect(0, 0, 1100, 630); 

  //根據(jù)經(jīng)緯度獲得所在地理位置并獲取邊界坐標(biāo)再畫線 

  myGeo.getLocation(new BMap.Point(mouseX, mouseY), 

   function(result){ 

    tempName = ''; 

    draging = true; 

    name = result.addressComponents.province; 

    tempName = name; 

    pubFuns.drawMoveLayerLine(0,0);    

  }); 

 } 

}); 

鼠標(biāo)移動(dòng)事件:根據(jù)點(diǎn)擊的省份名,獲得數(shù)據(jù),并實(shí)時(shí)重繪移動(dòng)層的省份

$('#eventCanvas').mousemove(function(ev){ 

 var mouseX, mouseY; 

 if(ev.layerX || ev.layerX==0){ 

  mouseX = ev.layerX; 

  mouseY = ev.layerY; 

 }else if(ev.offsetX || ev.offsetX==0){ 

  mouseX = ev.offsetX; 

  mouseY = ev.offsetY; 

 } 

 if(draging){ 

  if(opts.dragAll){ <span style="font-family: Arial, Helvetica, sans-serif;">//拖動(dòng)整個(gè)地圖,存在問題,地圖畫的太慢</span> 

   mapContext.clearRect(0, 0, 1100, 630); 

   for(var i = 0;i < allZoneData.length;i++){ 

    for(var j = 0;j < allData[allZoneData[i].name].length;j++){ //allData是第一次讀取數(shù)據(jù)時(shí)放到內(nèi)存里的變量,它包含了所有數(shù)據(jù) 

     pubFuns.drawMap(mapContext,allData[allZoneData[i].name][j],mouseX - tempX, mouseY - tempY); 

    } 

   } 

   }else{ 

    moveMapContext.clearRect(0, 0, 1100, 630); 

    pubFuns.drawMoveLayerLine(mouseX - tempX, mouseY - tempY); 

   }  

  } 

}); 

鼠標(biāo)抬起事件:設(shè)置dragging為false,clear移動(dòng)層。

$('#eventCanvas').mouseup(function(e){ 

 if(opts.dragAll){  

 }else{ 

  moveMapContext.clearRect(0, 0, 1100, 630); 

 } 

 draging = false; 

});

名單

小結(jié):功能、原理都很簡(jiǎn)單,但能熟悉canvas的一些屬性和方法。canvas層是可以重疊到一起的,這樣就可以在不同的層畫不同的內(nèi)容,方便維護(hù)和管理。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久久久国产免费免费| 亚洲欧洲美洲综合色网| 国产精品有限公司| 欧美一区视频在线| 国产亚洲人成网站在线观看| 亚洲视频大全| 欧美性感一类影片在线播放 | 国产一区二区0| 欧美成人免费一级人片100| 国内精品久久久久久| 欧美一级二区| 一区二区三区四区蜜桃| 韩国视频理论视频久久| 欧美区国产区| 久久免费视频在线观看| 在线一区欧美| 在线播放国产一区中文字幕剧情欧美 | 欧美日韩国产a| 久久精品国产免费| 亚洲一区二区三区高清| 国产亚洲欧美一区二区三区| 欧美日韩国产三级| 久久性天堂网| 久久成人羞羞网站| 校园春色国产精品| 亚洲日本欧美| 黄色成人av| 国产农村妇女毛片精品久久莱园子| 巨乳诱惑日韩免费av| 久久精品国产精品| 欧美在线观看视频一区二区三区| 亚洲三级国产| 狠狠干狠狠久久| 激情综合视频| 亚洲高清在线播放| 日韩视频一区二区在线观看 | 另类酷文…触手系列精品集v1小说| 久久影视精品| 亚洲色无码播放| 日韩亚洲欧美一区| 亚洲高清资源综合久久精品| 亚洲黄色免费| 亚洲最新中文字幕| 亚洲美女电影在线| 亚洲毛片一区| 亚洲在线播放| 久久这里只有精品视频首页| 久久在线免费观看| 乱人伦精品视频在线观看| 久久综合伊人| 麻豆成人精品| 欧美成人精品在线播放| 欧美成人中文| 国产精品久久综合| 国产精品久久久一区二区三区| 欧美午夜不卡在线观看免费| 欧美激情一区二区在线| 欧美国产日韩二区| 国产精品任我爽爆在线播放| 好看的亚洲午夜视频在线| 91久久精品日日躁夜夜躁国产| 激情欧美国产欧美| 亚洲欧洲在线视频| 欧美伦理视频网站| 国产精品久线观看视频| 在线播放日韩| 久久丁香综合五月国产三级网站| 欧美精品久久久久久久久老牛影院 | 欧美精品在线免费播放| 国产精品久久波多野结衣| 激情文学综合丁香| 亚洲毛片播放| 久久天天躁狠狠躁夜夜爽蜜月| 欧美激情一二区| 亚洲成人中文| 久久成人18免费观看| 国产精品夜色7777狼人| 亚洲一区精彩视频| 国产精品老牛| 亚洲在线一区| 国产女主播一区二区三区| 夜夜嗨av一区二区三区中文字幕| 老司机aⅴ在线精品导航| 韩日在线一区| 美女黄毛**国产精品啪啪| 好男人免费精品视频| 久久久久久久久岛国免费| 国产永久精品大片wwwapp| 亚洲视频1区2区| 嫩草影视亚洲| 亚洲人成在线观看一区二区| 麻豆9191精品国产| 亚洲国产第一页| 欧美日韩精品一区二区天天拍小说| 亚洲精选视频免费看| 欧美日韩在线播放三区四区| 日韩网站在线观看| 欧美日韩国产一区二区三区| 一本色道久久综合狠狠躁的推荐| 欧美性猛交xxxx免费看久久久 | 一二三区精品| 国产日韩精品在线播放| 麻豆精品视频| 午夜视频精品| av成人免费观看| 亚洲黄色尤物视频| 国产精品一二一区| 欧美精品午夜| 久久久一区二区| 亚洲香蕉视频| 在线观看不卡| 国产午夜精品久久| 国产精品igao视频网网址不卡日韩| 久久久国产精彩视频美女艺术照福利| 日韩一区二区久久| 一区二区三区成人精品| 玉米视频成人免费看| 国产亚洲精品久久飘花| 国产精品久久久久久久app| 欧美日韩国产二区| 欧美精品乱人伦久久久久久 | 久久久久国产免费免费| 欧美一区二区在线| 久久久久久色| 免费欧美视频| 欧美日韩国产区一| 国产精品美女www爽爽爽视频| 国产精品免费一区豆花| 国产日产高清欧美一区二区三区| 国产精品性做久久久久久| 国内自拍一区| 一片黄亚洲嫩模| 久久精品99国产精品酒店日本| 久久精品日产第一区二区三区| 久久一区国产| 国产精品久久久久99| 国内一区二区在线视频观看| 亚洲黄一区二区| 亚欧成人精品| 欧美日韩1区2区3区| 国产亚洲欧美一级| 一本色道久久88亚洲综合88| 久久激情中文| 国产精品区二区三区日本| 亚洲国产精品一区二区尤物区| 99精品99| 久久综合九色九九| 国产伦精品一区二区三区视频孕妇 | 亚洲午夜久久久久久尤物| 久久精品网址| 国产精品女主播在线观看| 亚洲精品国产精品国自产观看浪潮 | 国产精品乱看| 国产主播一区二区| 午夜精品成人在线| 欧美电影免费观看| 一区二区亚洲欧洲国产日韩| 亚洲女优在线| 欧美午夜精品电影| 91久久久久久国产精品| 女生裸体视频一区二区三区| 国产伊人精品| 久久人人97超碰精品888| 国产亚洲精品自拍| 夜夜嗨av一区二区三区免费区| 亚洲欧美日韩网| 性亚洲最疯狂xxxx高清| 久久综合色影院| 欧美夫妇交换俱乐部在线观看| 亚洲伦理网站| 亚洲国产精品成人| 亚洲国产日韩综合一区| 一区二区三区视频在线观看| 国产农村妇女毛片精品久久麻豆| 久久―日本道色综合久久| 亚洲影视在线| 亚洲免费观看高清完整版在线观看熊| 国产三级欧美三级日产三级99| 欧美一激情一区二区三区| 极品日韩久久| 欧美午夜久久| 久久网站免费| 亚洲欧美日韩国产中文在线| 亚洲国产成人不卡| 国产欧美一区二区视频| 欧美日韩国产小视频| 久久看片网站| 亚洲欧美卡通另类91av| 在线电影院国产精品| 国产精品久久久久久五月尺| 久久全国免费视频| 亚洲一区二区三区中文字幕在线| 伊人久久综合97精品| 国产精品一区二区三区久久| 欧美女主播在线| 欧美经典一区二区三区| 免费不卡中文字幕视频| 久久久久久电影| 一区二区三区日韩欧美| 最新国产の精品合集bt伙计|