1 解决方案一
此处解决办法参照自网友文章,对于输入的地址信息要求:城市名+具体地址名。
如果输入的地址信息只有具体地址名,而没有城市名,可能解析不出经纬度信息。还有就是解析出的经纬度再反向解析显示再地图上作为一个地标标记时,会有较明显的偏差,偏差的实际地理距离大概有一千米左右...,这是楼主自己实际上机运行检测的结果,不能完全肯定情况是否是这样,还有一点就是如果解析时可能会使应用出现闪退。我试验的结果,会闪退一次,第二次重新点开应用,才会出现正确的解析结果。
最后,说一下解析的经纬度坐标,最终的数字结果均要除以10的六次方(即1e6),要不然进行反向解析为地标时会报错。还有就是,如果在监听方法中同时解析多个地址,可能会一直闪退。所以,以下代码仅供参考。
具体实现方法:
public GeoPoint getGeoPointBystr(String str) { GeoPoint gpGeoPoint = null; if (str!=null) { Geocoder gc = new Geocoder(getActivity(), Locale.CHINA); List<Address> addressList = null; try { addressList = gc.getFromLocationName(str, 1); if (!addressList.isEmpty()) { Address address_temp = addressList.get(0); //计算经纬度 double Latitude=address_temp.getLatitude()*1E6; double Longitude=address_temp.getLongitude()*1E6; System.out.println("经度:"+Latitude); System.out.println("纬度:"+Longitude); //生产GeoPoint gpGeoPoint = new GeoPoint((int)Latitude, (int)Longitude); } } catch (IOException e) { e.printStackTrace(); } } return gpGeoPoint; }
调用上述方法解析出经纬度:
GeoPoint result = getGeoPointBystr("武汉市中南民族大学南三门"); Double num_latitude = (result.getLatitudeE6()) / 1e6; Double num_longitude = (result.getLongitudeE6()) / 1e6;