高德坐标转百度坐标

public class GeoConvertUtil {
   
   private static final String BAIDU_AK = "EF06cfb26173665ad80b8edf6a328192";
   private static final String REQUEST_TO = "http://api.map.baidu.com/geoconv/v1/";


   /**
    * 高德坐标转换为百度坐标
    * @param geos 参数为JSONObject 内容为{"lng":"纬度坐标值","lat":"经度坐标值"}
    * @return
    */
   public static List<JSONObject> mapAbcToBaidu(List<JSONObject> geos){
      List<JSONObject> baiduCoords = new ArrayList<JSONObject>();
      int i = 1;
      List<JSONObject> coords = new ArrayList<JSONObject>();
      for(JSONObject coord : geos){
         coords.add(coord);
         if(i % 100 == 0){
            baiduCoords.addAll(coordConvert(coords));
            coords.clear();
         }
         i++;
      }
      if(coords.size() > 0){
         baiduCoords.addAll(coordConvert(coords));
      }
      return baiduCoords;
   }

   /**
    * 调用百度坐标转换API
    * 调用百度API
    * @param geos
    * @return
    */
   public static List<JSONObject> coordConvert(List<JSONObject> geos){
      //构造百度API使用的参数
      List<String[]> paramList = getParamList(geos);
      List<JSONObject> rgeos = new ArrayList<JSONObject>();
      try {
         HttpPostUtil post = new HttpPostUtil(REQUEST_TO);
         for(String[] param : paramList){
            post.addUrlParams(param[0], param[1]);
         }
         byte[] b = post.toGet();
         String result = new String(b);
         rgeos = parseResult(result);
      } catch (Exception e) {
         e.printStackTrace();
      }
      return rgeos;
   }

   /**
    * 构造百度坐标转换API参数
    * @param geos
    * @return
    */
   private static List<String[]> getParamList(List<JSONObject> geos){
      StringBuffer coords = new StringBuffer();
      int i = 0;
      for(JSONObject coord : geos){
         if(i > 0){
            coords.append(";");
         }
         coords.append(coord.optString("lng") + "," + coord.optString("lat"));
         i++;
      }
      List<String[]> paramList = new ArrayList<String[]>();
      paramList.add(new String[]{"coords", coords.toString()});
      //3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标
      paramList.add(new String[]{"from", "3"});
      //5:百度地图采用的经纬度坐标
      paramList.add(new String[]{"to", "5"});
      paramList.add(new String[]{"ak", BAIDU_AK});
      return paramList;
   }

   /**
    * 解析百度坐标转换API返回结果
    * @param result
    * @return
    */
   private static List<JSONObject> parseResult(String result){
      List<JSONObject> geos = new ArrayList<JSONObject >();
      JSONObject jo = JSONObject.fromObject(result);
      JSONArray ja = jo.getJSONArray("result");
      Iterator<JSONObject> it = ja.iterator();
      JSONObject c = null;
      JSONObject geo = null;
      while(it.hasNext()){
         c = it.next();
         geo = new JSONObject();
         geo.put("lng",c.getString("x"));
         geo.put("lat",c.getString("y"));
         geos.add(geo);
      }
      return geos;
   }

   /**
    * 测试坐标转换用main方法,也可用于手动转换
    * @param args
    */
   public static void main(String[] args) {
      List<JSONObject> geos = new ArrayList<JSONObject>();
      //geos.add(new String[]{"116.37375966825", "39.916532509995"});
      //geos.add(new String[]{"116.37495056905", "39.916548967599"});

      geos.add(JSONObject.fromObject("{'lng':'114.28460988824','lat':'30.620924336021'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.4134989786','lat':'31.186794727154'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.41450480698','lat':'31.179160332016'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.41615101277','lat':'31.174365860427'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.41247336894','lat':'31.17366677785'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.41451302126','lat':'31.16483485802'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.41871931172','lat':'31.166950574645'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.41904176354','lat':'31.164641350679'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.43412499371','lat':'31.165531664174'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.43410201768','lat':'31.164768898322'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.44503014655','lat':'31.166864246951'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.44746232396','lat':'31.168914731198'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45030219714','lat':'31.169441299021'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45266283443','lat':'31.170961262439'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45112919761','lat':'31.17233500696'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45231054304','lat':'31.172870155919'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45288855909','lat':'31.176164461144'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45194701991','lat':'31.17956299175'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45295812889','lat':'31.182337245676'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45704288176','lat':'31.184918526054'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.4641531664','lat':'31.187674123116'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45852506418','lat':'31.196937983189'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.46494920099','lat':'31.199218955344'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.46426133749','lat':'31.200809094106'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45651987328','lat':'31.200034889299'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.45564486414','lat':'31.201463164831'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.4447654891','lat':'31.197108328816'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.44309179067','lat':'31.200038150336'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.43694416761','lat':'31.19833349623'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.43433974265','lat':'31.196730909817'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.4318855214','lat':'31.192494306927'}"));
      geos.add(JSONObject.fromObject("{'lng':'121.42403737783','lat':'31.195162712013'}"));

      
      List<JSONObject> list = mapAbcToBaidu(geos);
      for(JSONObject arr : list){
         System.out.println("new BMap.Point(" + arr.optString("lng") + "," + arr.optString("lat") + ");");
      }
   }

}


你可能感兴趣的:(高德坐标转百度坐标)