成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

谷歌地圖API添加形狀

開發(fā) 前端
您可以向地圖添加各種形狀。形狀是地圖上與某個緯度/經(jīng)度坐標(biāo)綁定的對象。可用的形狀如下:線、多邊形、圓和矩形。您還可以將形狀配置為可供用戶進(jìn)行編輯或拖動。

 

[[170684]]

簡介

您可以向地圖添加各種形狀。形狀是地圖上與某個緯度/經(jīng)度坐標(biāo)綁定的對象??捎玫男螤钊缦拢壕€、多邊形、圓和矩形。您還可以將形狀配置為可供用戶進(jìn)行編輯或拖動。

多段線

如需在地圖上繪制線,請使用多段線。 Polyline 類在地圖上定義線性相連線段疊層。Polyline 對象包含一個 LatLng 位置數(shù)組,它創(chuàng)建的一系列線段以有序方式將這些位置連接起來。

1. 添加多段線

Polyline 構(gòu)造函數(shù)帶有一組用于指定線的 LatLng 坐標(biāo)的 PolylineOptions,以及一組用于調(diào)整多段線視覺行為的樣式。

Polyline 對象在地圖上繪制為一系列直線線段。您可以在構(gòu)建線時在PolylineOptions 內(nèi)指定線描邊的自定義顏色、粗細(xì)和不透明度,也可在構(gòu)建后更改這些屬性。多段線支持下列描邊樣式:

  • strokeColor 指定 "#FFFFFF" 格式的十六進(jìn)制 HTML 顏色。Polyline 類不支持命名顏色。
  • strokeOpacity 指定一個介于 0.0 和 1.0 的數(shù)值,用于確定線顏色的不透明度。默認(rèn)值為 1.0。
  • strokeWeight 指定線的寬度(單位:像素)。
    多段線的 editable 屬性指定用戶是否可以編輯形狀。請參閱下文的用戶可編輯形狀。同理,您也可以通過設(shè)置 draggable 屬性來允許用戶拖動線。 
  1. //此示例創(chuàng)建一個2-pixel-wide紅色線顯示的路徑威廉的***次跨越太平洋的飛行,途經(jīng)奧克蘭、CA、布里斯班、澳大利亞。 
  2. unction initMap() { 
  3.  var map = new google.maps.Map(document.getElementById('map'), { 
  4.    zoom: 3, 
  5.    center: {lat: 0, lng: -180}, 
  6.    mapTypeId: google.maps.MapTypeId.TERRAIN 
  7.  }); 
  8.  
  9.  var flightPlanCoordinates = [ 
  10.    {lat: 37.772, lng: -122.214}, 
  11.    {lat: 21.291, lng: -157.821}, 
  12.    {lat: -18.142, lng: 178.431}, 
  13.    {lat: -27.467, lng: 153.027} 
  14.  ]; 
  15.  var flightPath = new google.maps.Polyline({ 
  16.    path: flightPlanCoordinates, 
  17.    geodesic: true
  18.    strokeColor: '#FF0000'
  19.    strokeOpacity: 1.0, 
  20.    strokeWeight: 2 
  21.  }); 
  22.  
  23.  flightPath.setMap(map); 
  24.     

2. 移除多段線

如需移除地圖中的多段線,請調(diào)用 setMap() 方法,并傳遞 null 作為其自變量。在下例中,flightPath 是一個多段線對象:

  1. `flightPath.setMap(null);` 
  2.         // This example adds a UI control allowing users to remove the polyline from the map. 
  3.      
  4.     var flightPath; 
  5.     var map; 
  6.     function initMap() { 
  7.       map = new google.maps.Map(document.getElementById('map'), { 
  8.         zoom: 3, 
  9.         center: {lat: 0, lng: -180}, 
  10.         mapTypeId: google.maps.MapTypeId.TERRAIN 
  11.       }); 
  12.      
  13.       var flightPathCoordinates = [ 
  14.         {lat: 37.772, lng: -122.214}, 
  15.         {lat: 21.291, lng: -157.821}, 
  16.         {lat: -18.142, lng: 178.431}, 
  17.         {lat: -27.467, lng: 153.027} 
  18.       ]; 
  19.      
  20.       flightPath = new google.maps.Polyline({ 
  21.         path: flightPathCoordinates, 
  22.         strokeColor: '#FF0000'
  23.         strokeOpacity: 1.0, 
  24.         strokeWeight: 2 
  25.       }); 
  26.      
  27.       addLine(); 
  28.     } 
  29.      
  30.     function addLine() { 
  31.       flightPath.setMap(map); 
  32.     } 
  33.      
  34.     function removeLine() { 
  35.       flightPath.setMap(null); 
  36.     }   

3. 檢查多段線

多段線以 LatLng 對象數(shù)組形式指定一系列坐標(biāo)。這些坐標(biāo)決定線的路徑。如需檢索這些坐標(biāo),請調(diào)用 getPath(),后者將返回MVCArray 類型的數(shù)組。您可以利用下列操作操縱和檢查該數(shù)組:

  • getAt() 返回給定以零為起點(diǎn)索引值處的 LatLng
  • insertAt() 在給定以零為起點(diǎn)索引值處插入傳遞的 LatLng。請注意,該索引值處的任何現(xiàn)有坐標(biāo)都將前移
  • removeAt() 移除給定以零為起點(diǎn)索引值處的 LatLng

注:不能直接利用 mvcArray[i] 語法檢索數(shù)組的第 i 個元素。您必須使用 mvcArray.getAt(i)。

  1. // This example creates an interactive map which constructs a polyline based on 
  2. // user clicks. Note that the polyline only appears once its path property 
  3. // contains two LatLng coordinates. 
  4.  
  5. var poly; 
  6. var map; 
  7.  
  8. function initMap() { 
  9.   map = new google.maps.Map(document.getElementById('map'), { 
  10.     zoom: 7, 
  11.     center: {lat: 41.879, lng: -87.624}  // Center the map on Chicago, USA. 
  12.   }); 
  13.  
  14.   poly = new google.maps.Polyline({ 
  15.     strokeColor: '#000000'
  16.     strokeOpacity: 1.0, 
  17.     strokeWeight: 3 
  18.   }); 
  19.   poly.setMap(map); 
  20.  
  21.   // Add a listener for the click event 
  22.   map.addListener('click', addLatLng); 
  23.  
  24. // Handles click events on a map, and adds a new point to the Polyline. 
  25. function addLatLng(event) { 
  26.   var path = poly.getPath(); 
  27.  
  28.   // Because path is an MVCArray, we can simply append a new coordinate 
  29.   // and it will automatically appear. 
  30.   path.push(event.latLng); 
  31.  
  32.   // Add a new marker at the new plotted point on the polyline. 
  33.   var marker = new google.maps.Marker({ 
  34.     position: event.latLng, 
  35.     title: '#' + path.getLength(), 
  36.     map: map 
  37.   }); 
  38. }   

4. 定制多段線

可以向多段線添加符號形式的基于矢量的圖像。您可以通過組合使用符號和 PolylineOptions 類對地圖上多段線的外觀進(jìn)行充分的控制。請參閱符號,了解有關(guān)箭頭、虛線、自定義符號及動畫符號的信息。

多邊形

多邊形表示由閉合路徑(或環(huán)路)封閉的區(qū)域,由一系列坐標(biāo)定義。Polygon 對象與 Polyline 對象類似,因為它們都包含一系列有序的坐標(biāo)。多邊形使用描邊和填充區(qū)繪制。您可以為多邊形邊緣(描邊)定義自定義顏色、粗細(xì)和不透明度,以及為封閉區(qū)域(填充區(qū))定義自定義顏色和不透明度。顏色應(yīng)以十六進(jìn)制 HTML 格式表示。不支持顏色名稱。

Polygon 對象可描述復(fù)雜形狀,其中包括:

  • 由單個多邊形定義的多個不連續(xù)區(qū)域
    帶孔的區(qū)域
    一個或多個區(qū)域的交集

1. 添加多變形

由于多邊形區(qū)域可能包括幾個不同路徑,因此 Polygon 對象的 paths 屬性指定的是數(shù)組的數(shù)組,每個數(shù)組的類型均為 MVCArray。每個數(shù)組定義的都是不同的有序 LatLng 坐標(biāo)序列。

對于只包括一個路徑的簡單多邊形,您可以利用單個 LatLng 坐標(biāo)數(shù)組構(gòu)建 Polygon。構(gòu)建時,Google Maps JavaScript API 將在于 paths 屬性內(nèi)存儲該簡單數(shù)組時將其轉(zhuǎn)換成數(shù)組的數(shù)組。API 為包括一個路徑的多邊形提供了一個簡單的 getPath() 方法。

注:如果您以這種方式構(gòu)建一個簡單的多邊形,仍需通過以 MVCArray 形式操縱路徑來檢索多邊形的值。

多邊形的 editable 屬性指定用戶是否可以編輯形狀。請參閱下文的用戶可編輯形狀。同理,您也可以通過設(shè)置 draggable 屬性來允許用戶拖動形狀。

  1. // This example creates a simple polygon representing the Bermuda Triangle. 
  2. function initMap() { 
  3.     var map = new google.maps.Map(document.getElementById('map'), { 
  4.         zoom: 5, 
  5.         center: { 
  6.             lat: 24.886, 
  7.             lng: -70.268 
  8.         }, 
  9.         mapTypeId: google.maps.MapTypeId.TERRAIN 
  10.     }); 
  11.  
  12.     // Define the LatLng coordinates for the polygon's path. 
  13.     var triangleCoords = [{ 
  14.         lat: 25.774, 
  15.         lng: -80.190 
  16.     }, { 
  17.         lat: 18.466, 
  18.         lng: -66.118 
  19.     }, { 
  20.         lat: 32.321, 
  21.         lng: -64.757 
  22.     }, { 
  23.         lat: 25.774, 
  24.         lng: -80.190 
  25.     }]; 
  26.  
  27.     // Construct the polygon. 
  28.     var bermudaTriangle = new google.maps.Polygon({ 
  29.         paths: triangleCoords, 
  30.         strokeColor: '#FF0000'
  31.         strokeOpacity: 0.8, 
  32.         strokeWeight: 2, 
  33.         fillColor: '#FF0000'
  34.         fillOpacity: 0.35 
  35.     }); 
  36.     bermudaTriangle.setMap(map); 
  37.  

上例中的 Polygon 包含四組 LatLng 坐標(biāo),但請注意***組坐標(biāo)和***一組坐標(biāo)定義的位置相同,該位置用于完成環(huán)路。但在實(shí)踐中,由于多邊形定義的是封閉區(qū)域,因此您無需定指定***一組坐標(biāo)。Google Maps JavaScript API 將通過繪制一筆,將任何給定路徑的***一個位置連回***個位置,自動完成多邊形。

2. 移除多邊形

如需移除地圖中的多邊形,請調(diào)用 setMap() 方法,并傳遞 null 作為其自變量。在下例中,bermudaTriangle 是一個多邊形對象:

  1. bermudaTriangle.setMap(null); 

3. 檢查多邊形

多邊形以數(shù)組的數(shù)組形式指定其坐標(biāo)系列,其中每個數(shù)組的類型均為 MVCArray。每個“葉”數(shù)組都是一個指定單個路徑的 LatLng 坐標(biāo)數(shù)組。如需檢索這些坐標(biāo),請調(diào)用 Polygon 對象的 getPaths() 方法。由于該數(shù)組是 MVCArray,您需要利用下列操作操縱和檢查該數(shù)組:

  • getAt() 返回給定以零為起點(diǎn)索引值處的 LatLng
  • insertAt() 在給定以零為起點(diǎn)索引值處插入傳遞的 LatLng。請注意,該索引值處的任何現(xiàn)有坐標(biāo)都將前移
  • removeAt() 移除給定以零為起點(diǎn)索引值處的 LatLng

矩形

除了 Polygon 泛型類外,Google Maps JavaScript API 還提供了*** Rectangle 對象簡化其結(jié)構(gòu)的類。

1. 添加矩形

Rectangle 與 Polygon 類似,您也可以為矩形邊緣(描邊)定義自定義顏色、粗細(xì)和不透明度,以及為矩形內(nèi)區(qū)域(填充區(qū))定義自定義顏色和不透明度。顏色應(yīng)以十六進(jìn)制數(shù)值 HTML 樣式表示。

與 Polygon 不同的是,您無需為 Rectangle 定義 paths。與多邊形不同,矩形具有一個 bounds 屬性,通過為矩形指定 google.maps.LatLngBounds 來定義其形狀。

矩形的 editable 屬性指定用戶是否可以編輯形狀。請參閱下文的用戶可編輯形狀。同理,您也可以通過設(shè)置 draggable 屬性來允許用戶拖動矩形。

  1. // This example adds a red rectangle to a map. 
  2. function initMap() { 
  3.     var map = new google.maps.Map(document.getElementById('map'), { 
  4.         zoom: 11, 
  5.         center: { 
  6.             lat: 33.678, 
  7.             lng: -116.243 
  8.         }, 
  9.         mapTypeId: google.maps.MapTypeId.TERRAIN 
  10.     }); 
  11.  
  12.     var rectangle = new google.maps.Rectangle({ 
  13.         strokeColor: '#FF0000'
  14.         strokeOpacity: 0.8, 
  15.         strokeWeight: 2, 
  16.         fillColor: '#FF0000'
  17.         fillOpacity: 0.35, 
  18.         map: map, 
  19.         bounds: { 
  20.             north: 33.685, 
  21.             south: 33.671, 
  22.             east: -116.234, 
  23.             west: -116.251 
  24.         } 
  25.     }); 
  26.  

2. 移除矩形

如需移除地圖中的矩形,請調(diào)用 setMap() 方法,并傳遞 null 作為其自變量。

  1. rectangle.setMap(null); 

請注意,以上方法不會刪除矩形,而只是從地圖中移除矩形。如果您實(shí)際上是想刪除矩形,則應(yīng)先將其從地圖中移除,然后將矩形本身設(shè)置為 null。

除了 Polygon 泛型類外,Google Maps JavaScript API 還提供了*** Circle 對象簡化其結(jié)構(gòu)的類。

1. 添加圓

Circle 與 Polygon 類似,您也可以為圓的邊緣(描邊)定義自定義顏色、粗細(xì)和不透明度,以及為圓內(nèi)區(qū)域(填充區(qū))定義自定義顏色和不透明度。顏色應(yīng)以十六進(jìn)制數(shù)值 HTML 樣式表示。

與 Polygon 不同的是,您無需為 Circle 定義 paths。圓具有兩個額外的形狀定義屬性:

  • center 指定圓中心的 google.maps.LatLng
  • radius 指定圓的半徑(單位:米)
    圓的 editable 屬性指定用戶是否可以編輯形狀。請參閱下文的用戶可編輯形狀。同理,您也可以通過設(shè)置 draggable 屬性來允許用戶拖動圓。
  1. // This example creates circles on the map, representing populations in North 
  2. // America. 
  3.  
  4. // Firstcreate an object containing LatLng and population for each city. 
  5. var citymap = { 
  6.   chicago: { 
  7.     center: {lat: 41.878, lng: -87.629}, 
  8.     population: 2714856 
  9.   }, 
  10.   newyork: { 
  11.     center: {lat: 40.714, lng: -74.005}, 
  12.     population: 8405837 
  13.   }, 
  14.   losangeles: { 
  15.     center: {lat: 34.052, lng: -118.243}, 
  16.     population: 3857799 
  17.   }, 
  18.   vancouver: { 
  19.     center: {lat: 49.25, lng: -123.1}, 
  20.     population: 603502 
  21.   } 
  22. }; 
  23.  
  24. function initMap() { 
  25.   // Create the map. 
  26.   var map = new google.maps.Map(document.getElementById('map'), { 
  27.     zoom: 4, 
  28.     center: {lat: 37.090, lng: -95.712}, 
  29.     mapTypeId: google.maps.MapTypeId.TERRAIN 
  30.   }); 
  31.  
  32.   // Construct the circle for each value in citymap. 
  33.   // Note: We scale the area of the circle based on the population. 
  34.   for (var city in citymap) { 
  35.     // Add the circle for this city to the map. 
  36.     var cityCircle = new google.maps.Circle({ 
  37.       strokeColor: '#FF0000'
  38.       strokeOpacity: 0.8, 
  39.       strokeWeight: 2, 
  40.       fillColor: '#FF0000'
  41.       fillOpacity: 0.35, 
  42.       map: map, 
  43.       center: citymap[city].center, 
  44.       radius: Math.sqrt(citymap[city].population) * 100 
  45.     }); 
  46.   } 
  47. }   

2. 移除園

如需移除地圖中的圓,請調(diào)用 setMap() 方法,并傳遞 null 作為其自變量。

  1. circle.setMap(null); 

請注意,以上方法不會刪除圓,而只是從地圖中移除圓。如果您實(shí)際上是想刪除圓,則應(yīng)先將其從地圖中移除,然后將圓本身設(shè)置為 null。

可由用戶編輯和拖動的形狀

將形狀設(shè)置為可編輯會給形狀添加手柄,用戶可以利用手柄直接在地圖上對形狀進(jìn)行位置調(diào)整、重新塑形和尺寸調(diào)整。您還可以將形狀設(shè)置為可拖動,以便用戶將其移至地圖上的其他地點(diǎn)。

用戶對對象做出的更改無法跨會話存留。如果您想保存用戶的編輯,必須自行采集和存儲信息。

1. 將形狀設(shè)置為可編輯

可通過在形狀的選項中將 editable 設(shè)置為 true,將任何形狀(多段線、多邊形、圓和矩形)設(shè)置為可由用戶編輯。

2. 將形狀設(shè)置為可拖動

默認(rèn)情況下,在地圖上繪制的形狀位置固定。如需允許用戶將形狀拖動到地圖上的其他位置,請在形狀的選項中將 draggable 設(shè)置為true。

3. 偵聽編輯事件

編輯形狀時,會在編輯完成時觸發(fā)事件。下面列出了這些事件。 

形狀 事件
radius_changed、center_changed
多邊形 insert_at、remove_at、set_at,必須在多邊形的路徑上設(shè)置偵聽器,如果多邊形有多個路徑,必須在每個路徑上設(shè)置偵聽器
多段線 insert_at、remove_at、set_at,必須在多段線的路徑上設(shè)置偵聽器
矩形 bounds_changed

一些相關(guān)的代碼段:

  1. google.maps.event.addListener(circle, 'radius_changed'function() { 
  2.   console.log(circle.getRadius()); 
  3. }); 
  4.  
  5. google.maps.event.addListener(outerPath, 'set_at'function() { 
  6.   console.log('Vertex moved on outer path.'); 
  7. }); 
  8.  
  9. google.maps.event.addListener(innerPath, 'insert_at'function() { 
  10.   console.log('Vertex removed from inner path.'); 
  11. }); 
  12.  
  13. google.maps.event.addListener(rectangle, 'bounds_changed'function() { 
  14.   console.log('Bounds changed.'); 
  15. });  

4. 偵聽拖動事件

拖動形狀時,會在拖動操作開始和結(jié)束時以及拖動期間觸發(fā)事件。對于多段線、多邊形、圓和矩形,將會觸發(fā)下列事件。

事件 說明
dragstart 當(dāng)用戶開始拖動形狀時觸發(fā)
drag 在用戶拖動形狀期間反復(fù)觸發(fā)
dragend 當(dāng)用戶停止拖動形狀時觸發(fā)
責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2012-09-18 13:13:17

2011-11-02 17:31:58

Maps API

2011-10-28 10:04:18

API

2013-05-31 10:33:51

2012-12-18 09:51:53

谷歌地圖蘋果地圖

2012-06-12 09:50:13

蘋果WWDC地圖

2012-12-14 09:31:19

谷歌地圖蘋果

2009-05-26 16:39:49

2011-09-29 11:00:54

百度地圖API

2011-11-30 15:51:57

2011-05-07 09:21:47

必應(yīng)地圖iOS谷歌地圖

2013-04-26 10:26:08

2014-12-08 12:50:24

Android AutGoogle

2010-09-02 09:34:47

谷歌地圖付費(fèi)Logo

2012-05-16 18:21:27

2011-09-16 10:37:42

地圖API

2011-10-21 09:11:41

百度地圖API

2009-09-27 09:54:59

Google Site

2011-06-02 10:43:00

地圖WWDC蘋果

2012-08-08 09:53:20

蘋果谷歌地圖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 一区二区三区视频在线观看 | 天天综合操 | 黄色国产| 啪啪av| 狠狠狠色丁香婷婷综合久久五月 | 久久综合九色综合欧美狠狠 | 欧美一区二区久久 | 一区二区三区视频在线免费观看 | 久久综合一区二区 | 日韩不卡视频在线观看 | 亚洲成人网在线 | 亚洲黄色一区二区三区 | 久久久av一区 | 久久久久久天堂 | www.日韩 | 国产精品成人一区二区三区夜夜夜 | 亚洲精品免费在线观看 | 国产h视频 | 91免费看片| 日韩成人在线视频 | 国产一区二区三区免费视频 | 日韩成人| 一级二级三级黄色 | 亚洲国产精品视频 | 欧美一区不卡 | 九九热精品视频 | 欧美日韩在线一区二区三区 | 日韩成人av在线 | 91视视频在线观看入口直接观看 | 亚洲免费在线观看视频 | 国产精品中文字幕在线 | 丝袜美腿一区二区三区 | 久久天堂 | 在线天堂免费中文字幕视频 | 91精品国产91久久久久久最新 | 日韩中文字幕 | 亚洲高清成人 | 亚洲日韩中文字幕一区 | www.日韩 | 久久人 | av大片在线观看 |