<?php
/***
*
#–地图位置计算类库
$ipanying = new ipanying(); //实例化地图类库
#–构造商家数据坐标集
$data =array(
0 =>array(
‘mid’=>’111’,
‘lng’=>’111.111’,
‘lat’=>’22.22’
),
1 =>array(
‘mid’=>’112’,
‘lng’=>’112.112’,
‘lat’=>’23.23’
)
);
#–数据回调URL,把计算出的用户与商家的实际距离进行AJAX请求该URL
$return_url = ‘http://’.$_SERVER[‘HTTP_HOST’].’/ipanying.php’;
echo $ipanyingmap->getUserDir($data, $return_url, ‘color:red’);
*/
class ipanying{
/***
*
* @param unknown $ipanying #–商家地理位置二维数组
* @param unknown $return_url #–计算出的距离的数据AJAX请求URL
* @param unknown $style #–INPUT样式
* @param string $text #–显示的文字,比如没获取之前可以说获取位置,获取成功之后可以是更新位置等
* @param string $key #–KEY密钥
* @return string #–返回一个JS代码的页面字符串
* 注:在return接收页,lng,lat实际为用户的坐标数据,type=’dir’,
* 获取数据之后,销毁POST的lng,lat,type
*/
function getUserDir($ipanying,$return_url,$style,$text=’获取位置’,$key=’您的KEY值’){
$html='<script type=”text/javascript” src=”ipanying.js”></script>’;
$html.=”
<script type=’text/javascript’ src=’http://webapi.amap.com/maps?v=1.3&key=”.$key.”‘></script>
<script>
var usermap, geolocation;
var ipanyingmap_url='”.$return_url.”‘;
function getAddress(){
usermap = new AMap.Map(‘container-ipanying’, {
resizeEnable: true
});
usermap.plugin(‘AMap.Geolocation’, function() {
var geolocation = new AMap.Geolocation({
enableHighAccuracy: true,
timeout: 10000,
buttonOffset: new AMap.Pixel(10, 20),
zoomToAccuracy: true,
buttonPosition:’RB’
});
usermap.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, ‘complete’, onComplete);
});
}
//解析定位结果
function onComplete(data) {
var lng = data.position.getLng();
var lat = data.position.getLat();
if(lng==null || lng==undefined || lat==null || lat==undefined){
alert(‘用户坐标为空,无法计算’);
return false;
}
var ipanying = new Array();
“;
#—循环输出商家数据到JS
for($k=0;$k<count($ipanying);$k++){
$html.=”ipanying[$k]=new Array();
ipanying[$k][‘mid’]=”.$ipanying[$k][‘mid’].”;
ipanying[$k][‘dir’] = [“.$ipanying[$k][‘lng’].”,”.$ipanying[$k][‘lat’].”];”;
}
$html.=”
shangjiamaps(ipanying,lng,lat);
} //onComplete结束
function shangjiamaps(lnglats,xdir,ydir){ //位置计算方法
var str =’lng=’+xdir+’&lat=’+ydir;
for (var i = 0; i < lnglats.length; i++) {
var marker = new AMap.Marker({
position: lnglats[i],
//map: map
});
if(xdir == ” || xdir == undefined || xdir==null || ydir == ” || ydir == undefined || ydir==null){
var isadd =’nulls’;
} else {
var islnglat = new AMap.LngLat(xdir,ydir);
var cl = islnglat.distance(lnglats[i][‘dir’]);
var isadd = cl.toFixed(0);
}
str +=’&’+lnglats[i][‘mid’]+’=’+isadd;
//alert(‘距离商家ID’+lnglats[i][‘mid’]+’有’+isadd+’米’);
}
qingxinzui_alert(ipanyingmap_url,str,’dir’);
//alert(str);
}
</script>”;
$html.='<input type=”submit” onclick=”getAddress();” value=”‘.$text.'” style=”‘.$style.'” />’;
return $html;
}
}
if(isset($_POST[‘type’]) && $_POST[‘type’]==’dir’){
//处理回调
unset($_POST[‘type’]; //销毁类型参数
$userlng=$_POST[‘lng’]; //提取用户经度
$userlat=$_POST[‘lat’]; //提取用户纬度
//在这里获取的用户经纬度信息自行保留至SESSION或者COOKIE或者SQL
unset($_POST[‘lng’]); //销毁POST经度
unset($_POST[‘lat’]); //销毁POST纬度
$ipanying = $_POST; //数据给予数组
$text = ”;
foreach($ipanying as $key => $value){
$text.=’用户距离商家ID’.$key.’的直线距离=’.$value.’米 <br \>’;
}
}
扩展类库下载:高德地图距离计算类库PHP版
请尊重开源,转发请注明出处!
关于作者