百度地图API

33 篇文章 0 订阅

api官网说明链接:

http://developer.baidu.com/map/webservice.htm


可用接口列举:

获取相关地址提示 place suggestion
http://api.map.baidu.com/place/v2/suggestion?query=水杉&region=成都&output=json&ak=42b8ececa9cd6fe72ae4cddd77c0da5d


 
获取坐标  geocoding 
            
http://api.map.baidu.com/geocoder?address=锦江区菱安路299号&output=json&key=42b8ececa9cd6fe72ae4cddd77c0da5d



http://api.map.baidu.com/place/v2/search?ak=42b8ececa9cd6fe72ae4cddd77c0da5d&output=json&query=蓝光coco金沙&page_size=10&page_num=0&scope=1&region=成都


{
    "status":0,
    "message":"ok",
    "total":2,
    "results":[
        {
            "name":"蓝光COCO金沙",
            "location":{
                "lat":30.687544,
                "lng":103.996691
            },
            "address":"西三环外金沙西源大道(IT大道旁)",
            "uid":"223992992c5ee7e0841541df"
        },
        {
            "name":"蓝光COCO金沙2期",
            "location":{
                "lat":30.681123,
                "lng":103.991123
            },
            "address":"青羊区金沙IT大道旁",
            "uid":"b7bb5abb1cd4982213293580"
        }
    ]
}


设施导航
http://api.map.baidu.com/place/v2/search?ak=42b8ececa9cd6fe72ae4cddd77c0da5d&output=json&query=图书馆&page_size=20&page_num=0&scope=2&region=成都




获取坐标接口直接在浏览器请求的结果如下:



新建一个类,代码如下:


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;


public class LocationUtil {

	private static final String BAIDU_APP_KEY = "42b8ececa9cd6fe72ae4cddd77c0da5d";
	
