2008-11-23 58 views
6

我在Google Maps API中遇到了一些問題;我想確定某個地方的LatLong(例如,從一個城市的名稱),然後將我的地圖集中在它上面。 LatLong部分正在工作,所以在該點上集中地圖。但是,我無法弄清楚如何確定一個好的縮放級別,當我只有這個單一點的時候。例如,當用戶輸入「俄羅斯」而不是「阿姆斯特丹」時會發生什麼情況,因此我不能只使用一些標準的縮放級別,而這些縮放級別在大多數情況下可能看起來不錯。一些幫助,將不勝感激:)在Google Maps API中確定單個LatLong的縮放級別

回答

1

我有同樣的問題,Nick Retallack的回答是對我有用的。爲了提供更多詳細信息,未記錄的屬性的名稱是「ExtendedData」,並且其中包含「LatLonBox」,其中包含適當縮放級別的北,南,東和西邊界。

舉例來說,如果你是做了 「90210」 搜索,這裏的輸出(我已經格式化的可讀性):

{ 
    "id":"p1", 
    "address":"Beverly Hills, CA 90210, USA", 
    "AddressDetails":{ 
     "Accuracy":5, 
     "Country":{ 
      "AdministrativeArea":{ 
       "AdministrativeAreaName":"CA", 
       "SubAdministrativeArea":{ 
        "Locality":{ 
         "LocalityName":"Beverly Hills", 
         "PostalCode":{"PostalCodeNumber":"90210"} 
        }, 
        "SubAdministrativeAreaName":"Los Angeles" 
       } 
      }, 
      "CountryName":"USA", 
      "CountryNameCode":"US" 
     } 
    }, 
 // This is what you're looking for 
    "ExtendedData":{ 
     "LatLonBox":{ 
      "north":34.13919, 
      "south":34.067018, 
      "east":-118.38971, 
      "west":-118.442796 
     } 
    }, 
"Point":{ 
     "coordinates":[-118.4104684,34.1030032,0] 
    } 
} 

這雖然沒有記錄,所以我不確定它是否能夠在API變更後繼續存在。最好不要認爲它會一直存在,並定義一些合理的默認縮放值。

1

您的問題缺少一個輸入參數。你說LatLon點,但實際上你需要LatLonBounds來做可用的地圖窗口大小的聚焦。我假設你想模仿谷歌地圖的官方行爲。除了地理編碼之外,他們還依賴於Gmap API無法訪問的其他數據。所以你必須提供你自己的。

1

下面的調用將會給你的縮放級別,如果你可以用適當的矩形邊界對象提供的:

GMap2.getBoundsZoomLevel(bounds) 

但如何計算的界限?

您可以使用地圖確定的「通過眼睛」的矩形手動註釋每個源記錄,並讓某人輸入值。

理想情況下,您需要數據,幸運的是在DBPedia上有大量的數據流失。

我的幾何和代數有點生疏,但有一點點,我相信你可以計算一個矩形給定你想查看的位置的區域。 (也許開始與平方根如果假設一個正方形的城市,或重新排列πR如果假設的圓形的一個)

Try out此查詢,以提取區域的面積。

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbpedia2: <http://dbpedia.org/property/> 
SELECT ?url, ?label, ?lat, ?long, ?area WHERE { 
    ?url geo:lat ?lat . 
    ?url geo:lat ?long . 
    ?url rdfs:label ?label . FILTER (lang(?label) = 'en') . 
    ?url dbpedia2:area ?area . FILTER (datatype(?area) = xsd:double) 
} LIMIT 10 

你需要緩存的結果或加載它們放入一個更快更多的本地數據源作爲DBpedia中被搜索非結構化數據(以及RDF數據)的三元組的數以百萬計。您可以從DBPedia購買download the Titles, Infobox and coordinates data sets並將它們加載到耶拿。請記住在加載期間關閉所有驗證選項:-)

您也可以使用RESTful API訪問此數據,該數據具有相當可用的Web表單,並且可以使用「複製下載鏈接按鈕」 Firefox下載窗口,或將輸出格式設置爲HTML。它也生成XML和JSON

不要忘記添加餘量不穩定型城市......

2

我剛纔問在谷歌IO這個問題。此功能存在,但沒有記錄,並且尚無訪問權限。你想要做的是得到Structured Address。檢查你找回的json結構並查找這些新參數。當我有機會嘗試這些時,我會發布更多信息。

0

您是否從地理編碼器獲取您的位置點?如果你是,你可以抓住點的準確性和變焦的基礎(更高的精度=更高的變焦)。

0

我有同樣的問題here,但有一個新的API版本。新的解決方案是map.fitBounds(autocomplete.getPlace().geometry.viewport);

相關問題