Java谷歌地图将地址转换为坐标 2 周,6 日 Questions & Answers 775 我知道有一个JavaScript API用于将地址转换为坐标。 但是Java有这样的API吗 现在我正在手动输入坐标,但我想将其更改为标准地址输入,并将地址转换为坐标 谢谢是预付款
# 1 楼答案 也许这两节课会有帮助 /* * To change this template, choose Tools | Templates and open the template in * the editor. */ package jt_webrequest; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; /** * * @author Held */ public class GetGeoInfos { String straße_nr = ""; String plz_ort = ""; String land = ""; String address = ""; String latitude = ""; String longtitude = ""; String googleDoc = ""; Document xmlDoc = null; String google_LocationType = ""; String google_Latitude = ""; String google_Longtitude = ""; String google_Hnr_lang = ""; String google_Hnr_kurz = ""; String google_Straße_lang = ""; String google_Straße_kurz = ""; String google_Ortsteil_lang = ""; String google_Ortsteil_kurz = ""; String google_Ort_lang = ""; String google_Ort_kurz = ""; String google_Level3_lang = ""; String google_Level3_kurz = ""; String google_Level2_lang = ""; String google_Level2_kurz = ""; String google_Level1_lang = ""; String google_Level1_kurz = ""; String google_Land_lang = ""; String google_Land_kurz = ""; String google_PLZ_lang = ""; String google_PLZ_kurz = ""; boolean statusIO = true; // Alles gut gelaufen ? String errorText = "";// Fehlermeldung String tmp = ""; public GetGeoInfos(String _straße_nr, String _plz_ort, String _land) { // Ermitteln der Geodaten zu einer gegebenen Adresse PostRequest postRequest = new PostRequest(); straße_nr = _straße_nr; plz_ort = _plz_ort; land = _land; address = straße_nr + "," + plz_ort + "," + land; // System.out.println("GET_GEO_INOS - ADRESS ->" + address); } public GetGeoInfos(String _latitude, String _longtitude) { // Ermitteln der Geodaten zu einer gegebenen Adresse latitude = _latitude; longtitude = _longtitude; } public GetGeoInfos(String _address) { // Ermitteln der Geodaten zu einer gegebenen Adresse address = _address; // System.out.println("GET_GEO_INOS - ADRESS ->" + address); } public boolean doGetInfosfromAdress() { if (getGeoInfosGoogle(address) == true) { if (getGoogleValues() == false) { // Fehler beim Werte auselsen statusIO = false; } else { // Alles io statusIO = true; } } else { // FEHLER beim Request statusIO = false; } return statusIO; } public boolean doGetInfosfromLangLant() { if (getGeoInfosGoogle(latitude, longtitude) == true) { if (getGoogleValues() == false) { // Fehler beim Werte auselsen statusIO = false; } else { // Alles io statusIO = true; } } else { // FEHLER beim Request statusIO = false; } return statusIO; } private boolean getGeoInfosGoogle(String _latitude, String _longtitude) { boolean keinTreffer = false; GetRequest getRequest = new GetRequest(); getRequest.setURL("http://maps.googleapis.com/maps/api/geocode/xml"); getRequest.putData("latlng", _latitude + "," + _longtitude); getRequest.putData("sensor", "false"); try { getRequest.doSubmit(); String inputLine = ""; while (true) { inputLine = getRequest.getLine(); // Kein Treffer abbrechen if (inputLine.indexOf("ZERO_RESULTS") > -1) { keinTreffer = true; } if (inputLine.equals("NULL") == false) { googleDoc = googleDoc + inputLine + "\r\n"; } else { break; } } Writer writer = new StringWriter(); writer.write(googleDoc); //String result = writer.toString(); //System.out.println(result.toString()); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(writer.toString().trim())); xmlDoc = db.parse(is); if (keinTreffer == true) { return false; } else { return true; } } catch (Exception ex) { Logger.getLogger(Jt_WebRequest.class.getName()).log(Level.SEVERE, null, ex); statusIO = false; errorText = "getGeoInfosGoogle:\r\n\r\n" + errorText + ex.getMessage().toString() + "\r\n\r\n"; return false; } } private boolean getGeoInfosGoogle(String _address) { boolean keinTreffer = false; GetRequest getRequest = new GetRequest(); getRequest.setURL("http://maps.googleapis.com/maps/api/geocode/xml"); getRequest.putData("address", _address); getRequest.putData("sensor", "false"); try { getRequest.doSubmit(); String inputLine = ""; while (true) { inputLine = getRequest.getLine(); if (inputLine.indexOf("ZERO_RESULTS") > -1) { keinTreffer = true; } if (inputLine.equals("NULL") == false) { googleDoc = googleDoc + inputLine + "\r\n"; } else { break; } } Writer writer = new StringWriter(); writer.write(googleDoc); String result = writer.toString(); //System.out.println(result.toString()); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(writer.toString().trim())); xmlDoc = db.parse(is); if (keinTreffer == true) { return false; } else { return true; } } catch (Exception ex) { Logger.getLogger(Jt_WebRequest.class.getName()).log(Level.SEVERE, null, ex); statusIO = false; errorText = "getGeoInfosGoogle:\r\n\r\n" + errorText + ex.getMessage().toString() + "\r\n\r\n"; return false; } } public boolean getGoogleValues() { try { get_Latitude(); get_Longtitude(); get_LocationTpe(); get_AddressComponent(); return true; } catch (XPathExpressionException ex) { Logger.getLogger(GetGeoInfos.class.getName()).log(Level.SEVERE, null, ex); statusIO = false; errorText = "getGoogleValues:\r\n\r\n" + errorText + ex.getMessage().toString() + "\r\n\r\n"; return false; } } private void get_Latitude() throws XPathExpressionException { google_Latitude = getXpathValue(xmlDoc, "//GeocodeResponse/result/geometry/location/lat/text()"); } private void get_Longtitude() throws XPathExpressionException { google_Longtitude = getXpathValue(xmlDoc, "//GeocodeResponse/result/geometry/location/lng/text()"); } private void get_LocationTpe() throws XPathExpressionException { google_LocationType = getXpathValue(xmlDoc, "//GeocodeResponse/result/geometry/location_type/text()"); } private void get_AddressComponent() throws XPathExpressionException { for (int i = 0; i <= getXpathCount(xmlDoc, "//GeocodeResponse/result/address_component"); i++) { getXpathAddressComponentValues(xmlDoc, "//GeocodeResponse/result/address_component[" + i + "]/*/text()"); } } private void getXpathAddressComponentValues(Document doc, String strXpath) throws XPathExpressionException { XPath xPath = XPathFactory.newInstance().newXPath(); XPathExpression exprNodeName = xPath.compile(strXpath); String resultData = null; String long_name = ""; String short_name = ""; String type = ""; Object result4 = exprNodeName.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result4; int x = 0; for (int i = 0; i < nodes.getLength(); i++) { x = x + 1; resultData = nodes.item(i).getNodeValue(); if (x == 1) { long_name = resultData; } if (x == 2) { short_name = resultData; } if (x == 3) { type = resultData; } } mapAdressComponentValues(type, long_name, short_name); } public void mapAdressComponentValues(String _type, String _long_name, String _short_name) { if (_type.equals("street_number") == true) { google_Hnr_lang = _long_name; google_Hnr_kurz = _short_name; } if (_type.equals("route") == true) { google_Straße_lang = _long_name; google_Straße_kurz = _short_name; } if (_type.equals("sublocality") == true) { google_Ortsteil_lang = _long_name; google_Ortsteil_kurz = _short_name; } if (_type.equals("locality") == true) { google_Ort_lang = _long_name; google_Ort_kurz = _short_name; } if (_type.equals("administrative_area_level_3") == true) { google_Level3_lang = _long_name; google_Level3_kurz = _short_name; } if (_type.equals("administrative_area_level_2") == true) { google_Level2_lang = _long_name; google_Level2_kurz = _short_name; } if (_type.equals("administrative_area_level_1") == true) { google_Level1_lang = _long_name; google_Level1_kurz = _short_name; } if (_type.equals("country") == true) { google_Land_lang = _long_name; google_Land_kurz = _short_name; } if (_type.equals("postal_code") == true) { google_PLZ_lang = _long_name; google_PLZ_kurz = _short_name; } } private int getXpathCount(Document doc, String strXpath) throws XPathExpressionException { XPath xPath = XPathFactory.newInstance().newXPath(); XPathExpression expr = xPath.compile(strXpath); String resultData = null; Object result4 = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result4; return nodes.getLength(); } private String getXpathValue(Document doc, String strXpath) throws XPathExpressionException { XPath xPath = XPathFactory.newInstance().newXPath(); XPathExpression expr = xPath.compile(strXpath); String resultData = null; Object result4 = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result4; for (int i = 0; i < nodes.getLength(); i++) { resultData = nodes.item(i).getNodeValue(); } return resultData; } public boolean getStatusIO() { return statusIO; } public String getErrorText() { return errorText; } public String get_Google_Longtitude() { return google_Longtitude; } public String get_Google_Latitude() { return google_Latitude; } public String get_Google_LocationType() { return google_LocationType; } public String get_Google_Hnr_lang() { return google_Hnr_lang; } public String get_Google_Hnr_kurz() { return google_Hnr_kurz; } public String get_Google_Straße_lang() { return google_Straße_lang; } public String get_Google_Straße_kurz() { return google_Straße_kurz; } public String get_Google_Ortsteil_lang() { return google_Ortsteil_lang; } public String get_Google_Ortsteil_kurz() { return google_Ortsteil_kurz; } public String get_Google_Ort_lang() { return google_Ort_lang; } public String get_Google_Ort_kurz() { return google_Ort_kurz; } public String get_Google_Level3_lang() { return google_Level3_lang; } public String get_Google_Level3_kurz() { return google_Level3_kurz; } public String get_Google_Level2_lang() { return google_Level2_lang; } public String get_Google_Level2_kurz() { return google_Level2_kurz; } public String get_Google_Level1_lang() { return google_Level1_lang; } public String get_Google_Level1_kurz() { return google_Level1_kurz; } public String get_Google_Land_lang() { return google_Land_lang; } public String get_Google_Land_kurz() { return google_Land_kurz; } public String get_Google_PLZ_lang() { return google_PLZ_lang; } public String get_Google_PLZ_kurz() { return google_PLZ_kurz; } } /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package jt_webrequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Held */ public class GetRequest { String content = ""; String urlString = ""; BufferedReader in = null; public void putData(String _key, String _value) { try { if (content.equals("") == true) { content = content + URLEncoder.encode(_key, "UTF-8") + "=" + URLEncoder.encode(_value, "UTF-8"); } else { content = content + "&" + URLEncoder.encode(_key, "UTF-8") + "=" + URLEncoder.encode(_value, "UTF-8"); } } catch (UnsupportedEncodingException ex) { Logger.getLogger(GetRequest.class.getName()).log(Level.SEVERE, null, ex); } } public void setURL(String _value) { urlString = _value; } public void doSubmit() { try { // Make connection URL url = new URL(urlString + "?"+content); // System.out.println("GET" +" - " + url.toString()); URLConnection urlConnection = url.openConnection(); // Read the response in = new BufferedReader( new InputStreamReader(urlConnection.getInputStream())); } catch (Exception e) { } } public String getLine() throws IOException { String line; line = in.readLine(); if (line != null) { return line; } else { in.close(); return "NULL"; } } }
# 2 楼答案 Java中最好的地理定位开源库是now http://geo-google.sourceforge.net/index.html,基于google maps API(使用它只需要一个google maps API密钥) 几乎没有其他选择 1.http://jgeocoder.sourceforge.net/ 2.http://jgeocoder.svn.sourceforge.net/viewvc/jgeocoder/ 从http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz下载地理位置数据文件 将文件解压缩到任何文件夹中。然后做: LookupService cl = new LookupService("/var/geolite/GeoLiteCity.dat", LookupService.GEOIP_MEMORY_CACHE | LookupService.GEOIP_CHECK_CACHE); Location location = cl.getLocation("some ip address");
# 1 楼答案
也许这两节课会有帮助
# 2 楼答案
Java中最好的地理定位开源库是now http://geo-google.sourceforge.net/index.html,基于google maps API(使用它只需要一个google maps API密钥)
几乎没有其他选择 1.http://jgeocoder.sourceforge.net/ 2.http://jgeocoder.svn.sourceforge.net/viewvc/jgeocoder/
将文件解压缩到任何文件夹中。然后做:
# 3 楼答案
您需要通过构建URL、检索和解析响应来使用地理编码服务。这里有一个关于parse JSON in Java with geocoding as example的教程