声明:转载自废客论坛。本程序代码只供学习,不可用于非法途径!后果自负!!!
终于搞定地图经纬度偏移修正数据库,在网上下的google 0.01精度校正数据,共处理 9845988 条数据,总计耗时 120.116666667分钟,近千万级数据量,累死!看来还得用二分查找法。
(注:需要校正库的我只能提供精度为0.1修正数据,至于为什么不能提供0.01的国家法律有明文规定小废这里就不再做说明了)
1.修正经纬度偏移的代码与算法:
- <?php
- /*
- 版本编号:101105082215
- 文件名称:sql.php
- 更新日期:2011-05-08
- 代码修改:feikeq
- 代码功能:利用0.01精度校正库文件修正经纬度偏移。
- */
- header("Content-Type:text/html; charset=utf-8");
- define('__dat_db__' , 'offset.dat' );// DAT数据文件
- define('datmax' , 9813675 );// 数据条数-结束记录
- //SELECT * FROM `offset_data` where lon=7350 and lat=3930
- // # xz.php?lat=39.914914&lon=116.460633
- $lon=$_GET['lon'];
- $lat=$_GET['lat'];
- $tmplon=intval($lon * 100);
- $tmplat=intval($lat * 100);
- //经度到像素X值
- function lngToPixel($lng,$zoom) {
- return ($lng+180)*(256<<$zoom)/360;
- }
- //像素X到经度
- function pixelToLng($pixelX,$zoom){
- return $pixelX*360/(256<<$zoom)-180;
- }
- //纬度到像素Y
- function latToPixel($lat, $zoom) {
- $siny = sin($lat * pi() / 180);
- $y=log((1+$siny)/(1-$siny));
- return (128<<$zoom)*(1-$y/(2*pi()));
- }
- //像素Y到纬度
- function pixelToLat($pixelY, $zoom) {
- $y = 2*pi()*(1-$pixelY /(128 << $zoom));
- $z = pow(M_E, $y);
- $siny = ($z -1)/($z +1);
- return asin($siny) * 180/pi();
- }
- function xy_fk( $number ){
- $fp = fopen(__dat_db__,"rb"); //■1■.将 r 改为 rb
- $myxy=$number;#"112262582";
- $left = 0;//开始记录
- $right = datmax;//结束记录
- //开如用二分法来查找查数据
- while($left <= $right){
- $recordCount =(floor(($left+$right)/2))*8; //取半
- //echo "运算:left=".$left." right=".$right." midde=".$recordCount."<br />";
- @fseek ( $fp, $recordCount , SEEK_SET ); //设置游标
- $c = fread($fp,8); //读8字节
- $lon = unpack('s',substr($c,0,2));
- $lat = unpack('s',substr($c,2,2));
- $x = unpack('s',substr($c,4,2));
- $y = unpack('s',substr($c,6,2));
- $jwd=$lon[1].$lat[1];
- //echo "找到的经纬度:".$jwd;
- if ($jwd==$myxy){
- fclose($fp);
- return $x[1]."|".$y[1];
- break;
- }else if($jwd<$myxy){
- //echo " > ".$myxy."<br />";
- $left=($recordCount/8) +1;
- }else if($jwd>$myxy){
- //echo " < ".$myxy."<br />";
- $right=($recordCount/8) -1;
- }
- }
- fclose($fp);
- }
- $offset =xy_fk($tmplon.$tmplat);
- $off=explode('|',$offset);
- $lngPixel=lngToPixel($lon,18)-$off[0];
- $latPixel=latToPixel($lat,18)-$off[1];
- echo pixelToLat($latPixel,18).",".pixelToLng($lngPixel,18);
- ?>
2.将地址文字采集字符经纬度并将字符经纬度解密成数字经纬度(这个示例用的是mapabc,当然你也可以用其它地图如google或mapbar等..)
- <?php
- /*
- 版本编号:101105091046
- 文件名称:sql.php
- 更新日期:2011-05-09
- 代码修改:feikeq
- 代码功能:将数据库内的地址文字采集字符经纬度并将字符经纬度解密成数字经纬度,然后利用0.01精度校正库文件修正经纬度偏移。
- */
- header("Content-Type:text/html; charset=utf-8");
- $mysql_server_name="localhost"; //数据库服务器名称
- $mysql_username="root"; // 连接数据库用户名
- $mysql_password=""; // 连接数据库密码
- $mysql_database="ycyw"; // 数据库的名字
- $mysql_table="ycyw_address_test"; // 数据表
- $start= 0 ;// 开始数据记录
- $over= 99999 ;// 结束数据记录
- //如果用原来的JS调用解密处理180条数据用时45秒左右现在只要15秒。
- $phptime_1 = explode(' ', microtime());
- /* // mapabc经纬度加密解密 - 开始 // */
- //MapAbc中使用编码坐标与10进度方式的坐标转换js方法,仅供参考
- $__keys__ = array(
- array(0, 2, 1, 2, 8, 9, 4, 1, 7, 2, 5, 3, 9),
- array(0, 3, 2, 2, 9, 5, 8, 2, 6, 8, 4, 6, 3),
- array(1, 5, 2, 7, 1, 4, 7, 2, 4, 1, 4, 3, 0),
- array(0, 7, 8, 3, 4, 9, 0, 6, 7, 7, 4, 4, 2),
- array(0, 2, 1, 8, 4, 9, 3, 2, 3, 1, 5, 7, 8),
- array(0, 0, 9, 5, 4, 7, 3, 0, 8, 7, 5, 2, 8),
- array(0, 1, 5, 1, 1, 8, 2, 7, 1, 9, 1, 3, 5),
- array(0, 5, 2, 5, 6, 0, 3, 4, 6, 7, 1, 3, 5),
- array(1, 3, 2, 1, 8, 1, 8, 3, 7, 9, 2, 7, 0),
- array(1, 2, 7, 7, 4, 3, 1, 5, 5, 0, 6, 4, 4),
- array(1, 5, 2, 8, 9, 2, 5, 9, 6, 7, 3, 3, 5),
- array(1, 7, 9, 4, 5, 0, 9, 4, 9, 6, 1, 9, 9),
- array(0, 6, 8, 3, 3, 6, 3, 5, 2, 0, 0, 9, 1),
- array(1, 1, 1, 4, 7, 8, 6, 9, 6, 8, 8, 4, 6),
- array(0, 5, 2, 1, 2, 5, 7, 0, 0, 4, 7, 4, 1),
- array(0, 7, 6, 4, 2, 3, 9, 0, 7, 8, 5, 6, 7),
- array(0, 1, 7, 6, 0, 5, 4, 7, 6, 7, 7, 5, 7),
- array(0, 5, 2, 9, 8, 1, 7, 8, 3, 8, 5, 4, 5),
- array(0, 4, 3, 1, 2, 8, 3, 7, 0, 9, 4, 8, 8),
- array(1, 0, 6, 7, 9, 4, 3, 5, 2, 9, 8, 7, 7),
- array(1, 6, 4, 4, 6, 7, 1, 4, 4, 2, 6, 7, 5),
- array(0, 8, 1, 7, 7, 5, 2, 6, 4, 3, 9, 7, 5),
- array(1, 7, 0, 5, 6, 2, 5, 2, 7, 4, 6, 2, 8),
- array(0, 4, 9, 2, 3, 0, 5, 4, 7, 8, 7, 0, 5),
- array(1, 1, 0, 5, 1, 7, 2, 8, 7, 2, 6, 9, 3),
- array(1, 4, 2, 3, 6, 1, 5, 3, 2, 0, 3, 6, 2),
- array(1, 1, 6, 5, 1, 0, 6, 8, 9, 7, 1, 7, 9),
- array(0, 6, 5, 4, 0, 7, 1, 7, 6, 2, 5, 4, 2),
- array(1, 9, 8, 6, 6, 6, 8, 4, 5, 4, 0, 4, 0),
- array(1, 2, 7, 1, 5, 0, 6, 8, 0, 1, 3, 7, 9),
- array(1, 1, 6, 4, 9, 8, 6, 0, 6, 2, 1, 9, 8),
- array(0, 0, 1, 9, 5, 3, 3, 9, 6, 7, 4, 1, 1),
- array(0, 2, 8, 5, 7, 8, 6, 7, 3, 3, 1, 6, 4),
- array(1, 8, 2, 5, 8, 4, 7, 6, 8, 8, 5, 7, 6),
- array(0, 8, 3, 4, 9, 6, 1, 7, 8, 3, 0, 5, 5),
- array(1, 3, 2, 6, 7, 4, 2, 8, 7, 4, 9, 6, 8),
- array(1, 8, 8, 9, 3, 9, 1, 8, 5, 7, 2, 5, 0),
- array(0, 5, 8, 3, 1, 8, 8, 0, 3, 9, 3, 8, 1),
- array(1, 6, 0, 1, 1, 0, 3, 4, 3, 3, 3, 5, 9),
- array(1, 0, 5, 1, 7, 9, 6, 2, 4, 6, 0, 3, 5),
- array(1, 8, 2, 0, 9, 7, 1, 0, 5, 5, 8, 0, 6),
- array(1, 8, 9, 6, 7, 3, 9, 4, 1, 9, 6, 6, 2),
- array(0, 6, 0, 0, 8, 2, 6, 5, 9, 4, 1, 6, 2),
- array(1, 7, 9, 7, 9, 4, 4, 2, 1, 1, 5, 7, 4),
- array(1, 3, 0, 4, 3, 4, 6, 8, 6, 9, 1, 7, 0),
- array(0, 1, 2, 3, 9, 4, 1, 8, 7, 2, 2, 9, 8),
- array(1, 6, 5, 3, 2, 7, 6, 6, 9, 0, 0, 7, 7),
- array(1, 6, 8, 4, 9, 7, 8, 0, 3, 6, 5, 4, 8),
- array(0, 6, 6, 0, 9, 9, 4, 5, 5, 6, 8, 3, 7),
- array(1, 0, 1, 3, 4, 0, 0, 1, 4, 8, 5, 7, 0),
- array(1, 0, 2, 5, 8, 2, 2, 4, 8, 9, 7, 1, 6),
- array(1, 4, 2, 6, 6, 8, 4, 5, 6, 6, 4, 5, 9),
- array(1, 4, 4, 1, 7, 2, 0, 4, 6, 3, 3, 6, 7),
- array(0, 2, 2, 3, 8, 0, 0, 8, 6, 0, 2, 1, 7),
- array(0, 9, 4, 4, 8, 1, 2, 7, 3, 2, 6, 8, 0),
- array(0, 9, 8, 4, 2, 1, 4, 5, 2, 4, 9, 5, 1),
- array(0, 7, 2, 4, 7, 4, 3, 2, 4, 1, 5, 6, 9),
- array(1, 1, 8, 4, 8, 8, 8, 4, 3, 4, 1, 2, 5),
- array(0, 3, 2, 7, 5, 7, 0, 2, 7, 4, 5, 3, 5),
- array(0, 3, 0, 4, 6, 6, 6, 5, 7, 2, 1, 9, 5),
- array(1, 5, 6, 0, 1, 3, 2, 7, 3, 0, 9, 8, 6),
- array(0, 5, 5, 1, 7, 1, 0, 7, 9, 0, 3, 5, 7),
- array(0, 5, 4, 9, 7, 9, 7, 3, 8, 0, 1, 6, 3),
- array(1, 9, 2, 7, 3, 7, 9, 4, 3, 9, 8, 8, 2),
- array(0, 3, 1, 8, 9, 0, 9, 0, 4, 5, 5, 0, 9),
- array(1, 8, 6, 1, 7, 7, 2, 4, 7, 9, 2, 0, 8),
- array(0, 6, 1, 2, 7, 1, 4, 8, 4, 1, 1, 6, 0),
- array(0, 3, 9, 8, 5, 5, 3, 0, 8, 7, 9, 3, 5),
- array(0, 8, 4, 3, 7, 3, 1, 8, 2, 9, 1, 4, 7),
- array(0, 1, 5, 3, 4, 0, 5, 5, 5, 8, 0, 7, 2),
- array(0, 1, 7, 1, 8, 2, 1, 9, 8, 6, 1, 7, 0),
- array(0, 7, 1, 6, 9, 7, 2, 7, 2, 4, 4, 3, 6),
- array(0, 6, 2, 7, 2, 3, 4, 9, 3, 0, 1, 6, 3),
- array(0, 2, 9, 1, 9, 9, 9, 1, 9, 5, 4, 4, 4),
- array(0, 1, 8, 7, 0, 0, 5, 2, 1, 5, 7, 4, 6),
- array(1, 9, 0, 8, 7, 3, 3, 5, 5, 4, 9, 0, 1),
- array(1, 5, 8, 0, 1, 7, 0, 2, 3, 7, 3, 2, 9),
- array(1, 3, 2, 0, 5, 2, 7, 5, 0, 2, 6, 8, 1),
- array(0, 2, 7, 2, 3, 2, 2, 9, 6, 9, 4, 1, 6),
- array(1, 6, 4, 7, 9, 6, 5, 9, 5, 8, 2, 7, 1),
- array(1, 8, 1, 2, 6, 0, 2, 4, 0, 8, 0, 1, 6),
- array(1, 6, 2, 4, 1, 2, 4, 1, 7, 2, 7, 0, 6),
- array(0, 1, 8, 0, 5, 0, 4, 5, 5, 1, 0, 4, 7),
- array(0, 8, 7, 6, 4, 3, 5, 5, 7, 8, 4, 9, 0),
- array(0, 2, 7, 7, 0, 1, 6, 6, 1, 0, 9, 3, 5),
- array(0, 7, 6, 9, 8, 3, 8, 6, 2, 9, 3, 7, 0),
- array(1, 6, 6, 6, 0, 3, 0, 1, 0, 2, 5, 6, 1),
- array(0, 0, 4, 5, 1, 0, 9, 4, 4, 9, 4, 0, 9),
- array(0, 1, 6, 9, 4, 7, 5, 7, 8, 3, 5, 7, 0),
- array(1, 2, 7, 1, 6, 6, 1, 5, 2, 8, 6, 3, 8),
- array(1, 9, 1, 6, 7, 5, 1, 7, 4, 7, 6, 1, 8),
- array(1, 7, 6, 7, 0, 2, 9, 6, 9, 8, 6, 7, 8),
- array(0, 9, 8, 7, 3, 8, 1, 5, 2, 5, 2, 7, 5),
- array(0, 7, 3, 5, 7, 9, 7, 6, 6, 9, 1, 7, 5),
- array(1, 6, 7, 3, 4, 4, 7, 6, 2, 6, 6, 2, 3),
- array(0, 1, 4, 2, 2, 8, 5, 0, 9, 2, 7, 3, 1),
- array(0, 1, 4, 2, 1, 0, 0, 2, 1, 8, 9, 8, 3),
- array(1, 7, 0, 8, 7, 9, 9, 6, 4, 8, 6, 2, 2),
- array(1, 9, 3, 9, 9, 8, 7, 0, 8, 1, 1, 7, 3),
- array(1, 0, 4, 3, 5, 8, 0, 4, 6, 5, 4, 5, 8),
- array(0, 4, 8, 0, 5, 2, 3, 2, 3, 9, 4, 2, 3),
- array(0, 7, 9, 0, 9, 7, 2, 7, 7, 0, 4, 8, 5),
- array(1, 6, 5, 5, 3, 3, 2, 6, 1, 3, 4, 7, 1),
- array(0, 2, 9, 0, 0, 2, 9, 1, 8, 8, 2, 8, 4),
- array(1, 3, 2, 5, 0, 6, 2, 5, 3, 3, 6, 1, 1),
- array(1, 9, 2, 9, 3, 3, 8, 9, 9, 7, 2, 3, 7),
- array(1, 1, 8, 4, 0, 8, 2, 4, 8, 0, 0, 9, 2),
- array(1, 5, 2, 6, 0, 6, 1, 3, 0, 4, 7, 3, 8),
- array(1, 9, 3, 8, 1, 1, 7, 8, 6, 9, 0, 6, 8),
- array(1, 3, 2, 7, 7, 2, 2, 4, 2, 5, 8, 3, 0),
- array(1, 1, 1, 0, 7, 7, 3, 4, 7, 3, 6, 6, 8),
- array(0, 9, 4, 2, 8, 9, 4, 8, 4, 3, 2, 5, 3),
- array(0, 1, 0, 9, 2, 7, 2, 3, 9, 4, 5, 0, 8),
- array(1, 0, 4, 5, 8, 4, 0, 0, 5, 2, 2, 1, 2),
- array(0, 5, 0, 4, 5, 3, 2, 5, 4, 1, 3, 6, 9),
- array(1, 3, 0, 2, 7, 8, 1, 7, 7, 3, 5, 5, 9),
- array(1, 3, 7, 0, 0, 5, 8, 1, 7, 5, 6, 5, 2),
- array(1, 8, 1, 9, 9, 9, 4, 8, 6, 0, 7, 7, 3),
- array(0, 8, 3, 6, 2, 7, 4, 2, 1, 9, 1, 6, 8),
- array(0, 4, 4, 4, 2, 6, 0, 4, 0, 1, 5, 1, 7),
- array(1, 2, 7, 4, 7, 6, 6, 6, 3, 7, 7, 2, 9),
- array(0, 9, 8, 9, 3, 3, 3, 9, 0, 7, 4, 2, 3),
- array(0, 7, 6, 0, 9, 1, 7, 2, 4, 5, 8, 3, 3),
- array(1, 6, 1, 5, 5, 3, 1, 3, 2, 1, 0, 5, 6),
- array(0, 6, 2, 4, 1, 6, 6, 3, 4, 9, 2, 7, 0),
- array(1, 6, 3, 2, 3, 6, 1, 7, 7, 5, 6, 7, 1),
- array(1, 0, 4, 9, 2, 3, 3, 6, 2, 6, 9, 3, 2),
- array(0, 3, 7, 3, 9, 1, 3, 9, 5, 8, 5, 8, 9),
- array(1, 9, 0, 0, 3, 0, 9, 1, 2, 7, 8, 0, 3),
- array(1, 0, 1, 2, 7, 7, 0, 0, 1, 8, 4, 1, 1),
- array(0, 0, 5, 5, 9, 6, 9, 8, 1, 2, 1, 7, 2),
- array(0, 1, 8, 7, 9, 0, 3, 5, 6, 3, 2, 9, 4),
- array(1, 3, 1, 5, 7, 5, 0, 8, 5, 3, 2, 5, 0),
- array(1, 1, 7, 3, 5, 0, 7, 7, 9, 6, 8, 9, 0),
- array(0, 7, 7, 0, 9, 4, 2, 8, 8, 0, 2, 2, 0),
- array(1, 6, 5, 8, 3, 1, 0, 9, 0, 2, 7, 2, 9),
- array(1, 3, 5, 8, 4, 7, 6, 3, 1, 4, 3, 4, 7),
- array(0, 8, 8, 7, 8, 2, 7, 0, 3, 9, 6, 2, 9),
- array(1, 1, 6, 2, 6, 7, 5, 2, 5, 0, 8, 5, 5),
- array(0, 9, 6, 7, 3, 0, 2, 3, 9, 5, 3, 7, 4),
- array(1, 5, 2, 7, 3, 6, 0, 8, 3, 3, 9, 0, 3),
- array(0, 3, 6, 8, 9, 1, 7, 7, 3, 8, 7, 3, 8),
- array(0, 1, 2, 5, 4, 9, 8, 0, 3, 6, 4, 0, 4),
- array(1, 2, 4, 1, 6, 8, 1, 5, 8, 3, 6, 4, 3),
- array(1, 9, 3, 1, 0, 8, 4, 4, 0, 1, 6, 0, 8),
- array(0, 4, 5, 1, 0, 2, 1, 7, 1, 6, 1, 3, 3),
- array(0, 9, 5, 6, 8, 2, 2, 4, 0, 3, 9, 8, 1),
- array(1, 9, 3, 5, 4, 3, 1, 2, 2, 2, 0, 8, 7),
- array(0, 5, 6, 8, 1, 5, 7, 7, 8, 9, 4, 0, 6),
- array(1, 0, 4, 6, 4, 6, 7, 4, 6, 0, 3, 6, 2),
- array(1, 3, 3, 0, 2, 5, 3, 1, 9, 2, 3, 6, 8),
- array(0, 6, 9, 6, 3, 6, 9, 6, 2, 1, 5, 0, 7),
- array(1, 6, 5, 3, 0, 0, 0, 6, 2, 3, 8, 6, 0),
- array(1, 0, 7, 1, 2, 0, 3, 0, 3, 0, 8, 8, 0),
- array(0, 7, 1, 4, 3, 1, 8, 6, 7, 8, 1, 5, 4),
- array(0, 6, 3, 5, 5, 4, 8, 9, 4, 8, 3, 1, 7),
- array(0, 6, 4, 3, 1, 0, 7, 2, 9, 0, 5, 6, 7),
- array(0, 6, 3, 7, 7, 0, 6, 8, 6, 7, 4, 6, 0),
- array(0, 4, 2, 7, 2, 4, 1, 4, 6, 1, 8, 1, 7),
- array(1, 1, 7, 9, 0, 7, 0, 5, 1, 8, 6, 3, 5),
- array(1, 2, 0, 2, 7, 2, 7, 9, 1, 2, 7, 0, 3),
- array(0, 3, 3, 6, 2, 0, 9, 1, 1, 0, 3, 5, 8),
- array(1, 4, 0, 9, 9, 2, 5, 6, 5, 6, 8, 0, 5),
- array(0, 3, 5, 3, 3, 3, 4, 6, 7, 5, 7, 0, 5),
- array(0, 5, 8, 8, 5, 8, 5, 4, 7, 0, 5, 7, 3),
- array(0, 5, 0, 7, 6, 4, 2, 7, 8, 3, 6, 1, 4),
- array(0, 4, 7, 8, 6, 5, 3, 7, 7, 5, 7, 0, 7),
- array(1, 3, 6, 5, 3, 0, 8, 5, 4, 9, 7, 7, 1),
- array(1, 4, 8, 2, 8, 2, 8, 3, 4, 9, 4, 6, 7),
- array(1, 4, 1, 6, 9, 4, 5, 7, 7, 4, 6, 7, 7),
- array(0, 2, 8, 2, 3, 0, 7, 7, 1, 0, 1, 1, 0),
- array(1, 2, 2, 4, 5, 4, 7, 1, 0, 1, 8, 6, 7),
- array(0, 0, 7, 2, 4, 7, 2, 8, 2, 4, 4, 3, 9),
- array(1, 9, 1, 3, 2, 4, 1, 3, 3, 7, 5, 6, 1),
- array(1, 4, 7, 4, 6, 8, 6, 7, 4, 4, 1, 2, 8),
- array(0, 1, 6, 7, 3, 9, 0, 4, 7, 2, 9, 6, 7),
- array(0, 1, 3, 9, 1, 1, 1, 1, 6, 3, 0, 1, 1),
- array(1, 2, 7, 0, 2, 0, 7, 9, 7, 2, 1, 5, 2),
- array(0, 9, 1, 0, 4, 2, 8, 2, 2, 4, 2, 4, 0),
- array(1, 1, 7, 9, 7, 9, 3, 0, 5, 3, 4, 5, 2),
- array(0, 0, 7, 4, 3, 0, 8, 6, 7, 7, 7, 9, 6),
- array(0, 7, 0, 4, 0, 6, 7, 6, 3, 2, 0, 7, 1),
- array(0, 4, 8, 8, 0, 5, 3, 0, 7, 8, 4, 7, 9),
- array(0, 6, 3, 3, 3, 6, 6, 3, 7, 0, 4, 8, 3),
- array(0, 1, 2, 0, 6, 0, 3, 1, 0, 9, 9, 8, 0),
- array(0, 7, 0, 3, 8, 2, 5, 0, 7, 5, 0, 0, 4),
- array(1, 8, 8, 8, 2, 0, 6, 2, 5, 6, 2, 3, 2),
- array(1, 6, 2, 5, 8, 0, 1, 9, 7, 3, 7, 6, 0),
- array(0, 3, 6, 1, 9, 1, 6, 8, 2, 6, 5, 2, 5),
- array(0, 3, 9, 7, 8, 9, 4, 5, 4, 8, 5, 5, 1),
- array(1, 1, 5, 5, 2, 5, 3, 4, 5, 3, 5, 0, 9),
- array(1, 0, 9, 4, 9, 6, 1, 7, 0, 0, 6, 0, 1),
- array(0, 8, 4, 9, 9, 9, 3, 4, 1, 3, 5, 7, 7),
- array(0, 7, 8, 0, 0, 3, 5, 5, 9, 4, 1, 8, 1),
- array(1, 7, 3, 7, 6, 3, 2, 5, 6, 2, 7, 5, 0),
- array(0, 0, 2, 6, 0, 6, 6, 2, 7, 6, 1, 6, 2),
- array(1, 1, 6, 4, 7, 7, 9, 7, 0, 6, 2, 6, 6),
- array(0, 2, 1, 1, 4, 7, 6, 8, 8, 8, 9, 4, 3),
- array(0, 0, 8, 7, 5, 1, 9, 3, 1, 9, 8, 6, 0),
- array(0, 3, 4, 4, 0, 7, 1, 8, 7, 2, 7, 9, 9),
- array(1, 0, 4, 5, 3, 6, 0, 6, 6, 6, 4, 1, 5),
- array(0, 9, 7, 9, 9, 5, 9, 2, 3, 0, 4, 6, 2),
- array(1, 6, 5, 2, 7, 2, 1, 3, 5, 2, 5, 2, 1),
- array(1, 9, 9, 4, 8, 6, 3, 7, 8, 3, 3, 0, 6),
- array(0, 8, 2, 6, 6, 7, 8, 2, 1, 3, 2, 9, 2),
- array(0, 4, 8, 1, 9, 2, 4, 8, 4, 5, 4, 6, 4),
- array(1, 1, 7, 0, 7, 3, 5, 1, 4, 9, 5, 3, 1),
- array(1, 7, 8, 8, 3, 5, 3, 1, 5, 7, 6, 1, 9),
- array(1, 4, 5, 6, 5, 3, 2, 5, 3, 0, 3, 5, 5),
- array(0, 0, 2, 1, 3, 8, 9, 1, 0, 9, 7, 6, 7),
- array(0, 0, 7, 6, 1, 9, 1, 9, 5, 8, 9, 4, 0),
- array(1, 5, 4, 4, 6, 8, 7, 3, 9, 9, 0, 7, 4),
- array(1, 3, 0, 4, 8, 1, 2, 3, 9, 7, 1, 9, 5),
- array(1, 2, 6, 1, 4, 6, 9, 4, 7, 1, 1, 2, 6),
- array(0, 1, 6, 7, 5, 8, 3, 2, 7, 0, 4, 1, 1),
- array(1, 6, 2, 7, 8, 7, 6, 8, 7, 2, 0, 3, 3),
- array(0, 2, 1, 9, 2, 6, 7, 5, 9, 5, 2, 2, 2),
- array(0, 5, 2, 0, 4, 7, 7, 3, 8, 1, 5, 0, 9),
- array(1, 6, 5, 8, 6, 4, 0, 9, 6, 9, 0, 1, 8),
- array(1, 2, 0, 8, 7, 9, 2, 4, 4, 0, 9, 8, 9),
- array(1, 6, 5, 2, 0, 6, 1, 0, 4, 4, 1, 5, 8),
- array(1, 5, 4, 2, 5, 6, 2, 5, 6, 2, 2, 9, 5),
- array(1, 6, 9, 7, 2, 5, 1, 0, 6, 9, 1, 8, 1),
- array(0, 0, 3, 9, 9, 0, 6, 7, 9, 5, 7, 4, 6),
- array(1, 5, 8, 9, 9, 0, 6, 7, 9, 7, 9, 6, 1),
- array(1, 3, 6, 4, 6, 3, 6, 8, 4, 5, 2, 8, 3),
- array(0, 7, 4, 8, 4, 9, 7, 8, 0, 0, 1, 2, 2),
- array(0, 4, 2, 9, 1, 3, 8, 8, 3, 0, 0, 9, 8),
- array(1, 9, 0, 9, 2, 1, 2, 9, 3, 6, 5, 3, 2),
- array(1, 1, 0, 2, 0, 5, 9, 9, 5, 4, 7, 8, 9),
- array(1, 6, 0, 5, 9, 9, 1, 9, 0, 5, 4, 7, 1),
- array(1, 0, 4, 0, 0, 3, 2, 4, 1, 6, 4, 6, 5),
- array(1, 7, 3, 7, 3, 3, 7, 6, 1, 7, 7, 8, 6),
- array(0, 9, 1, 7, 3, 5, 1, 8, 9, 3, 8, 6, 2),
- array(1, 4, 9, 9, 3, 7, 5, 4, 4, 4, 4, 4, 0),
- array(0, 3, 7, 7, 4, 3, 6, 1, 1, 3, 5, 1, 6),
- array(0, 8, 5, 4, 3, 9, 3, 3, 1, 3, 4, 8, 1),
- array(1, 6, 1, 9, 4, 6, 4, 6, 4, 5, 2, 1, 5),
- array(1, 1, 1, 6, 8, 3, 9, 1, 1, 3, 0, 9, 9),
- array(0, 5, 1, 6, 8, 4, 8, 8, 2, 4, 4, 9, 2),
- array(0, 2, 3, 0, 1, 4, 2, 7, 1, 9, 9, 0, 6),
- array(0, 8, 4, 2, 5, 1, 4, 9, 5, 2, 0, 4, 3),
- array(0, 9, 1, 2, 5, 0, 6, 6, 5, 0, 3, 1, 8),
- array(1, 7, 8, 7, 1, 7, 4, 6, 3, 3, 3, 3, 9),
- array(0, 3, 7, 2, 9, 4, 1, 5, 4, 7, 2, 1, 0),
- array(1, 2, 8, 1, 1, 6, 4, 7, 8, 2, 0, 5, 2),
- array(1, 8, 3, 5, 4, 8, 0, 9, 7, 8, 0, 1, 8),
- array(1, 7, 9, 9, 0, 4, 5, 7, 2, 9, 0, 1, 9),
- array(0, 6, 6, 5, 6, 7, 0, 4, 0, 7, 8, 5, 1),
- array(0, 6, 0, 6, 3, 1, 1, 5, 0, 9, 2, 2, 3),
- array(1, 6, 3, 5, 6, 7, 1, 6, 6, 9, 7, 4, 9),
- array(0, 9, 5, 9, 8, 2, 4, 3, 3, 2, 3, 5, 6),
- array(0, 1, 6, 3, 8, 9, 9, 2, 8, 2, 5, 8, 6),
- array(1, 4, 7, 6, 6, 5, 7, 3, 3, 3, 4, 1, 1),
- array(1, 8, 2, 9, 0, 3, 8, 6, 8, 3, 3, 7, 3),
- array(0, 2, 8, 4, 8, 5, 4, 8, 9, 5, 0, 5, 7)
- );
- //字符串中第一个字符的ASCII码
- function uniord($str,$from_encoding=false) {
- $from_encoding = $from_encoding ? $from_encoding : 'UTF-8';
- if(strlen($str)==1) {
- return ord($str);
- }
- $str = mb_convert_encoding($str, 'UCS-4BE', $from_encoding);
- $tmp = unpack('N',$str);
- print_r($str);
- return $tmp[1];
- }
- //ASCII码转换为字符串
- function fromCharCode($codes) {
- if (is_scalar($codes)) $codes= func_get_args();
- $str= '';
- foreach ($codes as $code) $str.= chr($code);
- return $str;
- }
- function getDecodeCoordinate($enLonLat) {
- global $__keys__;
- //取编码坐标的后4位字符
- $last4cha = substr($enLonLat, mb_strlen($enLonLat,'utf-8') - 4, mb_strlen($enLonLat,'utf-8'));
- //将后4位字符转成对应的ASCII值
- $last4asc = array();
- for ($i = 0; $i < mb_strlen($last4cha,'utf-8'); $i++) {
- //$last4asc.push($last4cha.charCodeAt($i));
- //php的ord替代
- array_push($last4asc,uniord(mb_substr($last4cha, $i, 1, 'utf-8')));
- }
- //取4个数值的后两位,组成一个新的8位数字,代表key所在的索引值
- $keyposition = 0;
- $keyposition |= $last4asc[0] & 3;
- $keyposition |= ($last4asc[1] & 3) << 2;
- $keyposition |= ($last4asc[2] & 3) << 4;
- $keyposition |= ($last4asc[3] & 3) << 6;
- //根据索引值取对应的key,key是一个长度为13的数组
- $keys = $__keys__[$keyposition];
- //取编码坐标的去掉最后4位的所有字符
- $lonlat = substr($enLonLat,0, mb_strlen($enLonLat,'utf-8') - 4);
- //将所有字符转成对应的ASCII值
- $lonlatasc = array();
- for ($i = 0; $i < mb_strlen($lonlat,'utf-8'); $i++) {
- //$lonlatasc.push($lonlat.charCodeAt($i));
- array_push($lonlatasc,uniord( mb_substr($lonlat, $i, 1, 'utf-8') ));
- }
- //根据key的第一位。。。
- $key1 = $keys[0];
- $fixed = 0;
- switch ($key1) {
- case 0:
- $fixed = 23;
- break;
- case 1:
- $fixed = 53;
- break;
- }
- //将所有的asc值进行处理
- for ($i = 0; $i < count($lonlatasc); $i++) {
- $lonlatasc[$i] -= $fixed;
- $lonlatasc[$i] -= $keys[$i + 1];
- }
- //将处理后的asc值转成对应的asc码
- $lonlatcha = array();
- for ($j = 0; $j < count($lonlatasc); $j++) {
- //$lonlatcha.push(String.fromCharCode($lonlatasc[$j]));
- array_push($lonlatcha,fromCharCode($lonlatasc[$j]));
- }
- //$deLonLat = $lonlatcha.join("");
- $deLonLat = '';
- foreach($lonlatcha AS $k=>$v){
- $deLonLat .= $v;
- }
- return $deLonLat;
- }
- /* // mapabc经纬度加密解密 - 结束 // */
- // 连接到数据库
- $conn=mysql_connect($mysql_server_name, $mysql_username,$mysql_password);
- mysql_select_db($mysql_database);
- mysql_query("SET NAMES UTF8", $conn);
- // 从表中提取信息的sql语句
- $strsql="SELECT * FROM `".$mysql_table."` LIMIT ".$start." , ".$over ;
- // 执行sql查询
- $result=mysql_query( $strsql, $conn);
- $count=0;
- // 获取查询结果
- while($row=mysql_fetch_assoc($result)){
- $count +=1;
- $address= $row['address'];
- //$address='学院路肯德基';
- $address_url =urlencode($address);
- $tipsgo = "http://search1.mapabc.com/sisserver?highLight=false&config=GOC&address=".$address_url
- .
- "&resType=json&enc=utf-8&a_k=947518d877fb275850a375d795be6a44c27ab526ef632290ee4f46327a7d0faac6c032378101477f&ctx=1119073&a_nocache=315700931114";
- //调用接口提交
- $a11 = file_get_contents($tipsgo);
- /*接口返回的数据
- MAjaxRequest.ReturnData('1119073',{"message":"ok","count":"1","list":[{"prox":"0.581818","range":"0.000861","eprovince":"","score":"35424.929688","city":"","edistrict":"","ecity":"","num":"70","level":"gl_poi","inum":"67","address":"","name":"中国北京市海淀区知春路63号卫星大厦","province":"","ename":"","district":"","roadpts":"","eaddress":"","y":"KWKPSQVOHDMD","x":"IOSEONORVDDEH"}]})
- or
- MAjaxRequest.ReturnData('1119073',{"message":"ok","count":"2","list": [{"prox":"0.500000","range":"0.007838","eprovince":"","score":"23968.869141","city":"","edistrict":"","ecity":"","num":"3825","level":"gl_street","inum":"2","address":"","name":" 中国北京市海淀区学院路","province":"","ename":"","district":"","roadpts":"","eaddress":"","y":"SUNXRLMONOJGO","x":"QMVMLPKRNRKNGO"}, {"prox":"0.500000","range":"0.002909","eprovince":"","score":"6724.464844","city":"","edistrict":"","ecity":"","num":"1123","level":"gl_street","inum":"0","address":"","name":" 中国浙江省杭州市西湖区学院路","province":"","ename":"","district":"","roadpts":"","eaddress":"","y":"SLNQPROLOGJOK","x":"QNPMJMSSMMKJOO"}]}) 学院路肯德基:
- */
- // preg_match("/name\":\"(.*)\".*\"y\":\"(.*)\",\"x\":\"(.*)\"/isU",$a11,$Areg) ;
- preg_match("/\"count\":\"(.*)\".*\"name\":\"(.*)\".*\"y\":\"(.*)\",\"x\":\"(.*)\"/isU",$a11,$Areg); //正则表达式取数据
- //echo $a11;
- //print_r($Areg);
- //die();
- /*
- [0] => "count":"2","list":[{"prox":"0.500000","range":"0.007838","eprovince":"","score":"23968.869141","city":"","edistrict":"","ecity":"","num":"3825","level":"gl_street","inum":"2","address":"","name":"中国北京市海淀区学院路","province":"","ename":"","district":"","roadpts":"","eaddress":"","y":"KVHXYQLTNLKOG","x":"INPMSUJWNTLKKK"
- [1] => 2
- [2] => 中国北京市海淀区学院路
- [3] => KVHXYQLTNLKOG
- [4] => INPMSUJWNTLKKK
- */
- // echo $address .":<br /> <br />";
- if ($Areg[1]==0){ //如果没有搜到记录
- echo "第ID为".$row['id'].'没有找到数据 <br/> ';
- }else{
- $decodelon = getDecodeCoordinate($Areg[4]); //将经字母纬度解密
- $decodelat = getDecodeCoordinate($Areg[3]); //将经字母纬度解密
- //计算经纬度偏移量!
- $jwdgo = $_SERVER['HTTP_REFERER']."xz.php?lon=".$decodelon."&lat=".$decodelat ;
- //调用接口提交
- $a12 = file_get_contents($jwdgo)."<br />";
- //分解字符
- $usus = explode(',',$a12);
- $pyl_x =$usus[1];
- $pyl_y =$usus[0];
- //echo "地图:". $decodelat.",".$decodelon." <br /> 卫星:".$pyl_y.",".$pyl_x." <br /> " ;
- // 更新表中的sql语句
- $strsqlz="UPDATE `".$mysql_table."` SET `x`='".$pyl_x."', `y`='".$pyl_y."' , `x_off` = '".$decodelon."',`y_off` = '".$decodelat."' WHERE `id` =".$row['id'];
- // 执行sql查询
- $resultz=mysql_query( $strsqlz, $conn);
- //echo $strsqlz;die();
- }
- }
- $phptime_2 = explode(' ', microtime());
- echo "<br />共处理".$count."条数据,总计耗时 ".($phptime_2[1]-$phptime_1[1])."秒。";
- ?>
修正经纬度后的效果:
附:高德MapABC地图API代码测试
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <!-- 在页面头部添加MapABC API引用地址,并将您的API密钥传递到引用地址中。一般情况我们会把它添加到 head 区域中。 -->
- <script type="text/javascript" src="http://app.mapabc.com/apis?&t=ajaxmap&v=2.1.2&key=62fe3d14ea426b905bd8e3e397d976261006bbe85a29c052bfbac85603cbdf79ff739f6f0881a656"></script>
- <title>高德MapABC地图API代码测试 - 废客提供</title>
- </head>
- <body >
- <!-- 在页面中添加一个用于装载地图的容器 -->
- <div id="mapabc" style="width:480px; height:400px;" ></div>
- <input type="text" id="lngXY" name="lngXY" size="50" value="这里显示经纬和窗体大小" />
- <input type="button" value="获得中心经纬度" onClick="getCenterXY()" />
- <input type="button" value="获得地图窗大小" onClick="getSize()" />
- <div>地址<input type="text" size="50" value="北京市海淀区知春路63号卫星大厦1层大堂(翠宫饭店正对面)" id="address" name="address">
- <input type="button" value="查询" onClick="geocodeSearch()">
- <br />结果<input type="text" size="50" name="address2" id="address2"/><br />
- <span id="result">状态</span>
- </div>
- <!-- 使用Javascript语言,创建地图对象 -->
- <script type="text/javascript">
- //创建初始化设置 - 构建地图辅助类
- var mapoption = new MMapOptions();
- mapoption.zoom=16;//设置地图zoom级别
- mapoption.minZoomLevel = 4;//设置地图上可显示的最小缩放级别,默认为3
- mapoption.maxZoomLevel = 17;//设置地图上可显示的最大缩放级别,默认为17,最大缩放级别小于等于20
- mapoption.toolbar=MINI; //设置工具条 SMALL:小型 MINI:迷你 DEFAULT:默认 当有minZoomLevel和maxZoomLevel 变成小型
- mapoption.toolbarPos=new MPoint(0,0); //设置工具条位置
- //mapoption.toolbarUrl="http://code.mapabc.com/p_w_picpaths/lan_1.png";//工具条URL,可以自定义工具条
- mapoption.overviewMap =HIDE; //设置鹰眼(小地图) 可用 SHOW、HIDE、DEFAULT、ture、false 赋值
- mapoption.scale=0;//是否显示比例尺
- mapoption.zoomBox = 1;//鼠标滚轮缩放和双击放大时是否有红框动画效果。
- mapoption.center=new MLngLat(116.46036,39.91507)// ←googlemap |Google地球(116.454171538,39.9135834736)|百度(116.466938,39.920597); //设置地图中心点
- mapoption.returnCoordType = COORD_TYPE_OFFSET;//返回数字坐标
- var mapObj=new MMap("mapabc",mapoption);//创建地图对象 加载地图初始化
- </script>
- <!-- 使用Javascript语言,当前地图中心点坐标 -->
- <script type="text/javascript">
- function getCenterXY(){
- var centXY = mapObj.getCenter();//获得地图中心点
- document.getElementById("lngXY").value = centXY.lngX +',' + centXY.latY;//经度 +维度
- //添加mark地标
- var markerOption=new MMarkerOptions();
- markerOption.p_w_picpathUrl="http://code.mapabc.com/p_w_picpaths/lan_1.png";
- markerOption.picAgent=false;
- var Marker = new MMarker(new MLngLat( centXY.lngX ,centXY.latY),markerOption);
- Marker.id="mark";
- mapObj.addOverlay(Marker,true) ;
- }
- </script>
- <!-- 使用Javascript语言,当前地图视窗的像素大小 -->
- <script type="text/javascript">
- function getSize(){
- var size = mapObj.getSize();//获取地图视野范围像素坐标的范围
- document.getElementById("lngXY").value = size.width +','+ size.height; //宽度 + 高度
- }
- </script>
- <!-- 使用Javascript语言,地理编码(地址匹配) -->
- <script type="text/javascript">
- function geocodeSearch(){
- var addressName = document.getElementById('address').value;
- if(addressName== ""){
- alert("请输入地址!");
- document.getElementById('address').focus();
- return;
- }else{
- var mls = new MGeoCodeSearch(); //初始化MGeoCodeSearch类的一个新实例
- var opt = new MGeoCodeSearchOptions(); //地址解析输入参数选项
- mls.setCallbackFunction(addressToGeoSearch_CallBack); //回调函数
- mls.addressToGeocode(addressName,opt); //地址解析,由地址得到经纬度坐标相关信息。
- }
- }
- function addressToGeoSearch_CallBack(data){
- var resultStr="";
- if(data.error_message != null){
- resultStr="查询异常!"+data.error_message;
- }else{
- switch(data.message){
- case 'ok':
- var Mmarker = new Array();
- if(data.count==0){
- resultStr = "未查找到任何结果!<br />建议:<br />1.请确保所有字词拼写正确。<br />2.尝试不同的关键字。<br />3.尝试更宽泛的关键字。";
- }else{
- for (var i = 0; i < data.list.length; i++) {
- resultStr += "<span class=\"spoi\"><a href=\"javascript:var s=mapObj.setCenter(new MLngLat('"+ data.list[i].x +"','"+ data.list[i].y +"'));var t = mapObj.openOverlayTip('"+(i)+"');\">"+data.list[i].name+"</a></span>";
- var markerOption = new MMarkerOptions();
- markerOption.p_w_picpathUrl ="http://code.mapabc.com/p_w_picpaths/apin/lan_"+(i+1)+".png";
- document.getElementById("address2").value =data.list[i].name;
- var ll = new MLngLat(data.list[i].x,data.list[i].y);
- var tipOption = new MTipOptions();
- tipOption.title=data.list[i].name; //标题
- tipOption.content="座标:<input type=text size=30 value='"+ ll.latY +","+ ll.lngX +"' />"; //内容
- document.getElementById("lngXY").value ="字符串坐标:"+data.list[i].x+","+data.list[i].y ;
- tipOption.borderStyle.color= 0x0000ff; //信息框加框颜色
- tipOption.titleFillStyle.color=0x0000ff; //标题颜色
- tipOption.titleFontStyle.size=12; //标题字体大小
- tipOption.titleFontStyle.color= 0xffffff;//标题字体颜色
- tipOption.titleFontStyle.bold=true; ////标题字体粗体
- tipOption.fillStyle.color= 0x0000ff; //内容区北景色
- tipOption.contentFontStyle.color= 0x00ffff ; //内容区文本 颜色
- tipOption.alpha=0.6; //信息框的透明度1为不透明例0.8
- markerOption.tipOption = tipOption;
- markerOption.canShowTip=true; //是否显示tip
- Mmarker[i] = new MMarker(ll,markerOption);
- Mmarker[i].id=(i);
- }
- mapObj.addOverlays(Mmarker,true);
- mapObj.openOverlayTip("0");
- }
- break;
- case 'error':
- content='<div class=\"default\"><div class=\"default_title\">网络忙!请重新尝试!</div><div class=\"d_link\"><div class=\"d_right\"></div><div class=\"suggest\"><strong>建议:</strong><br />如果您刷新页后仍无法显示结果,请过几分钟后再次尝试或者与我们的服务人员联系。<br />Email:service@mapabc.com <br />电话:400 810 0080</div></div></span>错误信息:"+data.message+"</div>';
- break;
- default:
- content='<div class=\"default\"><div class=\"default_title\">对不起!网络繁忙!请稍后重新尝试!</div><div class=\"d_link\"><div class=\"d_right\"></div><div class=\"suggest\"><strong>建议:</strong><br />如果您刷新页后仍无法显示结果,请过几分钟后再次尝试或者与我们的服务人员联系。<br />Email:service@mapabc.com <br />电话:400 810 0080</div></div></span>错误信息:"+data.message+"</div>';
- }
- document.getElementById("result").innerHTML = resultStr;
- }
- }
- </script>
- </body>
- </html>