`
hudeyong926
  • 浏览: 2016070 次
  • 来自: 武汉
社区版块
存档分类
最新评论

百度地图接口

阅读更多
<!DOCTYPE html>
<html>
<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,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
    <title>地图展示</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>

 点击获取经纬度以及地址

var geoc = new BMap.Geocoder();
map.addEventListener("click", function(e){
    //通过点击百度地图,可以获取到对应的point, 由point的lng、lat属性就可以获取对应的经度纬度
    console.log(e.point.lng + ", " + e.point.lat);
    var pt = e.point;
    geoc.getLocation(pt, function(rs){
        //addressComponents对象可以获取到详细的地址信息
        var addComp = rs.addressComponents;
        var site = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;
        //将对应的HTML元素设置值
        $("#site").val(site);
        $("#longitude").val(pt.lng);
        $("#latitude").val(pt.lat);
    });
});

 获取两点间距离,可以算出覆盖区域,比如覆盖区域10个坐标和中心点算距离

<script type="text/javascript">
	// 百度地图API功能
	var map = new BMap.Map("allmap");
	map.centerAndZoom("重庆",12);  //初始化地图,设置城市和地图级别。
	var pointA = new BMap.Point(106.486654,29.490295);  // 创建点坐标A--大渡口区
	var pointB = new BMap.Point(106.581515,29.615467);  // 创建点坐标B--江北区
	alert('从大渡口区到江北区的距离是:'+(map.getDistance(pointA,pointB)).toFixed(2)+' 米。');  //获取两点距离,保留小数点后两位
	var polyline = new BMap.Polyline([pointA,pointB], {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5});  //定义折线
	map.addOverlay(polyline);     //添加折线到地图上
</script>

3 坐标转换

我们知道,Google地图、soso地图与百度地图的坐标是不一样的,通常会差挺远一段距离。因此我们在微信中使用百度地图导航等百度地图API时,若 根据微信获取的用户位置信息的话,得到的结果通常是不准确的。这时我们就需要把微信获取的用户位置坐标转换成百度地图对应的坐标才可以。百度地图坐标转换API是一套以HTTP形式提供的坐标转换接口,用于将常用的非百度坐标(目前支持GPS设备获取的坐标、google地图坐标、soso地图坐标、amap地图坐标、mapbar地图坐标)转换成百度地图中使用的坐标

 

圆形区域搜索

<script type="text/javascript">
	// 百度地图API功能
	var map = new BMap.Map("allmap"); // 创建Map实例 divid=allmap
	var mPoint = new BMap.Point(116.404, 39.915);  
	map.enableScrollWheelZoom(true); //开启滚轮缩放
	map.centerAndZoom(mPoint,15); //坐标设置为地图中心点,缩放级别15

	var circle = new BMap.Circle(mPoint,1000,{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.3, strokeOpacity: 0.3});
    map.addOverlay(circle);
    var local =  new BMap.LocalSearch(map, {renderOptions: {map: map, autoViewport: false}});  
    local.searchNearby('餐馆',mPoint,1000);
</script>
百度地图Web服务API为开发者提供http接口,即开发者通过http形式发起检索请求,获取返回json或xml格式的检索数据。
geolocation的位置信息来源包括GPS、IP地址、RFID、WIFI和蓝牙的MAC地址、以及GSM/CDMS的ID等等。规范中没有规定使用这些设备的先后顺序,在HTML5的实现中,手机等移动设备当然优先使用GPS定位,而笔记本和部分平板,最准的定位是WIFI,至于网线上网的台式机,一般就只能使用IP来定位了,这个准确度最低。
<?php
/**
 * @desc 根据两点间的经纬度计算距离 输出距离/米
 * @param float $lat 纬度值
 * @param float $lng 经度值
 */
function getDistance($lat1, $lng1, $lat2, $lng2)
{
    $earthRadius = 6378138; //近似地球半径米
    $lat1 = ($lat1 * pi()) / 180;
    $lng1 = ($lng1 * pi()) / 180;
    $lat2 = ($lat2 * pi()) / 180;
    $lng2 = ($lng2 * pi()) / 180;
    $calcLongitude = $lng2 - $lng1;
    $calcLatitude = $lat2 - $lat1;
    $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);
    $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
    $calculatedDistance = $earthRadius * $stepTwo;
    return round($calculatedDistance);
}
/**
 *计算某个经纬度的周围某段距离的正方形的四个点
 *
 * @param lng float 经度
 * @param lat float 纬度
 * @param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
 * @return array 正方形的四个点的经纬度坐标
 */
public function returnSquarePoint($lng, $lat, $distance = 0.5) {
    $earthRadius = 6378.138; //近似地球半径km
    $dlng = 2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat)));
    $dlng = rad2deg($dlng);
    $dlat = $distance / $earthRadius;
    $dlat = rad2deg($dlat);
    return array(
        'left-top' => array('lat' => $lat + $dlat, 'lng' => $lng - $dlng),
        'right-top' => array('lat' => $lat + $dlat, 'lng' => $lng + $dlng),
        'left-bottom' => array('lat' => $lat - $dlat, 'lng' => $lng - $dlng),
        'right-bottom' => array('lat' => $lat - $dlat, 'lng' => $lng + $dlng)
    );
}
//计算实体建筑与当前坐标的距离,按距离升序
function calculationEntitiesFromLocation($local_x, $local_y)
{
    foreach ($results as $info) {
        $distance = getDistance($local_x, $local_y, $info->lat, $info->lng);
        $shopSortArrays[$distance] = $info;
    }
    ksort($shopSortArrays); //排序
    return $shopSortArrays;
}

 

百度地图API地理位置和坐标转换

1.由地名(省份、城市、街道等)得到其对应的百度地图坐标:

http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&address=北京市

2.由坐标反解得到对应的地址:http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&location=纬度(Latitude),经度(Longitude)

function geoCoder() {
    marker.setPosition(point);
    var send = {
        ak: "{:C('BAIDU_MAP_AK')}",
        location: point.lat + ',' + point.lng,
        output: 'json',
        pois: 1
    };
    $.ajax({
        url: 'http://api.map.baidu.com/geocoder/v2/',
        dataType: 'jsonp',
        data: send,
        success: function (data) {
            if (data.status == 0 && data.result) {
                var pois = data.result.pois;
                addressList = pois;
                makeList(pois);
            }
        }
    })
}

$squares = $this->returnSquarePoint($latitude, $longitude, 5);
//查询范围内的坐标
"where latitude between {$squares['right-bottom']['lat']} and {$squares['left-top']['lat']} and longitude between {$squares['left-top']['lng']} and {$squares['right-bottom']['lng']}";

 
 

 
 
 
  • html5geo.rar (1.1 KB)
  • 描述: html5的geolocation来获取经纬度
  • 下载次数: 0
  • 大小: 83.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics