抓取Mapbar地图切片的一个算法
来源:互联网 发布:购物车图片淘宝 搞笑 编辑:程序博客网 时间:2024/05/17 08:55
抓取Mapbar地图切片的一个算法
这个算法去年的时候就写了,自己就是抓着玩,也算是验证了这个算法的可行性,今天特向大家分享一下,主要是根据Mapbarapi里的绘图算法写出来的,实在没什么技术含量。
有想玩的同学可以试试,不过因此引起的后果本人概不负责,请慎重啊!
算法使用PHP写的,将下面代码保存为一个PHP文件后在终端运行: $ php -f filename.php一下就可以了。
代码如下:
/** * 抓取mapbar切片的算法 by CrossYou at 2011/01/22 * * @version 1.0.0 * @linkhttp://crossyou.cn/ */$mapbarImgRoot = './mapbar/';//每层地图切片的文件夹名称$levelFolder = array('W','0','1','2','3','4','5','6','7','8','9','10','11','12','13','16');//每层地图切片所跨的经度数$cutImgLonRange=array(90,40,20,10,5,2,1,0.5,0.2,0.1,0.05,0.02,0.01,0.005,0.002,0.001);//每层地图切片所跨的维度数$cutImgLatRange=array(90*0.8,40*0.8,20*0.8,10*0.8,5*0.8,2*0.8,0.8,0.5*0.8,0.2*0.8,0.1*0.8,0.05*0.8,0.02*0.8,0.01*0.8,0.005*0.8,0.002*0.8,0.001*0.8);$blockSize=array(10,10,10,10,10,10,10,10,10,10,50,50,50,50,50,50);for($zoomLevel=0;$zoomLevel<16;$zoomLevel++){$clipXNum=ceil(360/$cutImgLonRange[$zoomLevel]);$clipYNum=ceil(90/$cutImgLatRange[$zoomLevel]);$clipLonRange = $cutImgLonRange[$zoomLevel];$clipLatRange = $cutImgLatRange[$zoomLevel];$clipXGap = -180-$clipLonRange/2;//从缩放级别5开始,只抓取中国范围内的地图,因为此级别以后的,非国内的都是背景图,抓了无意义。if($zoomLevel>3){//--------中国范围的地图$west = 73;$east = 136;$north = 54;$south = 3;$chinaLonRange = 63;//中国经度跨度$chinaLatRange = 51;//中国维度跨度$chinaClipXNum = ceil($chinaLonRange/$clipLonRange);$chinaClipYNum = ceil($chinaLatRange/$clipLatRange);for($i=0;$i<$chinaClipXNum;$i++){$lon = $west+$clipLonRange*$i;for($j=0;$j<$chinaClipYNum;$j++){$lat = $south+$clipLatRange*$j;$clipXNo = floor($lon/$cutImgLonRange[$zoomLevel]);$clipYNo = floor($lat/$cutImgLatRange[$zoomLevel]);$clipXNo=($clipXNo)%$clipXNum;if($clipXNo>=$clipXNum/2)$clipXNo-=$clipXNum;if($clipXNo<-$clipXNum/2)$clipXNo+=$clipXNum;echo "\n新的切片... => \n";echo '经纬度:'.$lon.' , '.$lat."\n";echo "-------------------------------\n";echo '切片序号:'.$clipXNo.' , '.$clipYNo."\n";echo "-------------------------------\n";//切片分文件夹存放位置$folderXNo = (int)floor($clipXNo/$blockSize[$zoomLevel]);//切片分文件夹存放位置$folderYNo = (int)floor($clipYNo/$blockSize[$zoomLevel]);if($folderXNo<0){$folderXNo+=1;}if($folderYNo<0){$folderYNo+=1;}$fileXNo =($clipXNo)-$folderXNo*$blockSize[$zoomLevel];$fileYNo =($clipYNo)-$folderYNo*$blockSize[$zoomLevel]; $imgPre = 'http://img.mapbar.com/maplite/mapbank/mapbar/';$imgDir = $levelFolder[$zoomLevel].'/'.$folderXNo.'_'.$folderYNo.'/';$imgName = $fileXNo.'_'.$fileYNo.'.png';$imgUrl = $imgPre.$imgDir.$imgName;$localImgDir = $mapbarImgRoot.$imgDir;$localImgName = $localImgDir.$imgName;if (!is_file($localImgName)){createdir($localImgDir);if(copy($imgUrl,$localImgName)){echo '图片:=> '.$imgDir.$imgName." 成功下载到本地\n\n";}}}}}else{for($i= -$clipXNum/2;$i<=$clipXNum/2;$i++){$lon = $clipLonRange*$i;if($i<0)$lon+=$clipLonRange/2;if($i==0)continue;if($i>0)$lon-=$clipLonRange/2;for($j=-$clipYNum;$j<=$clipYNum;$j++){$lat = $clipLatRange*$j;if($j<0)$lat+=$clipLatRange/2;if($j==0)continue;if($j>0)$lat-=$clipLatRange/2;$clipXNo = floor($lon/$cutImgLonRange[$zoomLevel]);$clipYNo = floor($lat/$cutImgLatRange[$zoomLevel]);$clipXNo=($clipXNo)%$clipXNum;if($clipXNo>=$clipXNum/2)$clipXNo-=$clipXNum;if($clipXNo<-$clipXNum/2)$clipXNo+=$clipXNum;echo "\n新的切片... => \n";echo '经纬度:'.$lon.' , '.$lat."\n";echo "-------------------------------\n";echo '切片序号:'.$clipXNo.' , '.$clipYNo."\n";echo "-------------------------------\n";//切片分文件夹存放位置$folderXNo = (int)floor($clipXNo/$blockSize[$zoomLevel]);//切片分文件夹存放位置$folderYNo = (int)floor($clipYNo/$blockSize[$zoomLevel]);if($folderXNo<0){$folderXNo+=1;}if($folderYNo<0){$folderYNo+=1;}$fileXNo =($clipXNo)-$folderXNo*$blockSize[$zoomLevel];$fileYNo =($clipYNo)-$folderYNo*$blockSize[$zoomLevel]; $imgPre = 'http://img.mapbar.com/maplite/mapbank/mapbar/';$imgDir = $levelFolder[$zoomLevel].'/'.$folderXNo.'_'.$folderYNo.'/';$imgName = $fileXNo.'_'.$fileYNo.'.png';$imgUrl = $imgPre.$imgDir.$imgName;$localImgDir = $mapbarImgRoot.$imgDir;$localImgName = $localImgDir.$imgName;if (!is_file($localImgName)){createdir($localImgDir);if(copy($imgUrl,$localImgName)){echo '图片:=> '.$imgDir.$imgName." 成功下载到本地\n\n";}}}}}}/** * 创建多级目录 摘自网络 * 如有好的建议,请到 http://crossyou.cn/给我留言 谢谢! * * @since 1.0.5 * @param string $dir */function createdir($dir){$array_dir=explode("/",$dir);//把多级目录分别放到数组中$depth = count($array_dir);$path = '';for($i=0;$i<$depth;$i++){$path .= $array_dir[$i]."/";if(!is_dir($path)){mkdir($path);}}}
《全文完》
- 抓取Mapbar地图切片的一个算法
- Mapbar地图切片的抓取和拼接算法
- Mapbar地图切片的抓取和拼接算法
- Mapbar地图切片的抓取和拼接算法
- MapBar的一个Demo
- Mapbar的基本算法
- 寻找MapBar的地图切割方法
- 一份最简单的Mapbar地图源代码
- 地图网站MapBar地理位置标记ID转换为经纬度的Javascript解密算法
- Mapbar 地图 API 实例
- [js]调用google,51ditu和mapbar的地图API
- 整合google,51ditu和mapbar的地图API
- 一个WebMap引擎(MapBar)
- Mapbar经纬坐标偏移的加/解密算法
- 地图切片
- [js]整合google,51ditu和mapbar的地图API [此博文包含图片]
- 使用mapbar 地图sdk要关闭硬件加速
- 基于GeoServer切片地图服务的发布
- 图吧地图API 高级客户服务
- [Leetcode] Add Binary
- 黑马程序员_包
- Mapbar地图切片的抓取和拼接算法
- 一份最简单的Mapbar地图源代码
- 抓取Mapbar地图切片的一个算法
- dyld: Symbol not found: _memmem
- Sound Mixer (设备初始化)
- Sound Mixer (Control 接口 1)
- 民用地图经纬度纠偏-高德系地图纠偏
- GPS定位转百度坐标
- DEDE后台界面修改
- 互联网地图坐标偏移的解决方法
- 互联网地图的“拼”图