zoukankan      html  css  js  c++  java
  • 调用百度API返回经纬度

    后台调用百度API接口生成:

    import java.io.BufferedReader;

    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.HashMap;
    import java.util.Map;

    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    import net.sf.json.util.JSONTokener;
    /**
    * @Description: 调用百度公共接口获取经纬度
    * @ClassName: EntCoordSyncJob
    * @author 明
    * @date 2019年9月30日
    *
    */
    public class EntCoordSyncJob {
      static String AK = "Mwdez7V8QGg0hw3G1keqeoc7cgiktSx1"; // 百度地图密钥
      public static void main(String[] args) throws Exception {
        Map<String, String> lngAndLat = EntCoordSyncJob.getLngAndLat("大");
        System.out.println(lngAndLat);
      }
      public static Map<String,String> getLngAndLat(String address)throws Exception{
      Map<String,String> map=new HashMap<String, String>();
      String url = "http://api.map.baidu.com/geocoder?address="+address+"&output=json&ak="+AK+"";
      String json = loadJSON(url);
      JSONObject obj = JSONObject.fromObject(json);
      if(obj.get("status").toString().equals("OK")){

        Object typeObject = new JSONTokener(obj.get("result").toString()).nextValue();
        if(typeObject instanceof JSONArray) {
        map.put("error","请输入正确地址");
        return map;
      }
      if(typeObject instanceof JSONObject) {
        String lng=obj.getJSONObject("result").getJSONObject("location").getString("lng");
        String lat=obj.getJSONObject("result").getJSONObject("location").getString("lat");
          map.put("lng", lng);
          map.put("lat", lat);
        return map;
      }
    }else{
      map.put("error","请输入正确地址");
    }
      return map;
    }

    public static String loadJSON (String url)throws Exception {
      StringBuilder json = new StringBuilder();
    try {
      URL oracle = new URL(url);
      URLConnection yc = oracle.openConnection();
      BufferedReader in = new BufferedReader(new InputStreamReader(
      yc.getInputStream()));
      String inputLine = null;
      while ( (inputLine = in.readLine()) != null) {
      json.append(inputLine);
    }
      in.close();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
      return json.toString();
      }
    }

    通过 http://api.map.baidu.com/geocoder 和

     http://api.map.baidu.com/geocoding/v3/ 

    获取地址 “北京市顺义区金关北二街5号”的经纬度都是  {'lng': 116.87314337408223, 'lat': 40.175352148045754} --A

    而在 百度 “拾取坐标系统” http://api.map.baidu.com/lbsapi/getpoint/index.html 获取的经纬度却是:116.924888,40.196355 --B

    在“拾取坐标系统”里,用“坐标反查”在图上定位,A定的点不对,差了几公里;B 定位精准。

    5、百度坐标为何有偏移?

    国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。

    前端生成:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="百度地图,百度地图API,百度地图自定义工具,百度地图所见即所得工具" />
    <meta name="description" content="百度地图API自定义地图,帮助用户在可视化操作下生成百度地图" />
    <title>百度地图API自定义地图</title>
    <!--引用百度地图API-->
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Mwdez7V8QGg0hw3G1keqeoc7cgiktSx1"></script>
    </head>
    <body>
    <!--百度地图容器-->
    <div style="700px;height:550px;border:#ccc solid 1px;font-size:12px" id="map"></div>
    <p style="color:red;font-weight:600">地图生成工具基于百度地图JS api v2.0版本开发,使用请申请密匙。
    <a href="http://developer.baidu.com/map/index.php?title=jspopular/guide/introduction" style="color:#2f83c7" target="_blank">了解如何申请密匙</a>
    <a href="http://lbsyun.baidu.com/apiconsole/key?application=key" style="color:#2f83c7" target="_blank">申请密匙</a>
    </p>
    </body>
    <script type="text/javascript">
    //创建和初始化地图函数:
    function initMap(){
    createMap();//创建地图
    setMapEvent();//设置地图事件
    addMapControl();//向地图添加控件
    addMapOverlay();//向地图添加覆盖物
    }
    function createMap(){
    map = new BMap.Map("map");
    map.centerAndZoom(new BMap.Point(116.403874,39.914889),12);
    }
    function setMapEvent(){
    map.enableScrollWheelZoom();
    map.enableKeyboard();
    map.enableDragging();
    map.enableDoubleClickZoom()
    }
    function addClickHandler(target,window){
    target.addEventListener("click",function(){
    target.openInfoWindow(window);
    });
    }
    function addMapOverlay(){
    var markers = [
    {content:"我的备注",title:"我的标记",imageOffset: {0,height:3},position:{lat:39.917545,lng:116.406749}}
    ];
    for(var index = 0; index < markers.length; index++ ){
    var point = new BMap.Point(markers[index].position.lng,markers[index].position.lat);
    var marker = new BMap.Marker(point,{icon:new BMap.Icon("http://api.map.baidu.com/lbsapi/createmap/images/icon.png",new BMap.Size(20,25),{
    imageOffset: new BMap.Size(markers[index].imageOffset.width,markers[index].imageOffset.height)
    })});
    var label = new BMap.Label(markers[index].title,{offset: new BMap.Size(25,5)});
    var opts = {
    200,
    title: markers[index].title,
    enableMessage: false
    };
    var infoWindow = new BMap.InfoWindow(markers[index].content,opts);
    marker.setLabel(label);
    addClickHandler(marker,infoWindow);
    map.addOverlay(marker);
    };
    }
    //向地图添加控件
    function addMapControl(){
    var scaleControl = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});
    scaleControl.setUnit(BMAP_UNIT_IMPERIAL);
    map.addControl(scaleControl);
    var navControl = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
    map.addControl(navControl);
    var overviewControl = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:true});
    map.addControl(overviewControl);
    }
    var map;
    initMap();
    </script>
    </html>

    学着把生活的苦酒当成饮料一样慢慢品尝, 不论生命经过多少委屈和艰辛, 我们总是以一个朝气蓬勃的面孔, 醒来在每一个早上。
  • 相关阅读:
    c++0.9-----c++ primer之noexcept解读
    c++0.8-----快速定位c++源码位置的小技巧
    c++0.7-----源码分析:iostate及badbit/failbit/eofbit/goodbit以及io文件的包含关系<原创>
    c++0.6-----如何在自己搭建的c++环境中使用extern变量
    c++0.5-----如何在widows下面搭建最简洁的c++环境
    c++0.4-----面向对象的三种关系(继承/复合/委托)
    c++0.3----this指针/static/namespace
    c++0.2-----基于对象的类(包含指针)
    3、静态代理模式
    2、工厂方法模式
  • 原文地址:https://www.cnblogs.com/yhm9/p/11612694.html
Copyright © 2011-2022 走看看