• 基于Android的百度地图实现输入地址返回经纬度信息


    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;

     

  • 相关阅读:
    Java对象序列化/反序列化的注意事项
    初尝Java序列化/反序列化对象
    Java的byte数组
    在C#或者SWT上跨进程访问SWT控件的问题
    Enum实现单例模式
    看个泛型的例子
    构造器优化需要多个构造器的类(建造者模式)
    线程间操作无效: 从不是创建控件的线程访问它.
    SWT中的多线程(Invalid thread access)
    读书笔记 --腾讯传
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/8515585.html
Copyright © 2020-2023  润新知