IT学习联盟

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
IT学习联盟 门户 文章 php 查看内容

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

2012-8-18 03:28| 发布者: admin| 查看: 814| 评论: 0

获取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
 
 
<title>jquery test</title>
<script type="text/javascript" src="js/jquery-1.5.1.js"></script>
<script type="text/javascript" src="js/jquery-form-js.js"></script>
 
<script type="text/javascript">
          var settings = { digi: 16, add: 10, plus: 7, cha: 36, center: { lat: 34.957995, lng: 107.050781, isDef: true} };
    function decode(poi) {
          //alert(poi);
        var index = -1;
        var count = 0;
        var code = "";
        var len = poi.length;
        var apiKey = poi.charCodeAt(len - 1);
        poi = poi.substring(0, len - 1);
        len--;
        for (var i = 0; i < len; i++) {
            var hash = parseInt(poi.charAt(i), settings.cha) - settings.add;
            if (hash >= settings.add) {
                hash = hash - settings.plus;
            }
            code += (hash).toString(settings.cha);
            if (hash > count) {
                index = i;
                count = hash;
            }
        }
        var subLL = parseInt(code.substring(0, index), settings.digi);
        var addLL = parseInt(code.substring(index + 1), settings.digi);
        var lng = (subLL + addLL - parseInt(apiKey)) / 2;
        var lat = (addLL - lng) / 100000.0;
        lng /= 100000.0;
 
        $('#lat')
.val(lat);
        $('#lng').val(lng);
        //return { "lat": lat, "lng": lng };
        $('#sql').val("update site set thegeom=ST_GeomFromText('POINT("+ lng + " " + lat + ")',4326) where siteid=");
 
    }; 
</script>
 
 
以上是js 方式转换。
下面是php方式
 
 
<?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.”<br />”;
$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).’<br />\n’;
print_r($poiss).’<br />\n’;
print_r($poi1).’<br />\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<$j; $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);
}
 
 php批量转换谷歌地图坐标为百度地图坐标 - InSun - Minghacker is Insun
Archiver|IT学习联盟| 网站地图

Powered by Discuz! X2.5© 2001-2010 世界学习室 大伟制作

GMT+8, 2018-2-26 05:14 , Processed in 0.099072 second(s), 12 queries .