抓取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);}}}

《全文完》

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百度网盘解析的种子保存不了怎么办 下载了种子百度网盘解析不了怎么办 正畸复诊后吃饭一直会磨嘴怎么办 遇到儿子说话对母亲不满母亲怎么办 冰箱旧了怎么办教你创新冰箱翻新法 微信陌生人加好友发红包怎么办 微信红包发了对方收不到怎么办 发红包是微信密码不知道了该怎么办 微信上红包密码不知道密码怎么办 本人不知道微信自动发红包怎么办 微信钱包里的钱没了怎么办 微信聊天删除了红包没领怎么办 微信红包未领取删掉了怎么办 微信红包没领取删掉了怎么办 微信红包没领取就删除好友了怎么办 老公一个人出去玩不愿带老婆怎么办 干了一年也攒不下钱怎么办 住院出院后请领导同事吃饭怎么办 有同事请吃饭答应了又不想去怎么办 同事请吃饭发红包不收怎么办 同事要走了请吃饭我不想去怎么办 请领导吃饭他说今晚有事我该怎么办 两个月的狗狗不吃狗粮怎么办 挖机驾驶室的小镙杆总是掉该怎么办 开挖机出了事故没有证怎么办 发现小孩有早恋现象做家长该怎么办 马上中考了初三孩子不上学怎么办 初三孩子老说自己难受不上学怎么办 幼儿园安全教案迷路了怎么办及反思 老婆发现我出轨后离家出走了怎么办 把丝袜放进马桶水箱堵了怎么办 如果老公那方面不行但人很好怎么办 老公哪里都好就是那方面不行怎么办 电饭锅盖子卡的地方掉了怎么办 唯品会退货已经收到了不退款怎么办 有人用qq冒充我和别人聊天怎么办 别人冒充我的微信名和头像怎么办 快餐店无证经营被工商局查了怎么办 买的圣才电子书只有在线版怎么办 吃了汤汤水水奶水还是少怎么办 粗肋草叶子和劲长白点怎么办