不废话,需求:输入一个地址,获取到它的经纬度,怎么办?

1、到高德开放平台申请,获取key

高德开放平台:https://lbs.amap.com/

 

 2、下载高德定位及地址搜索SDK:https://download.csdn.net/download/meixi_android/10845407

 

3、项目绑定高德SDK

1)配置key

     


 

(2)activity实现定位接口

implements AMapLocationListener 

//实现方法

@Overridepublic void onLocationChanged(AMapLocation aMapLocation) { }

(3)已知地址获取经纬度方法:
 

    private void getLatlon(String cityName){         GeocodeSearch geocodeSearch=new GeocodeSearch(this);        geocodeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {            @Override            public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {             }             @Override            public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {                 if (i==1000){                    if (geocodeResult!=null && geocodeResult.getGeocodeAddressList()!=null &&                            geocodeResult.getGeocodeAddressList().size()>0){                         GeocodeAddress geocodeAddress = geocodeResult.getGeocodeAddressList().get(0);                        double latitude = geocodeAddress.getLatLonPoint().getLatitude();//纬度                        double longititude = geocodeAddress.getLatLonPoint().getLongitude();//经度                        String adcode= geocodeAddress.getAdcode();//区域编码                         Log.e("lgq地理编码", geocodeAddress.getAdcode()+"");                        Log.e("lgq纬度latitude",latitude+"");                        Log.e("lgq经度longititude",longititude+"");                         Log.i("lgq","dddwww===="+longititude);                     }else {                        Toast.makeText(MainActivity.this,"地名出错",Toast.LENGTH_SHORT).show();//                        ToastUtils.show(context,"地址名出错");                    }                }            }        });         GeocodeQuery geocodeQuery=new GeocodeQuery(cityName.trim(),"29");        geocodeSearch.getFromLocationNameAsyn(geocodeQuery);      }

测试数据:

getLatlon("东莞市东城街道温塘横岭工业区二街38号");

结果:

12-12 13:51:52.555 21394-21394/com.tianxin.mapclient.liteapp E/lgq地理编码: 441900
12-12 13:51:52.555 21394-21394/com.tianxin.mapclient.liteapp E/lgq纬度latitude: 23.036034
12-12 13:51:52.556 21394-21394/com.tianxin.mapclient.liteapp E/lgq经度longititude: 113.816161
 

如果没有出现数据,看看            public void onGeocodeSearched(GeocodeResult geocodeResult, int i) 返回的i值是不是1008,如果是,说明你的appkey和你在高德地图申请的appkey不一样,注意编译的keyStore要和高德地图的一样。如果用Android studio 直接运行是用的Android studio自带的debug.keystore,它的默认位置在 $HOME/.android/debug.keystore,例如我的debug.keystore就在   C:\Users\devil\.android\debug.keystore  。再我们正式发布项目的时候是不能使用debug.keystore的。

 

4、计算两个坐标的距离

LatLng latLng2=new LatLng(23.025845,113.752532);LatLng latLng=new LatLng(23.025845,113.772532);float distance = AMapUtils.calculateLineDistance(latLng,latLng2);float qianmifload =(float) distance/1000;Log.i("lgq","sss===="+round(qianmifload,2)+" 千米");

四舍五入到两位小数

public static float round(float v, int scale)
{
    if (scale < 0)
        throw new IllegalArgumentException("The scale must be a positive integer or zero");
    BigDecimal bgNum1 = new BigDecimal(Float.toString(v));
    BigDecimal bgNum2 = new BigDecimal("1");
    return bgNum1.divide(bgNum2, scale, BigDecimal.ROUND_HALF_UP).floatValue();
    // return b.setScale(scale, BigDecimal.ROUND_HALF_UP).floatValue();
}
 

 

以后都只会写这种有深度的文章了,不会像之前写一些Android 控件,系统api的使用这些简单的内容。因为写了很多,不仅没有对技术提升有帮助,还浪费了很多时间。

 

 

更多相关文章

  1. android crash 调试
  2. *.android.com上不去的解决方法
  3. UI框架之SmartTabLayout使用
  4. Android集成百度定位SDK实现获取定位地址
  5. Nexus s Android(安卓)4.1.1 通过USB共享Ubuntu网络
  6. 自己编写的android站长工具
  7. Android(安卓)- 比较版本号大小、安装apk、获取设备唯一标识、获
  8. 使用国内镜像加速下载Android(安卓)SDK
  9. Android(安卓)百度地图经纬度转换成地址

随机推荐

  1. android:layout_gravity和android:gravit
  2. 学习培训Android软件工程师之不归路
  3. Android关于分屏的知识总结
  4. android:layout_gravity 和 android:grav
  5. android:layout_gravity和android:gravit
  6. android:layout_gravity和android:gravit
  7. Android中android:layout_gravity和andro
  8. Android布局优化(四)X2C — 提升布局加载速
  9. Android的Actiovity组件
  10. 为什么说Android令人沮丧