使用谷歌地图api,需要注册一个谷歌账号,并创建一个你的项目,在项目中开通你所需要的api。
谷歌地图api网址:https://cloud.google.com/maps-platform/?hl=zh-CN 具体的注册和开通在这就不做描述了,网上搜索既有。
谷歌api库:https://console.cloud.google.com/apis/library?folder=&organizationId=&project=virtual-core-212801
在这里,有所有谷歌开放的api接口详细描述和接口文档。
其中涉及到谷歌地图的有15中。在这里我们选择其中一个作为示例。
首先需要将Geocoding API接口起用。并获取ak。
该api 的功能是:将地址转换为地理坐标(地理编码),您可以使用它来放置标记或定位地图。这个API还允许您将地理坐标转换成地址(反向地理编码)。
{
"results" : [
{
"address_components" : [
{
"long_name" : "东城区",
"short_name" : "东城区",
"types" : [ "political", "sublocality", "sublocality_level_1" ]
},
{
"long_name" : "北京市",
"short_name" : "北京市",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "中国",
"short_name" : "CN",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "中国北京市东城区",
"geometry" : {
"location" : {
"lat" : 39.9087202,
"lng" : 116.3974799
},
"location_type" : "GEOMETRIC_CENTER",
"viewport" : {
"northeast" : {
"lat" : 39.91006918029149,
"lng" : 116.3988288802915
},
"southwest" : {
"lat" : 39.90737121970849,
"lng" : 116.3961309197085
}
}
},
"place_id" : "ChIJ2XRD3Jh2YzYRmjlIoYPLKGk",
"plus_code" : {
"compound_code" : "W95W+FX 中国北京市东城区",
"global_code" : "8PFRW95W+FX"
},
"types" : [ "establishment", "point_of_interest" ]
},
{
"address_components" : [
{
"long_name" : "东城区",
"short_name" : "东城区",
"types" : [ "political", "sublocality", "sublocality_level_1" ]
},
{
"long_name" : "北京市",
"short_name" : "北京市",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "中国",
"short_name" : "CN",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "中国北京市东城区",
"geometry" : {
"location" : {
"lat" : 39.9054895,
"lng" : 116.3976317
},
"location_type" : "GEOMETRIC_CENTER",
"viewport" : {
"northeast" : {
"lat" : 39.9068384802915,
"lng" : 116.3989806802915
},
"southwest" : {
"lat" : 39.9041405197085,
"lng" : 116.3962827197085
}
}
},
"place_id" : "ChIJ2XRD3Jh2YzYRE1lUrcku6io",
"plus_code" : {
"compound_code" : "W94X+53 中国北京市东城区",
"global_code" : "8PFRW94X+53"
},
"types" : [ "establishment", "point_of_interest" ]
}
],
"status" : "OK"
}
这其中就包括我们想要的数据:“geometry”经纬度,并且还有地址描述信息,比如:“address_components” 从按照等级描述了北京天安门的行政地理信息,中国-北京市-东城区。以及“formatted_address”格式化好的信息 “formatted_address” : “中国北京市东城区”。
通常我们需要在后台进行地址数据处理来获取经纬度或者其他地理信息,那么这时候问题来了。由于政治上的一些原因后台无法访问到接口,面对这个问题, 我也是搜遍了网上的资料和方法。最终找到了解决办法,那就是将原来的接口域名https://maps.googleapis.com 改为 https://ditu.google.cn,那么我们上边的接口改为 https://ditu.google.cn/maps/api/geocode/json?address=北京天安门&key=你的ak。我们来测试下:
效果和第一次一样。
下边放到java后台代码中进行测试:
public static String getLngLat(String address) {
String code = HttpClientUtil.doGet("https://ditu.google.cn/maps/api/geocode/json?address=" + address
+ "&key=你的ak");
com.alibaba.fastjson.JSONObject jsonObjectOri = com.alibaba.fastjson.JSONObject.parseObject(code);
// 获取解析状态
String status = jsonObjectOri.getString("status");
if (status == "OK" || "OK".equals(status)) {// 解析的地址不为空时 进行值的获取
JSONObject results = (JSONObject) jsonObjectOri.getJSONArray("results").get(0);
JSONObject geometry = JSONObject.parseObject(results.getString("geometry"));
JSONObject lng_lat = JSONObject.parseObject(geometry.getString("location"));
String lng = lng_lat.getString("lng");
String lat = lng_lat.getString("lat");
String lngLat = lat + "," + lng;
return "获取成功!"+address+"的经纬度信息为:"+lngLat;
}
return "获取失败!";
}