利用百度API(js)通过地址获取经纬度
发布时间:2016-04-20, 18:27:05 分类:PHP | 编辑 off 网址 | 辅助
正文 1929字数 462,478阅读
根据经纬度找到具体地址:
http://api.map.baidu.com/geocoder?location=纬度,经度&output=输出格式类型&key=用户密钥
如:
http://api.map.baidu.com/geocoder?location=31.407452,121.490523&output=json&key=6eea93095ae93db2c77be9ac910ff311
根据具体地址找到经纬度:
http://api.map.baidu.com/geocoder?address=地址&output=输出格式类型&key=用户密钥&city=城市名
如:
http://api.map.baidu.com/geocoder?address=牡丹江路营业厅&output=json&key=6eea93095ae93db2c77be9ac910ff311&city=上海市
Run code
Cut to clipboard
php
<?php
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page 返回网页
CURLOPT_HEADER => false, // 不返回头信息
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // 设置UserAgent
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect 连接超时
CURLOPT_TIMEOUT => 120, // timeout on response 回复超时
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
$address='南宁市中山路66号金外滩商务大厦1301';
$n=get_web_page('http://api.map.baidu.com/geocoder?address='.$address.'&output=json');
$n=$n['content'];
$n=json_decode($n,true);//强制json_decode结果转换为数组
//$n=$n->location();
print_r($n['result']['location']);
?>
Run code
Cut to clipboard
(支付宝)给作者钱财以资鼓励 (微信)→
有过 3 条评论 »
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible"content="IE=edge,chrome=1"/> <title>百度地图获取经纬度标注 lizhenqiu.com</title> <style> #map_container { width: 1005px; margin: 0 auto; } #rMap { width: 600px; height: 500px; float: left; } #lSearch { width: 300px; height: 500px; float: left; } td { width: 100px; } </style> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript"src="http://api.map.baidu.com/api?v=1.3"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.js"></script> <link rel="stylesheet"href="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.css"/> </head> <body> lng<input type="text"id="longitude" /> lat<input type="text"id="latitude" /> <div class="bg_cover"></div> <div id="map_container"> <div id="rMap"></div> </div> <script> $(function () { var map = new BMap.Map("rMap");//创建地图实例 var point = new BMap.Point(108.330585, 22.815506);//初始设置地图中心点,为天安门 map.addControl(new BMap.MapTypeControl()); //添加地图类型控件 map.setCurrentCity("金外滩大厦"); map.enableScrollWheelZoom(); //启用滚轮放大缩小,默认禁用 map.centerAndZoom(point, 15); creatMarker(); //$("#btnSearch").click(function () { var txt = '南宁市中山路66号金外滩商务大厦1301';//$(".txtProvince").val() + $(".txtCity").val() + $(".txtDetail").val(); var lng, lat; if (txt !="") { var localSearch = new BMap.LocalSearch(map); map.clearOverlays();//清空原来的标注 localSearch.setSearchCompleteCallback(function (searchResult) { var poi = searchResult.getPoi(0); lng = poi.point.lng; lat = poi.point.lat; map.centerAndZoom(poi.point, 15); point = new BMap.Point(poi.point.lng, poi.point.lat); creatMarker(); }); localSearch.search(txt); } //}) //创建地图遮盖物 function creatMarker() { var marker = new BMap.Marker(point); // 创建标注 map.addOverlay(marker); // 将标注添加到地图中 marker.enableDragging(); //标注可拖拽 /* marker.addEventListener("click", function (e) { searchInfoWindow.open(marker); })*/ //marker.addEventListener("dragend", function (e) { //监听标注的dragend事件,获取拖拽后地理坐标 $("#longitude").val(marker.point.lng); $("#latitude").val(marker.point.lat); var pt = marker.point; //}) /* var label = new BMap.Label("广西南宁青秀区金外滩商务大厦", {offset: new BMap.Size(20, -10)}); marker.setLabel(label); map.addOverlay(marker); //在地图中添加marker marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画*/ }; }) </script> </body> </html>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>GeoUtils示例</title> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script> <style type="text/css"> table { font-size: 14px; } </style> </head> <body> <div style="float:left;width:600px;height:500px;border:1px solid gray" id="container"></div> <div style="float:left;width:300px;height:500px;border:1px solid gray" id="control"> <table style="width:100%;"> <tr> <td colspan="2">判断点是否在多边形内:</td> </tr> <tr> <td><input type="button" value="多边形1" onclick="polygon1()" /></td> </tr> <tr> <td><input type="button" value="多边形2" onclick="polygon2()" /></td> </tr> <tr> <td>经度<input type="text" value="" id="lng"></td> </tr> <tr> <td>纬度<input type="text" value="" id="lat"></td> </tr> <tr> <td>结果:</td> </tr> <tr> <td><p id="result" style="color:red"></p></td> </tr> <table> </div> </body> </html> <script type="text/javascript"> var map = new BMap.Map("container"); var pt = new BMap.Point(116.404, 39.915); var mkr = new BMap.Marker(pt); var ply; //多边形 map.centerAndZoom(pt, 16); map.enableScrollWheelZoom(); //开启滚动缩放 map.enableContinuousZoom(); //开启缩放平滑 //初始化为多边形1 polygon1(); //生成多边形1 function polygon1() { var pts = []; var pt1 = new BMap.Point(116.395, 39.910); var pt2 = new BMap.Point(116.394, 39.914); var pt3 = new BMap.Point(116.403, 39.920); var pt4 = new BMap.Point(116.402, 39.914); var pt5 = new BMap.Point(116.410, 39.913); pts.push(pt1); pts.push(pt2); pts.push(pt3); pts.push(pt4); pts.push(pt5); ply = new BMap.Polygon(pts); //演示:将面添加到地图上 map.clearOverlays(); map.addOverlay(ply); } //生成多边形2 function polygon2() { var pts = []; var pt1 = new BMap.Point(116.395, 39.910); var pt2 = new BMap.Point(116.394, 39.914); var pt3 = new BMap.Point(116.396, 39.919); var pt4 = new BMap.Point(116.406, 39.920); var pt5 = new BMap.Point(116.410, 39.913); pts.push(pt1); pts.push(pt2); pts.push(pt3); pts.push(pt4); pts.push(pt5); ply = new BMap.Polygon(pts); //演示:将多边形添加到地图上 map.clearOverlays(); map.addOverlay(ply); } //map.addEventListener("click", function (e) { mkr.setPosition(map.addEventListener.point); map.addOverlay(mkr); //将点击的点的坐标显示在页面上 document.getElementById("lng").value = '116.410926';//e.point.lng; document.getElementById("lat").value = '39.917089';//e.point.lat; InOrOutPolygon('116.410926', '39.917089'); //}); function InOrOutPolygon(lng, lat){ var pt = new BMap.Point(lng, lat); var result = BMapLib.GeoUtils.isPointInPolygon(pt, ply); if (result == true) { document.getElementById("result").innerHTML = "点在多边形内"; } else { document.getElementById("result").innerHTML = "点在多边形外"; } } </script>
BMapLib.GeoUtils.isPointInPolygon(point, polygon) Boolean
判断点是否多边形内
例子:
var _ppoints = [
new BMap.Point(120.220588,30.26135),
new BMap.Point(120.218863,30.258449),
new BMap.Point(120.222618,30.256702),
new BMap.Point(120.224748,30.25926),
new BMap.Point(120.220588,30.26135)];
var pppoint = new BMap.Point(120.222043,30.259197);
var result = BMapLib.GeoUtils.isPointInPolygon(pppoint, _ppolygon);
alert("result:"+result);
返回结果为 true;
另外我查找api ,判断一个点是否在可视范围内,
BMapLib.GeoUtils.isPointInRect(point, bounds) Boolean
判断点是否在矩形内
不管我怎么调,都是报错,报lng不存在,请遇到类似问题的兄弟指点一下。