如何在android中获取城市名称的经纬度?

时间:2012-04-04 09:08:22

标签: android google-maps geocoding

在我的应用程序中,我将默认值设置为latitudelongitude。 当我输入cityname in edittext时,我需要将该点移动到我需要的地方

4 个答案:

答案 0 :(得分:3)

使用以下代码获取城市名称的纬度和长度

String location=cityName;
String inputLine = "";
String result = ""
location=location.replaceAll(" ", "%20");
String myUrl="http://maps.google.com/maps/geo?q="+location+"&output=csv";
try{
 URL url=new URL(myUrl);
 URLConnection urlConnection=url.openConnection();
 BufferedReader in = new BufferedReader(new 
 InputStreamReader(urlConnection.getInputStream()));
  while ((inputLine = in.readLine()) != null) {
  result=inputLine;
  }
  String lat = result.substring(6, result.lastIndexOf(","));
  String longi = result.substring(result.lastIndexOf(",") + 1);
 }
 catch(Exception e){
 e.printStackTrace();
 }

答案 1 :(得分:1)

我的建议是使用Google GeoCoding REST API,而不是Geocoder。

因为我曾经在我的国家中国使用它,所以我在下面有一个错误:

"java.io.IOException: Service not Available"
搜索后,似乎

"The Geocoder class requires a backend service that is not included in the core android              framework. The Geocoder query methods will return an empty list if there no backend service in the platform. Use the isPresent() method to determine whether a Geocoder implementation    exists."

所以我转向使用Google GeoCoding REST API,这很简单,只需要这样的请求:

http://maps.googleapis.com/maps/api/geocode/json?address=NewYork&sensor=false

你会得到一个有地理位置的json。 你也可以通过它从本地获得地址:

http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

如果你能读中文,我有一个关于此的博客,请查看:     http://wangchao.de/android%E5%88%A9%E7%94%A8google-geocoding-api%E6%9B%BF%E4%BB%A3geocoder-%E8%A7%A3%E5%86%B3%E5%9C%B0%E5%9D%80%E8%AF%AD%E8%A8%80%E9%97%AE%E9%A2%98

答案 2 :(得分:0)

使用Geocoder类。

Geocode gc = new Geocoder();
List<Address> ads = gc.getFromLocationName(cityName,maxResults);

来自文档:

  

用于处理地理编码和反向地理编码的类。地理编码是将街道地址或位置的其他描述转换为(纬度,经度)坐标的过程。反向地理编码是将(纬度,经度)坐标转换为(部分)地址的过程。反向地理编码位置描述中的详细信息量可能会有所不同,例如,一个可能包含最近建筑物的完整街道地址,而另一个可能只包含城市名称和邮政编码。 Geocoder类需要一个未包含在核心android框架中的后端服务。如果平台中没有后端服务,则Geocoder查询方法将返回空列表。使用isPresent()方法确定是否存在Geocoder实现。

答案 3 :(得分:0)

尝试获取cityname的GeoPoint

GeoPoint startGP = new GeoPoint(
                (int) (Double.parseDouble(cityname.getText()) * 1E6));

然后,您可以使用以下代码从GeoPoint获取经度和纬度。

 Double.toString((double)startGP.getLatitudeE6() / 1E6),
 Double.toString((double)dest.getLongitudeE6() / 1E6)