2009-05-05 333 views
80

我正在使用Google Maps API並添加了標記。現在我想在每個標記周圍添加10英里的半徑,這意味着在縮放時適當運行的圓圈。我不知道如何做到這一點,看起來並不常見。Google地圖中某點的繪製半徑

I found one example that looks good,你也可以看看Google Latitude。在那裏,他們使用半徑標記,就像我想要的那樣。

更新:谷歌縱橫使用縮放的an image,這將如何工作?

+0

在情況下,它是有用的,這樣的一個例子可以看出[這裏](http://www.freemaptools.com/radius-around-point.htm),完成與一個可拖動的半徑。 – 2013-09-29 13:02:46

回答

207

使用Google Maps API V3創建一個Circle對象,然後使用bindTo()將其綁定到Marker的位置(因爲它們都是google.maps.MVCObject實例)。

// Create marker 
var marker = new google.maps.Marker({ 
    map: map, 
    position: new google.maps.LatLng(53, -2.5), 
    title: 'Some location' 
}); 

// Add circle overlay and bind to marker 
var circle = new google.maps.Circle({ 
    map: map, 
    radius: 16093, // 10 miles in metres 
    fillColor: '#AA0000' 
}); 
circle.bindTo('center', marker, 'position'); 

你可以把它通過改變填充顏色,則strokeColor,strokeWeight,用於等(full API)看起來就像谷歌縱橫圈。

查看更多source code and example screenshots

+2

在Google地圖API中的「有趣的MVC對象」文章中還有一個很好的例子https://web.archive.org/web/20120312044803/http://code.google.com/apis/maps /articles/mvcfun.html – Johan 2012-02-24 15:31:58

10

看來,實現這一點的最常見方法是繪製一個帶有足夠點的GPolygon來模擬一個圓。您引用的示例使用此方法。 This page有一個很好的例子 - 在源代碼中查找功能drawCircle

+0

Hello @Chris B http://esa.ilmari.googlepages.com/circle.htm是一個很好的鏈接,但它在V2中完成,你能提供v3代碼嗎? – 2012-10-18 08:59:43

9

在球面幾何形狀由這些線之間的點,線和角度定義。你只有那些基本的價值觀才能使用。

因此,圓形(根據投影到球體上的形狀)必須用點來近似。點越多,它看起來就像一個圓圈越多。

話雖如此,認識到谷歌地圖是projecting the earth onto a flat surface(認爲「展開」地球和拉伸+展平,直到它看起來「方」)。如果你有一個平坦的座標系,你可以在其上繪製2D對象。

換句話說你可以在谷歌地圖上繪製縮放的矢量圓。問題在於,谷歌地圖不能直接提供給你(他們希望儘可能接近地理信息系統的價值)。他們只給你他們希望你用來近似一個圓的GPolygon。但是,this guy did it使用vml用於IE,svg用於其他瀏覽器(請參閱「SCALED CIRCLES」部分)。

現在,回到關於谷歌縱橫的問題,使用縮放的圓形圖像(這可能對您最有用):如果您知道圓的半徑永遠不會改變(例如,它總是在10英里左右點),那麼最簡單的解決方案是使用GGroundOverlay,這只是圖像url +圖像表示的GLatLngBounds。你需要做的唯一工作就是要求你代表10英里半徑的GLatLngBounds。一旦你有了這些,谷歌地圖API處理縮放您的圖像隨着用戶放大和縮小。

+6

很好的答案。 IOW意味着在其他語言和OOTB意味着開箱即用,那些需要像我一樣查看它的人。 – 2012-03-28 17:36:05

4

我已經在過去的這個問題,所以我書籤這discussion.

總結它,您可以:

  1. 看看這個circle filter的源代碼,並找出如何將其納入您的項目。
  2. 用足夠的點繪製一個GPolygon以模擬一個圓。
  3. 通過修改http://www.nearby.org.uk/google/circle.kml.php?radius=30miles&lat=40.173&long=-105.1024然後導入它來生成KML文件。在Google地圖中,您只需將URI粘貼到搜索框中即可在地圖上顯示。但我不確定如何使用API​​來做到這一點。
1

我剛纔寫了博客文章,解決的正是這種,它可能對你有用: http://seewah.blogspot.com/2009/10/circle-overlay-on-google-map.html

基本上,你需要創建一個正確的GLatLngBounds一個GGroundOverlay。棘手的問題在於根據所需的半徑計算圍繞該圓的這個想象方塊(GLatLngBounds)的西南角座標和東北角座標。數學相當複雜,但您可以在博客中引用getDestLatLng函數。其餘的應該很簡單。

2

對於API V3的解決方案,請訪問:

http://blog.enbake.com/draw-circle-with-google-maps-api-v3

它創建點周圍一圈,然後顯示和流出用不同的顏色範圍的標記。他們也計算動態半徑,但在你的情況下半徑是固定的,所以可能會減少工作量。

+1

頁面未找到,不幸的是。 – jsims281 2012-03-27 11:24:25