欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php批量转换谷歌地图坐标为百度地图坐标

程序员文章站 2022-06-15 18:12:52
...
获取POI lat lon

大众点评网
1. if you find a shop, which has the following link
www.dianping.com/shop/3174400/
2. manually attache map to make the link looks like
www.dianping.com/shop/3174400/map
3. do a view source on that page
in the middle of the page, you will find something like
p: “HETHVFZVVJDHUD”
m: $(“ShopGMap”)
shopId: “3174400″
the p: number is the encoded Lat, lon value
following is the script to decode it


jquery test






以上是js 方式转换。
下面是php方式


#echo $位置.”\n”;
#echo $地图x轴.”\n”;
#echo $地图y轴.”\n”;

$db_host = “localhost”;//服务器
$db_user = “root”;//用户名
$db_psw = “123456″;//密码
$db_name = “dianping”;//数据库名
$connection = mysql_connect($db_host,$db_user,$db_psw) or die(“连接服务器失败”);
mysql_select_db($db_name,$connection) or die(“选择数据库失败”);

mysql_query(“set names’utf-8′”); //utf8

set_time_limit(0);//防止超时。

$querysql = “select * from dianping ” ; //
$queryresult = mysql_query($querysql) or die(“查询数据失败”);//执行查询

while($row = mysql_fetch_array($queryresult)){

$array = decode($row['map']);
$string = $array['0'].”,”.$array['1'];
echo $string.”
”;
$id = $row['id'];
$UpdateQuery = “update dianping set map = ‘$string’ where id = ‘$id’”;
$UpdateQueryResult = mysql_query($UpdateQuery) or die(“查询数据失败”); //执行查询
}

/*发现有时候坐标字符串会改变,但是转换出来的坐标不会变。
$poi = ‘IJJTHFZVITEBVS’;
$poi1 = ‘IJJTGDZVITEBVA’;
$poiss = decode($poi);
$poiss1 = decode($poi1);
print_r($poi).’
\n’;
print_r($poiss).’
\n’;
print_r($poi1).’
\n’;
print_r($poiss1);
*/
function decode($poi) {
$settings = array(
‘digi’=> 16,
‘add’=> 10,
‘plus’=> 7,
‘cha’=> 36,
‘center’=> array(
‘lat’=> 34.957995,
‘lng’=> 107.050781,
‘isDef’=> true
)
);
$i = -1;
$h = 0;
$b = “”;
$j = strlen($poi);
$g = ord($poi{$j-1});
$c = substr($poi, 0, $j-1);
$j–;

for($e=0; $e $d = base_convert($c{$e}, $settings['cha'], 10) – $settings['add'];
if ($d>=$settings['add']) {
$d = $d- $settings['plus'];
}

$b .= base_convert($d, 10, $settings['cha']);
if ($d>$h) {
$i = $e;
$h = $d;
}
}
$a = base_convert(substr($b, 0, $i), $settings['digi'], 10);
$f = base_convert(substr($b, $i+1), $settings['digi'], 10);
$l = ($a+$f – intval($g))/2;
$k = ($f – $l)/100000;
$l /= 100000;
$lat = $k;
$lng = $l;
return array($lng, $lat);
}