如何在不使用谷歌地图的情况下获取特定城市或街道或位置的纬度和经度?例如,用户输入的城市名称是“Chennai”,我只需要显示该城市的纬度和经度。这该怎么做?
问问题
21799 次
4 回答
10
这称为地理编码,需要将地名与纬度和经度匹配。
您可以将已知的地名/纬度列表编码到您的应用程序中,在运行时读取它们并在需要时搜索它们,或者您可以使用在线地理编码服务,例如来自 Yahoo 的这个服务,或者来自 Google的这个服务.
于 2011-03-11T09:44:52.417 回答
2
检查在维基百科页面获取地理坐标
于 2011-03-11T07:21:20.100 回答
1
我遇到了同样的问题。最后我通过从服务器端获取 lat long 来修复它。 此链接包含从 java 获取 lat 和 long 的示例代码。希望它对某人有所帮助。
private static final String GEOCODE_REQUEST_URL = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&";
private static HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
String strLatitude;
String strLongtitude;
public void getLongitudeLatitude(String address) {
try {
StringBuilder urlBuilder = new StringBuilder(GEOCODE_REQUEST_URL);
if (StringUtils.isNotBlank(address)) {
urlBuilder.append("&address=").append(URLEncoder.encode(address, "UTF-8"));
}
final GetMethod getMethod = new GetMethod(urlBuilder.toString());
try {
httpClient.executeMethod(getMethod);
Reader reader = new InputStreamReader(getMethod.getResponseBodyAsStream(), getMethod.getResponseCharSet());
int data = reader.read();
char[] buffer = new char[1024];
Writer writer = new StringWriter();
while ((data = reader.read(buffer)) != -1) {
writer.write(buffer, 0, data);
}
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()));
Document doc = db.parse(is);
strLatitude = getXpathValue(doc, "//GeocodeResponse/result/geometry/location/lat/text()");
System.out.println("Latitude:" + strLatitude);
strLongtitude = getXpathValue(doc,"//GeocodeResponse/result/geometry/location/lng/text()");
System.out.println("Longitude:" + strLongtitude);
} finally {
getMethod.releaseConnection();
}
} catch (Exception e) {
e.printStackTrace();
}
}
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;
}
于 2012-05-04T09:17:30.543 回答