2013-08-02 39 views
0

我想寫一些從地址獲取位置的java代碼。 (不適用於Android環境)。什麼是獲取經由谷歌在java地址的經度和緯度的最佳方式

如果可能,只要Google以某種方式提供地理位置服務,我希望它是永久性的。

我想我不能說谷歌的JavaScript地理定位apis使用永久URL來做到這一點,因爲API的對象是來自谷歌服務器在運行時。

但我認爲Android可能會使用永久性URL來實現這一點,因爲Google無法更改設備獲取地理位置服務的所有設備的網址。

我錯了嗎? 有沒有解決Google政策的方針?

在此先感謝。

回答

1

如果你正在考慮使用谷歌的地理編碼那麼這個東西將是對你有用:

地址解析API請求必須是以下形式:

http://maps.googleapis.com/maps/api/geocode/output?parameters

其中輸出可以是以下值之一:

json (recommended) indicates output in JavaScript Object Notation (JSON) 
xml indicates output as XML 

要訪問地址解析API通過HTTPS使用:

https://maps.googleapis.com/maps/api/geocode/output?parameters

HTTPS建議,其中包括敏感的用戶數據,例如用戶的位置,在請求中。

無論哪種情況,都需要某些參數,而有些參數是可選的。按照URL中的標準,所有參數均使用&符號(&)字符分隔。參數列表及其可能的值列舉如下。

必需的參數

for Business用戶
address — The address that you want to geocode. 
    or 
latlng — The textual latitude/longitude value for which you wish to obtain the closest, human-readable address. See Reverse Geocoding for more information. 
    or 
components — A component filter for which you wish to obtain a geocode. See Component Filtering for more information. The components filter will also be accepted as an optional parameter if an address is provided. 
sensor — Indicates whether or not the geocoding request comes from a device with a location sensor. This value must be either true or false. 

地圖API必須包括與他們的地址解析請求有效的客戶端和簽名的參數。有關更多信息,請參閱Maps API for Business Web服務。

可選參數

bounds — The bounding box of the viewport within which to bias geocode results more prominently. This parameter will only influence, not fully restrict, results from the geocoder. (For more information see Viewport Biasing below.) 
language — The language in which to return results. See the list of supported domain languages. Note that we often update supported languages so this list may not be exhaustive. If language is not supplied, the geocoder will attempt to use the native language of the domain from which the request is sent wherever possible. 
region — The region code, specified as a ccTLD ("top-level domain") two-character value. This parameter will only influence, not fully restrict, results from the geocoder. (For more information see Region Biasing below.) 
components — The component filters, separated by a pipe (|). Each component filter consists of a component:value pair and will fully restrict the results from the geocoder. For more information see Component Filtering, below. 

JSON輸出格式

在這個例子中,地址解析API請求對 「1600劇場百匯,山景,CA」 的查詢的JSON響應:

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false

我們已經將本例中的傳感器參數作爲變量true_or_false來強調您必須將此值明確地表示爲真或假。

該請求返回的JSON如下所示。請注意,實際的JSON可能包含較少的空白。您不應該對請求之間的空格數量或格式做出假設。

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "1600", 
       "short_name" : "1600", 
       "types" : [ "street_number" ] 
      }, 
      { 
       "long_name" : "Amphitheatre Pkwy", 
       "short_name" : "Amphitheatre Pkwy", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "Mountain View", 
       "short_name" : "Mountain View", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Santa Clara", 
       "short_name" : "Santa Clara", 
       "types" : [ "administrative_area_level_2", "political" ] 
      }, 
      { 
       "long_name" : "California", 
       "short_name" : "CA", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "United States", 
       "short_name" : "US", 
       "types" : [ "country", "political" ] 
      }, 
      { 
       "long_name" : "94043", 
       "short_name" : "94043", 
       "types" : [ "postal_code" ] 
      } 
     ], 
     "formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", 
     "geometry" : { 
      "location" : { 
       "lat" : 37.42291810, 
       "lng" : -122.08542120 
      }, 
      "location_type" : "ROOFTOP", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 37.42426708029149, 
        "lng" : -122.0840722197085 
       }, 
       "southwest" : { 
        "lat" : 37.42156911970850, 
        "lng" : -122.0867701802915 
       } 
      } 
     }, 
     "types" : [ "street_address" ] 
     } 
    ], 
    "status" : "OK" 
} 

下面是一些示例代碼,這將有助於你搶的緯度和經度:

public static void main(String[] args) { 

     try 
     { 
      URL url = new URL("http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false"); 
      URLConnection conn = url.openConnection();                  
      conn.connect(); 
      InputStreamReader isr = new InputStreamReader(conn.getInputStream()); 
      StringBuffer sbLocation = new StringBuffer(); 

      for (int i=0; i != -1; i = isr.read()) 
      { 
       sbLocation.append((char)i); 
      } 
      String getContent = sbLocation.toString().trim(); 
      if(getContent.contains("results")) 
      { 
       String temp = getContent.substring(getContent.indexOf("[")); 
       JSONArray JSONArrayForAll = new JSONArray(temp); 
       String lng = JSONArrayForAll.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").get("lng").toString(); 
       String lat = JSONArrayForAll.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").get("lat").toString(); 
       System.out.println(" Latitude : " + lat); 
       System.out.println(" Longitude : " + lng); 
      } 
     } 
     catch (MalformedURLException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
} 
+0

但是對於這一點,你將不得不使用JSON-LIB-x.x.jar –

相關問題