java 从谷歌地图api检索坐标
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6236017/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Retrieve Coordinates from google maps api
提问by molleman
I have a list of addresses, i now want to retrieve their longitudes and latitudes. i would like to use the google maps api through java. How would i go about retrieving just one set of co-ords for one address. (cause i could then easily implement for multiple)
我有一个地址列表,我现在想检索它们的经度和纬度。我想通过java使用谷歌地图api。我将如何仅检索一个地址的一组坐标。(因为我可以轻松实现多个)
回答by Pit
You may also use the Google Geocoder Java API GeoGooglelike this:
您也可以像这样使用 Google Geocoder Java API GeoGoogle:
// Initialize a new GeoAddressStandardizer-class with your API-Key
GeoAddressStandardizer st = new GeoAddressStandardizer(apikey);
// Get a list of possible matching addresses
List<GeoAddress> addresses = st.standardizeToGeoAddresses(address);
// Get the first address (like you posted above)
GeoAddress address = addresses.get(0);
// Get the coordinates for the address
GeoCoordinate coords = address.getCoordinate();
// Longitude
double longitude = coords.getLongitude();
// Latitude
double latitude = coords.getLatitude();
回答by Muhammad Zeeshan
You can use this Google API
您可以使用此Google API
回答by molleman
This is how i did it in the end
这就是我最终做到的
public static String getCordinates(String address,String county) throws IOException, ParserConfigurationException, SAXException{
String thisLine;
address = address.replace(",", "+");
address = address.replace(" ", "+");
county = county.replace(" ", "");
String fullAddress = address+"+"+county;
System.out.println(fullAddress);
URL url = new URL("http://maps.google.com/maps/geo?q="+fullAddress+"&output=xml&key=ABQIAAAANGTAqDyDam_07aWkklK2NBSD41w" +
"X8VhCBpuiDVjGbFNuXE31lhQB8Gkwy-wmYbmaHIbJtfnlR9I_9A");
BufferedReader theHTML = new BufferedReader(new InputStreamReader(url.openStream()));
FileWriter fstream = new FileWriter("url.xml");
BufferedWriter out = new BufferedWriter(fstream);
while ((thisLine = theHTML.readLine()) != null)
out.write(thisLine);
out.close();
File file = new File("url.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
NodeList nl = doc.getElementsByTagName("code");
Element n = (Element)nl.item(0);
String st = n.getFirstChild().getNodeValue();
if (st.equals("200"))
{
NodeList n2 = doc.getElementsByTagName("coordinates");
Element nn = (Element)n2.item(0);
String st1 = nn.getFirstChild().getNodeValue();
return st1;
}
else
{
return null;
}
}
回答by Eyal Sooliman
Using API with restAssurd is an easy way:
将 API 与 restAssurd 结合使用是一种简单的方法:
public static String[] getCoordinates(String address, String county) throws IOException, ParserConfigurationException, SAXException {
address = address.replace(",", "+");
address = address.replace(" ", "+");
county = county.replace(" ", "");
String fullAddress = address+"+"+county;
System.out.println(fullAddress);
URL url = new URL("http://maps.google.com/maps/api/geocode/json?address="+fullAddress+"&sensor=false");
Response res = given().
when().
get(url);
JsonPath jp = new JsonPath(res.asString());
String lat = jp.get("results.geometry.location.lat").toString();
String lng = jp.get("results.geometry.location.lng").toString();
String[] location = new String[2];
location[0] = lat;
location[1] = lng;
return location;
}