0

我正在尝试编写一些从地址获取位置的java代码。(不在android环境中。)

如果可能的话,只要谷歌以某种方式提供地理定位服务,我希望它是永久的方式。

我想我不能说 Google javascript geolocation apis 使用永久 URL 来做到这一点,因为 api 的对象在运行时来自 Google 服务器。

但是,我认为 Android 似乎有可能使用永久 URL 来执行此操作,因为 Google 无法更改设备获取地理位置服务的每个设备的 URL。

我错了吗?是否有任何针对它的 Google 政策?

提前致谢。

4

2 回答 2

1

如果您正在考虑使用 Google GeoCoding,那么这些东西将对您有用:

地理编码 API 请求必须采用以下形式:

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

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

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

要通过 HTTPS 访问地理编码 API,请使用:

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

对于请求中包含敏感用户数据(例如用户位置)的应用程序,建议使用 HTTPS。

在这两种情况下,某些参数是必需的,而某些参数是可选的。与 URL 中的标准一样,所有参数都使用与 (&) 字符分隔。下面列举了参数列表及其可能的值。

必需参数

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.

Maps API for Business 用户必须在其地理编码请求中包含有效的客户端和签名参数。有关详细信息,请参阅 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 Amphitheatre Parkway, Mountain View, CA”的查询的 json 响应:

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

我们在此示例中将传感器参数保留为变量 true_or_false,以强调您必须明确将此值设置为 true 或 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();
        }
}
于 2013-08-02T09:40:49.937 回答
1

您可以尝试使用 Google HTTP API 来获取地理编码和反向地理编码。

地理编码请求

地理编码 API 请求必须采用以下形式:

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

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

json(推荐)表示以 JavaScript Object Notation (JSON) 输出 xml 表示输出为 XML

点击此链接了解更多信息:https ://developers.google.com/maps/documentation/geocoding/

于 2013-08-02T09:03:03.737 回答