Mapbar的基本算法
mapbar的地图,在地标标注上是有优势的
Mapbar基本算法
因为我当初是用在PHP下的,所以用了php表示算法,基本差不多,应该看得懂:
基础网址:"http://img.mapbar.com/maplite/mapbank/baidu/"
每层地图切片存放在文件夹名称:
$levelstr=array("W","0","1","2","3","4","5","6","7","8","9","10","11","12","15");
即第0层地图切片放在"http://img.mapbar.com/maplite/mapbank/baidu/W/" 下
每层地图切片所跨的经度数(纬度跨度需要*0.8这个系数):
$clipnum=array(90,40,20,10,5,2,1,0.5,0.2,0.1,0.05,0.02,0.01,0.005,0.002);
如第1层的每切片跨经度是90度,跨纬度是90*0.8=72度。即如经度-180~180,共360度,东西半球各需要180/90=2块切片,mapbar的每切片像素为300x300,所以完整地图长度像素应是300*4=1200像素。纬度是-90~90,共180度,南北半球各需要90/72=1.25,需要取大于此数的最小整数即2,所以南北半球加起来仍需要4块,而不是180/72=2.5取整后的3块。从中间0度赤道向两边平铺的,因此上下两块各有3/4块区域留有空白。
哈哈,有点缺乏耐心啦,将就着结合一小段程序来理解吧
//每层的最大横向像素数(除以2得到是纵向最大像素)
function MaxPixel($zoom){
return 256*pow(2,$zoom+2);
}
//经度换算
function PixelToLng($x,$zoom){
$c= MaxPixel($zoom);
return ($x - $c / 2) / ($c / 360);
}
function LngToPixel($lng,$zoom){
$c= MaxPixel($zoom);
return (int)($c / 2 + $lng * $c / 360 + 0.5);
}
//纬度换算
function PixelToLat($y,$zoom){
$c= MaxPixel($zoom);
$g = ($y - $c / 2) / (-$c / (2 * M_PI));
return (2 * Atan(Exp($g)) - M_PI / 2) / (M_PI / 180);
}
function LatToPixel($lat,$zoom){
$c= MaxPixel($zoom);
$f = Sin($lat * (M_PI / 180));
return (int)($c / 2 + 0.5 * Log((1 + $f) / (1 - $f)) * -$c / (2 * M_PI) + 0.5);
}
$blocksize=array(10,10,10,10,10,10,10,10,10,10,50,50,50,50,50);
//$para['ClipXNo']是横向切片序号,注意这个序号不是从0开始的
//横向切片序号运算公式,已知经度是$para['x1']计算所在切片序号:$para['ClipXNo']=floor($para['x1']/$clipnum[$level]);
//纵向切片序号运算公司,已知纬度是$para['y1']计算所在切片序号:$para['ClipYNo']=floor($para['y1']/($clipnum[$level]*0.8));
//所以倒如第一层第一块切片(经纬度分别为-180,90所在的切片)的序号是
$para['ClipXNo']=floor(-180/90)=-2;$para['ClipYNo']=floor(90/72)=2;
$para['FolderXNo']=(int)floor($para['ClipXNo']/$blocksize[$level]);//切片分文件夹存放位置
$para['FolderYNo']=(int)floor($para['ClipYNo']/$blocksize[$level]);
if($para['FolderXNo']<0){
$para['FolderXNo']++;
}
if($para['FolderYNo']<0){
$para['FolderYNo']++;
}
//计算文件序号
$para['FileXNo']=$para['ClipXNo']-$para['FolderXNo']*$blocksize[$level];
$para['FileYNo']=$para['ClipYNo']-$para['FolderYNo']*$blocksize[$level];
//计算出完整切片位置
$para['url']=
"http://img.mapbar.com/maplite/mapbank/baidu/"
.$levelstr[$level]."/".$para['FolderXNo']."_".$para['FolderYNo'].
"/".$para['FileXNo']."_".$para['FileYNo'].".png";
Mapbar的基本算法相关推荐
- Mapbar地图切片的抓取和拼接算法
转自:http://blog.csdn.net/mygisforum/article/details/7022860 1.MapBar 地图瓦片抓取算法 此地图瓦片抓取算法是根据Mapbarapi里的 ...
- 抓取Mapbar地图切片的一个算法
抓取Mapbar地图切片的一个算法 发表于 2011/03/26 这个算法去年的时候就写了,自己就是抓着玩,也算是验证了这个算法的可行性,今天特向大家分享一下,主要是根据Mapbarapi里的绘图算 ...
- Mapbar经纬坐标偏移的加/解密算法
具本人研究所知,Mapbar地图的成图算法并不难懂,并且它的地图成图算法没有进行加密(效果就是整个地图有一定的偏移,实际上它的成图是准确的),由此可想而知,它的坐标必定也未加密! 那么为什么我用真实的 ...
- MapBar和MapInfo中的比例尺[更新:MapBar比例尺是正确的]
真搞不懂MapBar中的比例尺,今天发上来让大家说说这比例尺怎么个算的.可以先选择缩放级别然后点查看比例尺会有和百度地图中一样的比例尺,只是我搞不懂这比例尺怎么算的,发代码上来让大家讨论下.代码其实很 ...
- 两条轨迹相似度算法,轨迹相似性度量
百度地图 百度地图是百度提供的一项网络地图搜索服务,覆盖了国内近400个城市.数千个区县.在百度地图里,用户可以查询街道.商场.楼盘的地理位置,也可以找到离您最近的所有餐馆.学校.银行.公园等等. 2 ...
- 寻找MapBar的地图切割方法
以前写了篇MapBar的JS研究,其实个人感觉MapBar的JS还是蛮成熟的,对象模型,也是非常多的对象方法,如果能够开放JS,也说不定不比灵图差.只是放出来这么久都没有人告诉他们的研究的东西.是没有 ...
- 火星坐标和百度坐标之间的转换算法
在开始这个题目之前,先给大家再次扫扫盲,扫的不是坐标系统的盲,而是我们国家所使用的坐标系统.大家都知道,美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置,这应该是国际 ...
- 道格拉斯-普克 Douglas-Peuker(DP算法)
道格拉斯-普克抽稀算法,是用来对大量冗余的图形数据点进行压缩以提取必要的数据点. 该算法实现抽稀的过程是: 1)对曲线的首末点虚连一条直线,求曲线上所有点与直线的距离,并找出最大距离值dmax,用dm ...
- 一份最简单的Mapbar地图源代码
一份最简单的Mapbar地图源代码 发表于 2011/03/29 恩,我想大家都懂的,本页代码源自Mapbar的Api,研究了一下它的绘制地图的算法,其实上篇文章<抓取Mapbar地图切片的一 ...
最新文章
- adb devices只显示List of devices attached
- 巨头纷纷看上的中国Robobus又获1亿美元投资
- 机器学习-分类算法-逻辑回归13
- 11-1 操作系统概念
- day13 迭代器和生成器
- Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
- jquery/js 点击空白区域隐藏某一个层/元素
- LA 3882 And Then There Was One
- 工作中常用知识点、工具总结
- 线程间操作无效: 从不是创建控件“listBox1”的线程访问它
- 《企业IT架构转型之道》读后感(一)
- VC 2012 visualstudio的项目属性表 .props文件
- C#---委托与事件
- ECSHOP二次开发之心得体验
- H3C认证云计算工程师
- EPLAN小知识——添加字体
- 字节和兆字节的换算_兆字节(MB)中有多少个字节?
- 阿里云STMP邮箱验证
- Netbeans 7.0 安装 Python 插件的方法
- 再一次获取你的WIFI密码(fluxion附视频)
热门文章
- python实现情感分析_利用python实现简单情感分析
- 2021-01-10/11
- jSignature 横屏_怎么把视频上下弄背景?教你抖音横屏视频上下填充剪辑方法
- gps实时位置的展示
- 大端和小端传输字节序
- AnnotationAwareAspectJAutoProxyCreator is only available on Java 1.5 and higher
- 04、用浏览器显示一个网页时,是否只发了一个网络请求给服务器?
- hαbits的意思_PIC16F877A.H头文件详细注释
- web服务器响应头文件,response.setHeader()步骤设置http文件头的值
- vue2-org-tree 基于VUE的部门组织架构组件,增删节点实现