【百度地图API】批量地址解析与批量反地址解析
百度地图API详解之地图操作
百度地图API详解之地图操作
本文专门介绍与地图操作相关的接口。
首先我们来看看百度地图API都提供了哪些操作方式:
PC平台:
•鼠标拖拽移动
•鼠标双击缩放
•鼠标滚轮缩放
•键盘控制
移动平台:
•单指拖拽移动
•单指双击放大
•双指移动缩放
默认情况下,地图支持鼠标拖拽以及双击缩放(双击鼠标左键放大一级,双击鼠标右键缩小一级)操作。
如果需要开启鼠标滚轮支持需要调用这个接口:
map.enableScrollWheelZoom(); // 启动鼠标滚轮操作
键盘控制默认也是不开启,开启后按键+和-分别让地图放大或缩小一级,PgUp、PgDn、Home、End键则会让地图向下、上、右、左四个方向移动一段距离。
↑、↓、←、→四个健可以使地图在四个方向上移动,另外这个也可以组合使用,比如同时按住↑和←,地图就会往右下方移动,目的是让你看到左上方区域的图像。
开启键盘操作需要调用如下接口:
map.enableKeyboard();
为了让用户获得更好的体验,建议开启连续缩放效果和惯性拖拽效果:
map.enableContinuousZoom(); // 开启连续缩放效果
map.enableInertialDragging(); // 开启惯性拖拽效果
这样,地图缩放就会有一个动画效果,拖拽结束后地图还会根据移动距离和速度产生一个惯性效果。
在移动端,所有的操作默认都是开启的,但是通过接口也可以进行配置。
百度地图API二次开发小经验分享
百度地图API⼆次开发⼩经验分享最近在做⼀个物流后台系统,需要⽤地图来把订单地址展⽰出来,需要在地图上批量框选坐标进⾏排单,需要看到配送员的实时位置等等功能。
在⾼德地图、腾讯地图、百度地图三者间,我选了百度地图,没有原因,个⼈偏好,因此我也不知道⾼德地图和腾讯地图好不好⽤。
反正到⽬前为⽌,我所想到的功能,百度都有对应的接⼝提供,点个赞。
⼀、关于百度地图的JavaScript API⼆、关于百度地图的Web APIweb端的接⼝就相对少⼀些,我使⽤PHPExcel来导⼊订单信息,然后使⽤Web API对地址信息进⾏转换,最后把地址的相关信息保存到数据库当中。
例如:导⼊地址:⼴州市天河北嘉逸国际酒店五楼⼒美健。
通过Web API的Geocoding API可以获取到经度:113.315296,纬度:23.138987,所在区:越秀区,所在路:梅花路。
获取到地址的详细信息后,就在排单页⾯上以坐标的形式标记出来,这⾥就和JavaScript API结合使⽤了。
三、功能⽰例展⽰我就通过参考上述的各种⽂档,东借西凑做出⼀些⼩功能,现在展⽰给⼤家看看。
1.以热⼒图的⽅式直观展⽰订单的密集程度以及区域订单数量。
左上⾓的⼯具条是绘制覆盖物的⼯具条,在地图上划⼀个区域,然后结合百度提供的⼏何换算的API,可以把绘制区内的订单搜集起来(我所做的是将区域内的订单移出地图,并放在“购物车”内),效果如下图:2.实时位置展⽰四、注意事项1.样式问题。
如果是使⽤BootStrap做的前端,那么css⽂件:bootstrap.css或bootstrap.min.css中的label将会和百度地图的地图样式有冲突,导致百度地图的label 样式失效。
解决⽅法如下图所⽰:移除bootstrap.css⽂件中label的max-width样式。
2.定位问题。
⼀般来说,通过PC端浏览器对个⼈⽬前位置定位是不准确的,强烈建议使⽤移动端来测试定位的代码。
百度地图地址解析地址生成标记地址批量解析把后台信息传入地图标记上简单代码示例
百度地图地址解析地址⽣成标记地址批量解析把后台信息传⼊地图标记上简单代码⽰例百度地图解析,根据所填信息在地图上⽣成标记点获取经纬度// 百度地图API功能var map = new BMap.Map("allmap"); // 创建Map实例map.centerAndZoom(new BMap.Point(114.316, 30.581), 11); // 初始化地图,设置中⼼点坐标和地图级别map.addControl(new BMap.MapTypeControl()); //添加地图类型控件map.setCurrentCity("武汉"); // 设置地图显⽰的城市此项是必须设置的map.enableScrollWheelZoom(true); //开启⿏标滚轮缩放var point = new BMap.Point(114.316, 30.581);var geoc = new BMap.Geocoder();map.centerAndZoom(point, 12);// 创建地址解析器实例var myGeo = new BMap.Geocoder();// 将地址解析结果显⽰在地图上,并调整地图视野var task_address = document.getElementById("taskAddress");document.getElementById("taskAddress").addEventListener('blur', function () {map.clearOverlays(); //清除之前的标记myGeo.getPoint(task_address.value, function (point) {if (point) {geoc.getLocation(point, function (rs) {console.log(rs.point);var addComp = rs.addressComponents;var addPoint = rs.point;var addAddress = rs.address;document.getElementById("taskAddress").value = addAddress;document.getElementById("taskHor").value = t;document.getElementById("taskVer").value = addPoint.lng;document.getElementById("taskProvince").value = addComp.province;document.getElementById("taskCity").value = addComp.city;document.getElementById("taskArea").value = addComp.district; //根据经纬度⽣成标记var new_point = new BMap.Point(addPoint.lng,t);var marker = new BMap.Marker(new_point); // 创建标注map.addOverlay(marker); // 将标注添加到地图中map.panTo(new_point);});} else {alert("您选择地址没有解析到结果!");}}, "武汉市");}, false);map.addEventListener("click", function (e) {var pt = e.point;geoc.getLocation(pt, function (rs) {var addComp = rs.addressComponents;var addPoint = rs.point;var addAddress = rs.address;document.getElementById("taskAddress").value = addAddress;document.getElementById("taskHor").value = t;document.getElementById("taskVer").value = addPoint.lng;document.getElementById("taskProvince").value = addComp.province;document.getElementById("taskCity").value = addComp.city;document.getElementById("taskArea").value = addComp.district;// alert(addAddress);});});百度地图把后台查询的数据集成到地图页⾯上,⽣成多个标记,即批量解析实例// 百度地图API功能var map = new BMap.Map("allmap"); // 创建Map实例map.centerAndZoom(new BMap.Point(114.316, 30.581), 11); // 初始化地图,设置中⼼点坐标和地图级别map.addControl(new BMap.MapTypeControl()); //添加地图类型控件map.setCurrentCity("武汉"); // 设置地图显⽰的城市此项是必须设置的map.enableScrollWheelZoom(true); //开启⿏标滚轮缩放var list_value = $('#list_value').val();//后台查询所得var str = JSON.parse(list_value);$.each(str, function (k, v) {var data_info = [[v.task_ver, v.task_hor, v.task_address]];var opts = {width: 300, // 信息窗⼝宽度height: 100, // 信息窗⼝⾼度title: "<div><a href='/task/" + v.id + "'target='blank'>" +"<div class='map_text'>" +"<h6>" + v.title + "</h6>" +"<div>" +"<span>" + "类别:" + v.task_type_name + " " + "</span>" +"<span>" + "分类:" + v.cate_name + "" + "</span>" +"</div>" +"<div>" +"<span>" + "预算:¥" + v.min_bounty + "-" + v.max_bounty + "" + "</span>" +"<span>" + "截⽌时间:" + v.delivery_deadline + "" + "</span>" +"</div>" +"</div>" +"</a><div>", // 信息窗⼝标题enableMessage: true//设置允许信息窗发送短息};for (var i = 0; i < data_info.length; i++) {var marker = new BMap.Marker(new BMap.Point(data_info[i][0], data_info[i][1])); // 创建标注 var content = data_info[i][2];map.addOverlay(marker); // 将标注添加到地图中addClickHandler(content, marker);}function addClickHandler(content, marker) {marker.addEventListener("click", function (e) {openInfo(content, e)});}function openInfo(content, e) {var p = e.target;var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);var infoWindow = new Window(content, opts); // 创建信息窗⼝对象map.openInfoWindow(infoWindow, point); //开启信息窗⼝}})//⼀个页⾯集成多个地图// 百度地图API功能var map = new BMap.Map("allmap");var point = new BMap.Point(116.331398, 39.897445);map.addControl(new BMap.MapTypeControl()); //添加地图类型控件map.enableScrollWheelZoom(true); //开启⿏标滚轮缩放map.centerAndZoom(point, 12);var geoc = new BMap.Geocoder("allmap");// 创建地址解析器实例var myGeo = new BMap.Geocoder();// 将地址解析结果显⽰在地图上,并调整地图视野$('.js_map').click(function () {var province = $("#province").find("option:selected").text();var city = $("#province_check").find("option:selected").text();var area = $("#area_check").find("option:selected").text();var customer_address = $("input[name='customer_address']").val();var address_detail = province + city + area + customer_address;myGeo.getPoint(address_detail, function (point) {if (point) {geoc.getLocation(point, function (rs) {$("input[name='task_lat']").val(t);$("input[name='task_lng']").val(rs.point.lng);});map.centerAndZoom(point, 16);map.addOverlay(new BMap.Marker(point));} else {alert("您选择地址没有解析到结果!");}}, "北京市");});//物流信息地图var map1 = new BMap.Map("l_allmap"); // 创建Map实例var point1 = new BMap.Point(116.331398, 39.897445);map1.addControl(new BMap.MapTypeControl()); //添加地图类型控件map1.enableScrollWheelZoom(true); //开启⿏标滚轮缩放var geoc1 = new BMap.Geocoder();map1.centerAndZoom(point1, 12);// 创建地址解析器实例var myGeo1 = new BMap.Geocoder();// 将地址解析结果显⽰在地图上,并调整地图视野$('.js_map1').click(function () {var info_address = $("input[name='info_address']").val();myGeo1.getPoint(info_address, function (point) {if (point) {geoc1.getLocation(point, function (rs) {$("input[name='info_lat']").val(t);$("input[name='info_lng']").val(rs.point.lng);});map1.centerAndZoom(point, 16);map1.addOverlay(new BMap.Marker(point)); } else {alert("您选择地址没有解析到结果!");}}, "北京市");});。
百度地图API实现标注多个地点和地址提示
for (var i = 0; i < markerArr.length; i++) {
var p0 = markerArr[i].point.split(",")[0]; //
var p1 = markerArr[i].point.split(",")[1]; //按照原数组的point格式将地图点坐标的经纬度分别提出来
// 创建信息窗口对象
info[i] = "<p style=’font-size:12px;lineheight:1.8em;’>" + "</br>地址:" + markerArr[i].address + "</br> 电话:" + markerArr[i].tel + "</br></p>索窗口的代码</title> <!-- 原作博客地址:/a497785609/article/details/24009031 --> <!--css--> <link href="style/demo.css" rel="stylesheet" type="text/css" /> <!--javascript--> <script src="scripts/jquery-1.9.1.js" type="text/javascript"></script> <script src="scripts/demo.js" type="text/javascript"></script> <script type="text/javascript" src="/api?v=2.0&ak=IDvNBsejl9oqMbPF316iKsXR"></script> <script type="text/javascript" src="/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.js"></script> <link rel="stylesheet" href="/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.css" /> </head> <body> <div class="demo_ma索窗口的代码title地图 API实现标注多个地点和地址提示
百度地图热力图--批量地址转换应用(基于百度api)
百度地图热⼒图--批量地址转换应⽤(基于百度api)需求:把外卖订餐地址做个⽤户分布热⼒图⾸先从百度API的demo例⼦参考静态页⾯,其中数据格式是然后我们就想把数据库⾥的地址批量转换但是百度API没有提供批量转换的接⼝。
但是我们找到了百度webapi单个地址转换的接⼝利⽤这个接⼝,在后台读取地址和统计个数,返回⼀个json⽤HttpWebRequest去发起get请求返回json,在把返回的json转成对象这⾥套了三层,所以数据结构构造成这样(⼀开始不这么写获取是null)单个地址转换写好了,下⾯⽤⼀个list<T>装⼀下,foreach遍历依次赋值,⽤个⼀般处理程序得到json最后把前台界⾯的数组换成ajax请求数据,要把async设置成false同步请求,不然就会跳过这⾥往下执⾏,这⾥⽤匿名函数返回⼀个数组最后结果代码:1public static T RequestApi<T>(string address)2 {3string apiUrl = "/geocoder/v2/";4string apiKey = "6Gra1QZ4gWrsrUgirWZ0Z1NdfFrh0mD3"; //5string output = "json";67 IDictionary<string, string> param = new Dictionary<string, string>();8 param.Add("ak", apiKey);9 param.Add("output", output);101112 param.Add("address", address);1314string result = string.Empty;1516//初始化⽅案信息实体类。
调用百度地图API批量搜索地名并返回地址及坐标
10.
<p>显示结果<textarea id="txtResult" rows="10" cols="30" value="" /></textarea>
11. <div id="divMap" style="width:400px;height:400px;border:solid 1px gray"></div>
03. <meta name="Description" content="本网页提供了批量搜索地名并返回地址及坐标的功能!">
04. <script type="text/javascript" src="/api?v=1.2"></script>
05. </head>
34.
}
35.
if(rs.getPageIndex!=rs.getNumPages())
36.
{
37.
ls.gotoPage(i);
38.
i=i+1;
39.
}
40.
}});}
41.
</script>
42. </body>
43. </html>
去年由于某门课程需要
去年由于某门tml]
01. <title>批量获取模糊搜索地址名称及坐标</title>
02. <meta name="Keywords" content="批量,获取坐标,模糊搜索">
百度地图api(html)
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>地址解析和智能搜索</title><script type="text/javascript" src="/api?v=1.2"></script></head><body><h2>1、地址解析Geocoder</h2><input style="width:300px;" type="text" value="上海市浦东新区花木路" id="address_1" /><input value="地址解析" type="button" onclick="fun_geocoder_getPoint();" />(getPoint:需要输入详细到街道的地址)</br><span style="display:inline-block;line-height:20px;width:300px;font-size:14px;border-bottom:1px solid #ccc;" type="text" id="address_2"></span><input value="反地址解析" type="button" onclick="fun_geocoder_getLocation();" />(getLocation:点击反地址解析后,点击地图返回地址。
使用百度地图进行逆地址解析
使⽤百度地图进⾏逆地址解析<!DOCTYPE html><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅⿊";font-size:14px;}#allmap {width:100%;height:100%;}</style><script type="text/javascript" src="/api?v=2.0&ak=这⾥填写百度key"></script><title>逆地址解析</title></head><body><div id="allmap"></div><script type="text/javascript" >function map_click(lng,lat){var map = new BMap.Map("allmap");var point = new BMap.Point(lng,lat);// map.centerAndZoom(point,12);var geoc = new BMap.Geocoder();geoc.getLocation(point,function(rs){var addComp = rs.addressComponents;console.log(addComp);alert(addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber);});}map_click(116.38,39.90);//参数解析//@parameter1 lng 传⼊的经度//@parameter2 lat 传⼊的纬度</script></body></html>。
百度地图移动api
百度地图移动api
百度地图移动API是一套提供地图展示、地理位置搜索、
路径规划等功能的接口,可用于开发移动端应用和网页应用。
它包括了地图展示、标注、定位、搜索、路径规划等
功能,可以帮助开发者实现移动端地图相关的应用功能。
使用百度地图移动API,可以在地图上显示地理位置、添加覆盖物、标记点、绘制路径,并提供地理位置搜索、逆地
理编码、周边搜索等功能。
开发者可以通过API接口获取
相关的地理信息,并根据自己的业务需求进行展示和处理。
百度地图移动API提供了多种开发语言和平台的SDK,包
括iOS、Android、JavaScript等,使开发者能够方便地集成和使用地图功能。
开发者可以通过注册百度地图开放平
台账号获取API密钥,并在应用中使用API密钥进行接口
调用。
通过百度地图移动API,开发者可以打造各种基于地图的应用,如地图导航、位置分享、附近商家搜索等,满足用户对地图相关功能的需求。
地址解析和反地址解析
<script type="text/javascript" src="/api?v=1.2"></script>
var addComp = rs.addressComponents;
alert(myAddress+'的具体位置是:'+addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
});
}
}, "上海市"); //必须设置城市
}
</script>
对指定的坐标点进行反向地址解析。如果解析成功,则回调函数的参数为GeocoderResult对象,否则回调函数的参数为null。
代码示例:
var gc = new BMap.Geocoder();
map.addEventListener("click", function(e){
例如“上海市新华路”,但是你想知道“新华路”在哪个区县的时候,你就可以同时利用这两个接口。
百度地图API地理位置和坐标转换
百度地图API地理位置和坐标转换
1.由地名(省份、城市、街道等)得到其对应的百度地图坐标:
/geocoder/v2/?output=json&ak=你从百度申请到的Key&address=北京市
其对⼤陆主要城市的解析很好,但是有些⼤陆的⼩城市、⾹港、台湾的⼀些区域⽆法解析,我测试到的如下:
解析错误的城市:伊犁|新界|新⽵|港岛|基隆|云林|博尔塔拉|桃园|苗栗|南投|克孜勒苏|台东|
伊犁可以使⽤新疆伊犁来解析,更好的办法是使⽤⾕歌地图API,⽐如这样使⽤:
/maps/api/geocode/json?sensor=false&address=地址
在⾕歌地图中,港岛可以使⽤:
Hong Kong Island
来解析,
云林可以使⽤:
Yunlin County, Taiwan
来解析,
博尔塔拉可以使⽤博尔塔拉蒙古⾃治州来解析,
2.由坐标反解得到对应的地址:
/geocoder/v2/?output=json&ak=你从百度申请到的Key&location=纬度(Latitude),经度(Longitude)
注意,纬度和经度之间有个英⽂逗号。
具体参考:。
利用百度地图WEB服务APIGeoCodingAPI批量地址解析
利⽤百度地图WEB服务APIGeoCodingAPI批量地址解析 Geocoding API包括地址解析和逆地址解析功能: 地理编码:即地址解析,由详细到街道的结构化地址得到百度经纬度信息,例如:“北京市海淀区中关村南⼤街27号”地址解析的结果是“lng:116.31985,lat:39.959836”。
同时,地理编码也⽀持名胜古迹、标志性建筑名称直接解析返回百度经纬度,例如:“百度⼤厦”地址解析的结果是“lng:116.30815,lat:40.056885” ,通⽤的POI检索需求,建议使⽤Place API。
逆地理编码:即逆地址解析,由百度经纬度信息得到结构化地址信息,例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。
本⽂所讲的是地理编码,从本地硬盘读取excel数据,地址解析,将结果存到本地的excel数据表当中。
主要代码如下:try{address = URLEncoder.encode(address,"UTF-8");URL resjson = new URL("/geocoder/v2/?address="+address+"&output=json&ak="+key+"&callback=showLocation");BufferedReader in = null;if(resjson.openStream()!=null){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);Map<String,String> map = null;if(str!=null){int lngStart = str.indexOf("lng\":");int lngEnd = str.indexOf(",\"lat");int latEnd = str.indexOf("},\"precise");int preciseEnd = str.indexOf(",\"confidence");int confidenceEnd = str.indexOf(",\"level");if(lngStart>0&&lngEnd>0&&latEnd>0){String lng = str.substring(lngStart+5,lngEnd);String lat = str.substring(lngEnd+7,latEnd);String precise = str.substring(latEnd+12,preciseEnd);String confidence = str.substring(preciseEnd+14,confidenceEnd);map = new HashMap<String, String>();map.put("lng", lng);map.put("lat", lat);map.put("precise", precise);map.put("confidence", confidence);return map;}}}catch(Exception e){e.printStackTrace();}return null;}取得的结果数据主要包括了对应地址的经度、纬度、是否精确查找,打点的可信度。
API地图坐标转化(批量转换坐标)
API地图坐标转化(批量转换坐标)<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><script type="text/javascript" src="1.js"></script><title>批量转换坐标</title></head><body><input onclick="magic();" value="批量转换" type="button" />(据说有50次/秒的限制哦)<hr /><div style="clear:both"><div style="float:left;"><h4>⾕歌地图</h4><div style="width:520px;height:340px;border:1px solid gray" id="map_canvas"></div><p>⿏标点击的⾕歌坐标是:<span id="info"></span></p><script type="text/javascript" src="/maps/api/js?sensor=false"></script><script type="text/javascript">function initialize() {var myOptions = {zoom: 14,center: new tLng(39.90861722866082, 116.39679921252446),mapTypeId: google.maps.MapTypeId.ROADMAP};var map = new google.maps.Map(document.getElementById('map_canvas'),myOptions);google.maps.event.addListener(map, 'click', function(e) {document.getElementById("info").innerHTML = tLng;});var marker1 = new google.maps.Marker({position: new tLng(39.90762965106183, 116.3786889372559),map: map});var marker2 = new google.maps.Marker({position: new tLng(39.90795884517671, 116.38632786853032),map: map});var marker3 = new google.maps.Marker({position: new tLng(39.907432133833574, 116.39534009082035),map: map});var marker4 = new google.maps.Marker({position: new tLng(39.90789300648029, 116.40624058825688),map: map});var marker5 = new google.maps.Marker({position: new tLng(39.90795884517671, 116.41413701159672),map: map});}google.maps.event.addDomListener(window, 'load', initialize);</script></div><div style="float:left;"><h4>百度地图</h4><div style="width:520px;height:340px;border:1px solid gray" id="container"></div><p>⿏标点击的百度坐标是:(<span id="info2"></span>)</p><script type="text/javascript" src="/api?v=1.2"></script><script type="text/javascript">var map = new BMap.Map("container");map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);var i;var markers = [];map.addEventListener("click",function(e){document.getElementById("info2").innerHTML = e.point.lng + "," + t;});//注意:百度和⾕歌的经纬度坐标顺序是相反的。
百度地图地址解析逆地址解析
百度地图地址解析逆地址解析由于⼯作需要,需要根据经纬度获得地址,或者根据地址获得经纬度,使⽤百度api类清单1.ReverseGeocodingRequest.java 逆地址解析的请求类2.Location.java 经纬度类3.ReverseGeocodingResponse.java 逆地址响应封装类4.ReverseGeocodingResult.java 逆地址解析相关数据类5.AddressComponent.java 逆地址解析相关的地址信息类6.GeocodingRequest.java 地址解析的请求类7.GeocodingResponse.java 地址解析的响应封装类8.GeocodingResult.java 地址解析的相关响应数据类具体代码如下:BaiduMapUtils.javaimport com.alibaba.fastjson.TypeReference;import mon.util.HttpClientUtils;import mon.util.JsonUtils;import mon.util.baidu.map.geo.GeocodingRequest;import mon.util.baidu.map.geo.GeocodingResponse;import mon.util.baidu.map.geo.ReverseGeocodingRequest;import mon.util.baidu.map.geo.ReverseGeocodingResponse;import org.springframework.util.StringUtils;import java.io.IOException;/*** @author:* @data:* @version:*/public class BaiduMapUtils {/*** 百度地图请求秘钥,注意:需要是服务度app的秘钥*/private static final String KEY = "PemGxiMCQ********";/*** 返回值类型*/private static final String OUTPUT = "json";/*** 根据地名获取经纬度*/private static final String GET_LNG_LAT_URL = "/geocoder/v3/";/*** 根据经纬度获取地名*/private static final String GET_ADDRESS_URL = "/reverse_geocoding/v3/";/*** 逆地址解析* 根据经纬度获得地址信息* 仓考地址 /index.php?title=webapi/guide/webservice-geocoding-abroad* @return*/public static ReverseGeocodingResponse reverseGeocoding(ReverseGeocodingRequest reverseGeocodingRequest) {if(StringUtils.isEmpty(reverseGeocodingRequest.getAk())){reverseGeocodingRequest.setAk(KEY);}try {String url = joinUrl(reverseGeocodingRequest);String jsonString = HttpClientUtils.doGet(url);ReverseGeocodingResponse response = JsonUtils.toObject(jsonString,new TypeReference<ReverseGeocodingResponse>(){});return response;}catch (Exception e) {e.printStackTrace();}return null;}public static GeocodingResponse geocoding(GeocodingRequest geocodingRequest){if(StringUtils.isEmpty(geocodingRequest.getAk())){geocodingRequest.setAk(KEY);}try {String url = joinUrl(geocodingRequest);String jsonString = HttpClientUtils.doGet(url);GeocodingResponse response = JsonUtils.toObject(jsonString,new TypeReference<GeocodingResponse>(){});return response;}catch (Exception e) {e.printStackTrace();}return null;}/*** 拼接url字符串* @return* @throws IOException*/private static String joinUrl(ReverseGeocodingRequest reverseGeocodingRequest) throws IOException {//拼装urlStringBuilder baseUrl = new StringBuilder();String location = reverseGeocodingRequest.getLocation().getLat() + "," + reverseGeocodingRequest.getLocation().getLng();baseUrl.append(reverseGeocodingRequest.getUrl()).append("?ak=").append(reverseGeocodingRequest.getAk()).append("&output=").append(reverseGeocodingRequest.getOutput()).append("&coordtype=").append(reverseGeocodingRequest.getCoordtype()).append("&location=").append(location);if(!StringUtils.isEmpty(reverseGeocodingRequest.getRet_coordtype()) && !"bd09ll".equals(reverseGeocodingRequest.getRet_coordtype())) baseUrl.append("&ret_coordtype=").append(reverseGeocodingRequest.getRet_coordtype());if(reverseGeocodingRequest.getRadius()!=1000)baseUrl.append("&radius=").append(reverseGeocodingRequest.getRadius());if(!StringUtils.isEmpty(reverseGeocodingRequest.getSn()))baseUrl.append("&sn=").append(reverseGeocodingRequest.getSn());if(!StringUtils.isEmpty(reverseGeocodingRequest.getCallback()))baseUrl.append("&callback=").append(reverseGeocodingRequest.getCallback());if(!StringUtils.isEmpty(reverseGeocodingRequest.getPoi_types()))baseUrl.append("&poi_types=").append(reverseGeocodingRequest.getPoi_types());if(!StringUtils.isEmpty(reverseGeocodingRequest.getExtensions_poi()))baseUrl.append("&extensions_poi=").append(reverseGeocodingRequest.getExtensions_poi());if(!StringUtils.isEmpty(reverseGeocodingRequest.getExtensions_road()) && "true".equals(reverseGeocodingRequest.getExtensions_road())) baseUrl.append("&extensions_road=").append(reverseGeocodingRequest.getExtensions_road());if(!StringUtils.isEmpty(reverseGeocodingRequest.getExtensions_town()))baseUrl.append("&extensions_town=").append(reverseGeocodingRequest.getExtensions_town());if(!StringUtils.isEmpty(reverseGeocodingRequest.getLanguage()) && "zh-CN".equals(reverseGeocodingRequest.getLanguage()))baseUrl.append("&language=").append(reverseGeocodingRequest.getLanguage());if(reverseGeocodingRequest.getLanguage_auto()==1)baseUrl.append("&language_auto=").append(reverseGeocodingRequest.getLanguage_auto());return baseUrl.toString();}/*** 拼接url字符串* @return* @throws IOException*/private static String joinUrl(GeocodingRequest geocodingRequest) throws IOException {//拼装urlStringBuilder baseUrl = new StringBuilder();baseUrl.append(geocodingRequest.getUrl()).append("?ak=").append(geocodingRequest.getAk()).append("&output=").append(geocodingRequest.getOutput()).append("&address=").append(geocodingRequest.getAddress());if(!StringUtils.isEmpty(geocodingRequest.getCity()))baseUrl.append("&city=").append(geocodingRequest.getCity());if(!StringUtils.isEmpty(geocodingRequest.getRet_coordtype()) && !"bd09ll".equals(geocodingRequest.getRet_coordtype()))baseUrl.append("&ret_coordtype=").append(geocodingRequest.getRet_coordtype());if(!StringUtils.isEmpty(geocodingRequest.getSn()))baseUrl.append("&sn=").append(geocodingRequest.getSn());if(!StringUtils.isEmpty(geocodingRequest.getCallback()))baseUrl.append("&callback=").append(geocodingRequest.getCallback());return baseUrl.toString();}public static void main(String[] args) {ReverseGeocodingRequest reverseGeocodingRequest = new ReverseGeocodingRequest(116.639661,23.38616);ReverseGeocodingResponse data = BaiduMapUtils.reverseGeocoding(reverseGeocodingRequest);System.out.println(data.toString());GeocodingRequest geocodingRequest = new GeocodingRequest("北京市海淀区上地⼗街10号");GeocodingResponse data2 = BaiduMapUtils.geocoding(geocodingRequest);System.out.println(data2.toString());}}ReverseGeocodingResult.javaimport lombok.Getter;import lombok.Setter;@Getter@Setterpublic class ReverseGeocodingResult {Location location;String formatted_address;AddressComponent addressComponent;}ReverseGeocodingRequest.javaimport lombok.Getter;import lombok.Setter;@Getter@Setter/*** /index.php?title=webapi/guide/webservice-geocoding-abroad*/public class ReverseGeocodingRequest {public ReverseGeocodingRequest(){}String url="/reverse_geocoding/v3/";/**** @param lng 经度* @param lat 纬度*/public ReverseGeocodingRequest(double lng,double lat){location = new Location(lng,lat);}/**** @param lng 经度* @param lat 纬度* @param ak*/public ReverseGeocodingRequest(double lng,double lat,String ak){location = new Location(lng,lat);this.ak=ak;}/*** 根据经纬度坐标获取地址*/Location location;/*** 坐标的类型,⽬前⽀持的坐标类型包括:bd09ll(百度经纬度坐标)、bd09mc(百度⽶制坐标)、gcj02ll(国测局经纬度坐标,仅限中国)、wgs84ll( GPS经纬度)* /index.php?title=coordinate*/String coordtype="bd09ll";/*** 可选参数,添加后返回国测局经纬度坐标或百度⽶制坐标* 举例:gcj02ll(国测局坐标,仅限中国) ,bd09mc(百度墨卡托坐标)* /index.php?title=coordinate*/String ret_coordtype="bd09ll";/*** poi召回半径,允许设置区间为0-1000⽶,超过1000⽶按1000⽶召回。
百度地图API类参考
百度地图API 类参考一、a)核心类Map此类是地图API 的核心类,用来实例化一个地图。
构造函数构造函数Map(container:String|HTMLElem ent[, opts:MapOptions])描述在指定的容器内创建地图实例,之后需要调用Map.centerAndZoom()方法对地图进行初始化。
未进行初始化的地图将不能进行任何操作。
配置方法返方法回值enableDragging()disableDragging( )enableScrollWhee lZoom()disableScrollWhe elZoom()enableDoubleClic kZoom()disableDoubleCli ckZoom()nonenone启用地图拖拽,默认启用。
禁用地图拖拽。
描述none启用滚轮放大缩小,默认禁用。
none禁用滚轮放大缩小。
none启用双击放大,默认启用。
none禁用双击放大。
启用键盘操作,默认禁用。
键盘的上、下、左、右键可连续移动地enableKeyboard()none 图。
同时按下其中两个键可使地图进行对角移动。
PgUp、PgDn、Home 和End 键会使地图平移其1/2的大小。
+、-键会使地图放大或缩小一级。
disableKeyboard( )enableInertialDr agging()disableInertialD ragging()enableContinuous none禁用键盘操作。
启用地图惯性拖拽(默认为关闭状态)。
(自1.1 新增)禁用地图惯性拖拽(自1.1 新增)启用连续缩放效果(默认为禁用状态)。
nonenonenoneZoom()disableContinuou sZoom()enablePinchToZoo m()disablePinchToZo om()none(自1.1 新增)禁用连续缩放效果(自1.1 新增)启用双指操作缩放(默认为开启状态)。
移动应用开发中的地理位置逆解析方法
移动应用开发中的地理位置逆解析方法随着移动互联网的快速发展,地理位置逆解析成为了移动应用开发中的一个重要环节。
通过地理位置逆解析,我们可以将经纬度坐标转化为可读的地理信息,如地址、城市等。
在实际应用中,我们常常需要使用地理位置逆解析来获取用户所处位置的详细信息,从而为用户提供更精确的服务。
接下来,我将介绍几种常见的地理位置逆解析方法,帮助开发者更好地理解和应用它们。
一、通过第三方地图API进行逆解析第三方地图服务商如百度地图、腾讯地图、高德地图等提供了地理位置逆解析的API接口,开发者可以通过调用这些接口来获取逆解析结果。
通常,开发者需要传入经纬度坐标参数,接口会返回解析得到的地址信息。
这种方法简单快捷,适合那些不需要自定义逆解析方案的应用。
二、基于地理位置数据库的逆解析地理位置数据库包含了大量的地理信息数据,如国家、城市、街道等。
通过将地理信息与经纬度坐标进行映射,我们可以通过查询数据库获取特定经纬度坐标对应的地理信息。
这种方法的好处是可以自定义逆解析方案,比如根据需求选择特定的地理位置数据库,或者对数据库进行定制化的扩展。
但是需要注意的是,地理位置数据库的维护和更新需要一定的成本和技术支持。
三、利用地址识别算法进行逆解析地址识别算法是一种基于文本处理和模式匹配的方法,通过分析和解析文本信息,寻找其中的地理位置描述并与经纬度坐标进行对应。
这种方法的优势在于可以适应多种形式的地址格式,并且可以通过自定义算法进行逆解析的优化。
但是需要注意的是,地址识别算法对于复杂的地址描述和语义多义性处理方面还存在一定的挑战。
四、基于机器学习的逆解析方法随着机器学习技术的发展,我们可以利用大量的位置数据和地理信息数据进行训练,构建逆解析模型来实现更准确的逆解析。
这种方法通过模型的学习和迭代,可以适应各种复杂情况下的逆解析需求。
但是需要注意的是,构建和训练逆解析模型需要大量的数据和计算资源,同时还需要考虑数据隐私和安全的问题。
利用百度地图API获取当前位置信息
利⽤百度地图API获取当前位置信息利⽤百度地图API可以做很多事情,个⼈感觉最核⼼也是最基础的就是定位功能了。
这⾥分享⼀个制作的JS可以实现登录⽹页后定位:1 <script type="text/javascript">2var map;3var gpsPoint;4var baiduPoint;5var gpsAddress;6var baiduAddress;7var x;8var y;9function getLocation() {10//根据IP获取城市11var myCity = new BMap.LocalCity();12 myCity.get(getCityByIP);1314//获取GPS坐标15if (navigator.geolocation) {16 navigator.geolocation.getCurrentPosition(showMap, handleError, { enableHighAccuracy: true, maximumAge: 1000 });17 } else {18 alert("您的浏览器不⽀持使⽤HTML 5来获取地理位置服务");19 }20 }2122function showMap(value) {23var longitude = value.coords.longitude;24var latitude = titude;25 map = new BMap.Map("map");26 x=latitude;27 y=longitude;28//alert("坐标经度为:" + latitude + ",纬度为:" + longitude );29 gpsPoint = new BMap.Point(longitude, latitude); // 创建点坐标303132//根据坐标逆解析地址33var geoc = new BMap.Geocoder();34 geoc.getLocation(gpsPoint, getCityByCoordinate);3536 BMap.Convertor.translate(gpsPoint, 0, translateCallback);37 map.enableScrollWheelZoom(true);38 }3940 translateCallback = function (point) {41 baiduPoint = point;42 map.centerAndZoom(baiduPoint, 18);43var geoc = new BMap.Geocoder();44 geoc.getLocation(baiduPoint, getCityByBaiduCoordinate);45 }4647function getCityByCoordinate(rs) {48 gpsAddress = rs.addressComponents;49var address = "GPS标注:" + gpsAddress.province + "," + gpsAddress.city + "," + gpsAddress.district + "," + gpsAddress.street + "," + gpsAddress.streetNumber;50var marker = new BMap.Marker(gpsPoint); // 创建标注51 map.addOverlay(marker); // 将标注添加到地图中52var labelgps = new bel(address, { offset: new BMap.Size(20, -10) });53 marker.setLabel(labelgps); //添加GPS标注54 }5556function getCityByBaiduCoordinate(rs) {57 baiduAddress = rs.addressComponents;58var address = "百度标注:" + baiduAddress.province + "," + baiduAddress.city + "," + baiduAddress.district + "," + baiduAddress.street + "," + baiduAddress.streetNumber; 59var marker = new BMap.Marker(baiduPoint); // 创建标注60 map.addOverlay(marker); // 将标注添加到地图中61var labelbaidu = new bel(address, { offset: new BMap.Size(20, -10) });62 marker.setLabel(labelbaidu); //添加百度标注63 }6465//根据IP获取城市66function getCityByIP(rs) {67var cityName = ;68 alert("根据IP定位您所在的城市为:" + cityName);69 }7071function handleError(value) {72switch (value.code) {73case 1:74 alert("位置服务被拒绝");75break;76case 2:77 alert("暂时获取不到位置信息");78break;79case 3:80 alert("获取信息超时");81break;82case 4:83 alert("未知错误");84break;85 }86 }8788function init() {89 getLocation();90 }9192 window.onload = init;9394 </script>完成定位功能后可以添加相关代码编辑地图控件覆盖物信息窗⼝等等各种功能。
百度地图API-根据地址解析坐标,根据坐标解析地址
百度地图API-根据地址解析坐标,根据坐标解析地址⼀.根据地址解析坐标1.官⽅⽂档地址2.c#封装⽅法/// <summary>/// 根据地址解析经纬度/// </summary>/// <param name="address">地址</param>/// <param name="city">城市</param>/// <returns></returns>public static string GetMapLatOrLong(string address, string city){string posturl = "/geocoder?address=" + address + "&output=json&key=⾃⼰的key&city=" + city + "";string postret = HttpGet(posturl);//返回json数据:{ "status":"OK","result":{ "location":{ "lng":经度,"lat":纬度},"precise":1,"confidence":75,"level":"\u5546\u52a1\u5927\u53a6"} }string citylist = "";JsonData jd = JsonMapper.ToObject(postret);if (jd["status"].ToString() == "OK"){citylist = "{\"lng\":\""+ jd["result"]["location"]["lng"].ToString()+ "\",\"lat\":\""+ jd["result"]["location"]["lat"].ToString()+ "\",\"level\":\""+ jd["result"]["level"].ToString() + "\"}";}else{citylist = "{\"lng\":\"\",\"lat\":\"\",\"level\":\"\"}";}return citylist;}3.调⽤string retcity= GetMapLatOrLong("地址","城市");Response.Write(retcity);⼆.根据坐标解析地址1.官⽅⽂档地址2.c#封装⽅法/// <summary>/// 按照定位的坐标,获取省市县/// </summary>/// <param name="lat"></param>/// <param name="lng"></param>/// <returns></returns>public static string DecodeMapPostion(string lat, string lng){string posturl = "/geocoder/v2/?output=json&ak=⾃⼰的key&location=" + lat + "," + lng; string postret =HttpGet(posturl);string citylist = "";JsonData jd = JsonMapper.ToObject(postret);if (jd["status"].ToString() == "0"){//具体地址string jtaddrs = jd["result"]["formatted_address"].ToString();string bussinsaddrs = jd["result"]["sematic_description"].ToString();citylist = "{\"province\":\"" + jd["result"]["addressComponent"]["province"].ToString() + "\",\"city\":\""+ jd["result"]["addressComponent"]["city"].ToString() +"\",\"area\":\"" + jd["result"]["addressComponent"]["district"].ToString() + "\",\"address\":\""+ HtmlEncode(jtaddrs) + "\"}";}else{citylist = "{\"province\":\"\",\"city\":\"\",\"area\":\"\"}";}return citylist;}3.调⽤string retcity= DecodeMapPostion(lat,lng);Response.Write(retcity);。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
API和SDK都可以不展示地图,直接获取数据。
所以,建议大家都不要用webserives方式啦,因为webserives方式一般都有很高的限制。
用到了地址解析和反地址解析的接口。
类参考:
/wiki/map/index.php?title=Class:%E6%9C%8D%E5%8A%A 1%E7%B1%BB/Geocoder
下面分别是地址解析和反地址解析的demo图,还有全部源代码。
全部源代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<title>批量反地址解析+商圈</title>
<script type="text/javascript"
src="/api?v=1.3"></script>
</head>
<body>
<input type="button" value="批量反地址解析+商圈" onclick="bdGEO()"/> <div id="result"></div>
</body>
</html>
<script type="text/javascript">
var index = 0;
var myGeo = new BMap.Geocoder();
var adds = [
new BMap.Point(116.354682,39.95134),
new BMap.Point(116.445806,39.933859),
new BMap.Point(116.421373,39.952888),
new BMap.Point(116.383428,39.884491)
];
function bdGEO(){
var pt = adds[index];
geocodeSearch(pt);
index++;
}
function geocodeSearch(pt){
if(index < adds.length){
setTimeout(window.bdGEO,300);
}
myGeo.getLocation(pt, function(rs){
var addComp = rs.addressComponents;
document.getElementById("result").innerHTML +=
adds[index-1].lng + "," + adds[index-1].lat + ":" + "商圈(" +
rs.business + ") 结构化数据(" + addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber + ")</br>";
});
}
</script>。