首页 文章

如何在不使用谷歌 Map 的情况下获取特定城市或街道的纬度和经度?

提问于
浏览
6

如何在不使用谷歌 Map 的情况下获取特定城市或街道或位置的纬度和经度?例如,用户输入的城市名称是“Chennai”,我只需要显示该城市的纬度和经度 . 这该怎么做?

4 回答

  • 2

    在维基百科页面查看Obtaining geographic coordinates

  • 2

    这称为地理编码,需要将地名与纬度和经度相匹配 .

    您可以将已知的地名/纬度列表编码到您的应用程序中,在运行时读取它们并在需要时搜索它们,或者您可以使用在线地理编码服务,例如this one from Yahoothis one from Google .

  • 1

    Google提供反向地理编码 - 请通过this链接

    另外例如下面的web服务给出了参数中提供的lat long的地址,但是hte的响应是在json中,参见this link

    如果你想在xml中获得响应,请检查here

  • 10

    我遇到了同样的问题..最后我通过从服务器端获取lat long来修复它 . This link包含从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;
    
    
        }
    

相关问题