如何在 Java 中使用谷歌地理编码?

Posted

技术标签:

【中文标题】如何在 Java 中使用谷歌地理编码?【英文标题】:how to use google Geocoding in java? 【发布时间】:2012-09-23 05:38:56 【问题描述】:

我正在为我的项目开发一项功能,当用户输入“邮政编码”时,应显示相应“邮政编码”的坐标(纬度、经度)。实施平台是'JAVA'。

我用谷歌搜索了 java api,但没有找到任何特定的资源。

任何建议都将不胜感激

【问题讨论】:

【参考方案1】:

这方面的文档对新用户不友好。对我来说,Java 文档效果最好,尽管它们非常严格:https://www.javadoc.io/doc/com.google.maps/google-maps-services/latest/com/google/maps/GeocodingApiRequest.html

以下是使用最新的 Google 地理编码 API 的方法:

//use your google api key to create a GeoApiContext instance
GeoApiContext context = new GeoApiContext.Builder().apiKey("xxxxxx").build();

//this will get geolocation details via zip 
GeocodingResult[]results = GeocodingApi.newRequest(context).components(ComponentFiler.postalCode("75002")).await(); 
System.out.println(results[0]);

//this will get geolocation details via address 
GeocodingResult[] results2 = GeocodingApi.geocode(context, "One Apple Park Way Cupertino, CA 95014").await();
System.out.println(results2[0]);

//another way to get geolocation details via address 
GeocodingResult[] results3 = GeocodingApi.newRequest(context).address("One Apple Park Way Cupertino, CA 95014").await();
System.out.println(results3[0]);

//geolocation details via lat lng 
GeocodingResult[] results4 = GeocodingApi.newRequest(context).latlng(latLng).await(); 
System.out.println(results4[0]);           

从那里您将在结果数组中的返回位置上获得一堆数据,您可以根据需要对其进行解析,以提取您选择的数据。继承人的数据是什么样子的前....

[GeocodingResult placeId=ChIJyTSQVXm0j4ARmdUQoA1BpwQ [Geometry: 37.31317000,-122.07238160 (APPROXIMATE) bounds=[37.34159500,-121.99557710, 37.24799500,-122.14382300], viewport=[37.34159500,-121.99557710, 37.24799500,-122.14382300]], formattedAddress=MONTE VISTA, CA 95014, USA, types=[postal_code], addressComponents=[[AddressComponent: "95014" ("95014") (postal_code)], [AddressComponent: "MONTE VISTA" ("MONTE VISTA") (locality, political)], [AddressComponent: "Santa Clara County" ("Santa Clara County") (administrative_area_level_2, political)], [AddressComponent: "California" ("CA") (administrative_area_level_1, political)], [AddressComponent: "United States" ("US") (country, political)]], postcodeLocalities=[Cupertino, MONTE VISTA, Permanente]]

【讨论】:

【参考方案2】:

这是一种方法(包括源代码): http://halexv.blogspot.mx/2015/07/java-geocoding-using-google-maps-api.html

该博客解释了如何在没有 API_KEY 的情况下执行此操作,以及一种将位置过滤为最可能的位置的方法。

试一试。

【讨论】:

【参考方案3】:

您也可以(现在)查看用于地理编码、方向、距离矩阵、高程和时区的开源 Java 客户端库:https://github.com/googlemaps/google-maps-services-java

【讨论】:

【参考方案4】:

这很简单。例如。看看this class的地理编码方法。将您的邮政编码(以及国家/地区)传递给该方法,您应该没问题。 (GLatLng 类可以在here 找到,但应该由您根据需要替换。)

[编辑] 我刚刚看到这个例子仍然使用Google Maps v2,但是将它转换为v3应该是轻而易举的事。 在链接的文件中,您还可以找到有关使用此服务的限制(“使用限制”段落)

【讨论】:

非常感谢您的回答,要测试结果,我需要任何许可表格“Google”吗? 会四处走动并说以“它非常直接”开始你的答案不是最好的方法【参考方案5】:

您可以尝试为Google geocoding API RESTful Web 服务编写一个 REST 客户端(例如使用 Apache HttpClient)。

【讨论】:

以上是关于如何在 Java 中使用谷歌地理编码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中使用反向谷歌地理编码?

谷歌反向地理编码 - 如何捕捉到最近的完整邮政编码

谷歌地理编码 SSL 握手异常

如何在信息窗口中显示我的地理编码地址?谷歌地图 API

如何从谷歌地图地理编码返回地址类型?

没有谷歌如何反转地理编码? [关闭]