在我的应用程序中,我将默认值设置为latitude
and longitude
。当我键入时,cityname in edittext
我需要将该点移动到我需要的地方
4 回答
使用以下代码获取城市名称的经纬度
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();
}
我的建议是使用 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。您还可以通过它从 locaiton 获取地址:
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%A3地理编码器-%E8%A7%A3%E5%86%B3%E5%9C%B0%E5%9D%80%E8%AF%AD%E8%A8%80%E9%97%AE%E9% A2%98
尝试获取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)
使用地理编码器类。
Geocode gc = new Geocoder();
List<Address> ads = gc.getFromLocationName(cityName,maxResults);
从文档:
用于处理地理编码和反向地理编码的类。地理编码是将街道地址或位置的其他描述转换为(纬度、经度)坐标的过程。反向地理编码是将(纬度、经度)坐标转换为(部分)地址的过程。反向地理编码位置描述中的详细信息量可能会有所不同,例如,一个可能包含最近建筑物的完整街道地址,而另一个可能仅包含城市名称和邮政编码。Geocoder 类需要一个不包含在核心 android 框架中的后端服务。如果平台中没有后端服务,Geocoder 查询方法将返回一个空列表。使用 isPresent() 方法确定是否存在 Geocoder 实现。