	/**
	 * 返回输入地址的经纬度坐标 key lng(经度),lat(纬度)
	 */
	public static Map<String, String> getLatitude(String address) {
		try {
			// 将地址转换成utf-8的16进制
			address = URLEncoder.encode(address, "UTF-8");
			// 如果有代理,要设置代理,没代理可注释
			// System.setProperty("http.proxyHost","192.168.172.23");
			// System.setProperty("http.proxyPort","3209");

			URL resjson = new URL("http://api.map.baidu.com/geocoder?address="
					+ address + "&output=json&key=" + BAIDU_APP_KEY);
			BufferedReader in = new BufferedReader(new InputStreamReader(
					resjson.openStream()));
			String res;
			StringBuilder sb = new StringBuilder("");
			while ((res = in.readLine()) != null) {
				sb.append(res.trim());
			}
			in.close();
			String str = sb.toString();
			System.out.println("return json:" + str);
			if(str!=null&&!str.equals("")){
				Map<String, String> map = null;
				int lngStart = str.indexOf("lng\":");
				int lngEnd = str.indexOf(",\"lat");
				int latEnd = str.indexOf("},\"precise");
				if (lngStart > 0 && lngEnd > 0 && latEnd > 0) {
					String lng = str.substring(lngStart + 5, lngEnd);
					String lat = str.substring(lngEnd + 7, latEnd);
					map = new HashMap<String, String>();
					map.put("lng", lng);
					map.put("lat", lat);
					return map;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String args[]) {
		
		Map<String, String> map = LocationUtil.getLatitude("成都 高新西区西区大道1398号");
		if (null != map) {
			System.out.println(map.get("lng"));
			System.out.println(map.get("lat"));
		}
	}
}


运行后得到结果:


web项目中嵌入百度地图


【1】地图初始化。

【2】根据坐标得到地址描述,并将地址描述,标注到地图中。

【3】GPS坐标转换为百度坐标。由于手机提供的是GPS坐标,所以需转换为百度坐标,才能使得地址标注正确。


[html]  view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>百度地图</title>  
  8. <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>  
  9. <script type="text/javascript" src="lib/map/baidu/convertor.js"></script>  
  10. </head>  
  11. <body>  
  12.   
  13.   
  14. <div style="width:800px;height:600px;border:1px solid gray" id="container"></div>  
  15. <script type="text/javascript">  
  16. var map = new BMap.Map("container");  // 创建地图实例  
  17. //var longitude=getUrlParam("longitude");//经度  
  18. //var latitude=getUrlParam("latitude");//纬度  
  19. var longitude="119.306667";//经度  
  20. var latitude="26.075208";//纬度  
  21. var point = new BMap.Point(longitude, latitude);  // 创建点坐标  
  22. map.centerAndZoom(point, 15);  // 初始化地图,设置中心点坐标和地图级别  
  23. map.addControl(new BMap.NavigationControl()); //添加平移缩放控件  
  24. map.addControl(new BMap.ScaleControl());  //添加放大、缩小控件  
  25. map.enableScrollWheelZoom();//允许鼠标滑轮操作  
  26.   
  27.   
  28. //坐标转换完之后的回调函数  
  29.   
  30. translateCallback = function (point){  
  31.   
  32.     var marker = new BMap.Marker(point);  
  33.   
  34.     map.addOverlay(marker);  
  35.   
  36.     //根据坐标得到地址描述    
  37.     var myGeo = new BMap.Geocoder();    
  38.     myGeo.getLocation(point, function(result){    
  39.         if (result){    
  40.             var label = new BMap.Label(result.address,{offset:new BMap.Size(20,-10)});  
  41.             marker.setLabel(label);  
  42.         }});    
  43.       
  44.     // 将标注添加到地图中  
  45.     map.addOverlay(marker);  
  46.       
  47.     //将坐标设置为地图中心位置  
  48.     map.setCenter(point);  
  49. }  
  50.   
  51.   
  52.   
  53. setTimeout(function(){  
  54.     BMap.Convertor.translate(new BMap.Point(longitude, latitude),0,translateCallback);     //真实经纬度转成百度坐标  
  55. }, 2000);  
  56.   
  57.   
  58.   
  59. </script>  
  60.   
  61. </body>  
  62. </html>  

坐标转换需用到convertor.js


[javascript]  view plain copy
  1. //2011-7-25  
  2. (function(){        //闭包  
  3. function load_script(xyUrl, callback){  
  4.     var head = document.getElementsByTagName('head')[0];  
  5.     var script = document.createElement('script');  
  6.     script.type = 'text/javascript';  
  7.     script.src = xyUrl;  
  8.     //借鉴了jQuery的script跨域方法  
  9.     script.onload = script.onreadystatechange = function(){  
  10.         if((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){  
  11.             callback && callback();  
  12.             // Handle memory leak in IE  
  13.             script.onload = script.onreadystatechange = null;  
  14.             if ( head && script.parentNode ) {  
  15.                 head.removeChild( script );  
  16.             }  
  17.         }  
  18.     };  
  19.     // Use insertBefore instead of appendChild  to circumvent an IE6 bug.  
  20.     head.insertBefore( script, head.firstChild );  
  21. }  
  22. function translate(point,type,callback){  
  23.     var callbackName = 'cbk_' + Math.round(Math.random() * 10000);    //随机函数名  
  24.     var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from="+ type + "&to=4&x=" + point.lng + "&y=" + point.lat + "&callback=BMap.Convertor." + callbackName;  
  25.     //动态创建script标签  
  26.     load_script(xyUrl);  
  27.     BMap.Convertor[callbackName] = function(xyResult){  
  28.         delete BMap.Convertor[callbackName];    //调用完需要删除改函数  
  29.         var point = new BMap.Point(xyResult.x, xyResult.y);  
  30.         callback && callback(point);  
  31.     }  
  32. }  
  33.   
  34. window.BMap = window.BMap || {};  
  35. BMap.Convertor = {};  
  36. BMap.Convertor.translate = translate;  
  37. })();  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值