`
tntxia
  • 浏览: 1484995 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于地图显示的一些知识

阅读更多

 

1. 墨卡托(Mercator)投影

 

 墨卡托(Mercator)投影,是一种"等角正切圆柱投影”,荷兰地图学家墨卡托(Gerhardus Mercator 1512-1594)在1569年拟定,假设地球被围在一中空的圆柱里,其标准纬线与圆柱相切接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅选定标准纬线上的“墨卡托投影”绘制出的地图。墨卡托投影没有角度变形,由每一点向各方向的长度比相等,它的经纬线都是平行直线,且相交成直角,经线间隔相等,纬线间隔从标准纬线向两极逐渐增大。墨卡托投影的地图上长度和面积变形明显,但标准纬线无变形,从标准纬线向两极变形逐渐增大,但因为它具有各个方向均等扩大的特性,保持了方向和相互位置关系的正确。在地图上保持方向和角度的正确是墨卡托投影的优点,墨卡托投影地图常用作航海图和航空图,如果循着墨卡托投影图上两点间的直线航行,方向不变可以一直到达目的地,因此它对船舰在航行中定位、确定航向都具有有利条件,给航海者带来很大方便。“海底地形图编绘规范”(GB/T 17834-1999,海军航保部起草)中规定1:25万及更小比例尺的海图采用墨卡托投影,其中基本比例尺海底地形图(1:5万,1:25万,1:100万)采用统一基准纬线30°,非基本比例尺图以制图区域中纬为基准纬线。基准纬线取至整度或整分。

 

 

墨卡托投影坐标系取零子午线或自定义原点经线(L0)与赤道交点的投影为原点,零子午线或自定义原点经线的投影为纵坐标X轴,赤道的投影为横坐标Y轴,构成墨卡托平面直角坐标系。

 

背景介绍
墨卡托投影思想是GIS的基石,GPS设备采集的数据是标准的wgs84坐标,各家地图从数据提供商拿到的经纬度数据经过国测局gcj02加密的结果。地球的纬度不可能取到+-90,范围在-85-85。
地图数据处理、渲染都需要转化成平面的笛卡尔坐标系。而墨卡托投影则定义了如何从球面坐标系投影到二维的平面。二维的单位是米,也可以是像素。

 

 

反畸变处理

魔卡托投影最最精妙地地方是y值的处理:用一个奇妙的函数替换了常规的tan函数

替换后结果为

 

 

F(Φ) = ln[ tan(π/4 +Φ/2 ) ]  与T(Φ) =  tan(Φ)的函数曲线如下:

 

 

绿色为T函数,蓝色为F函数,对比发现,当原点附近F函数与y=x函数曲线非常接近,当Φ无限趋近正负π/2时候,tan函数已经趋于无穷,而F函数值仍然处于设定值范围内。F函数趋向无穷的条件值被推迟。
Φ的取值范围为-π/2,π/2,即[-1.57,1.57],地球经纬度近似-85,85,所以最终Φ的取值为-1.5,1.5,即上图中黑色粗线指向的区间。此时F函数值正好位于-π,π。
通过F函数,处理后的纬度值跟经度值范围一致。
从上图可以看出F(Φ) = ln( tan(π/4 + Φ/2) ) 也是关于原点对称的,F(Φ) = -F(-Φ)。通过三角函数可以证明。

 

 

projection: "EPSG:900913", //投影为 900913,google 墨卡托投影 units: "m", //屏幕坐标以米为单位
maxResolution: 156543.0339, //最大比例下的每像素屏幕地图单位值 maxExtent: new OpenLayers.Bounds(-20037508, -20037508,20037508, 20037508.34), numZoomLevels: 17。 这是openlayer中的说明,大多人看不懂哈

解释开始:

1、先了解一个常量,世界一张图。一个像素代表多少米
世界范围,一个256*256的图 就是一个世界地图(如下)。 1个像素代表的米数就是 156543.0339。下面这图的面积就是=世界面积=156543.0339*256 * 156543.0339*256

 

2、其实全世界墨卡托范围是 -20037508, -20037508,20037508, 20037508.34 ,从第四象限到第一象限

其实这个值很简单,就是 -20037508 = -156543.0339*128  ; 为什么称128 呢? 因为 他是256的一半,所以一个像素*128正好代表一个象限的长度,也就是世界的一半长度。

3、切片的级别,比例尺级别

我们一般考虑切片到 18级别 ,maxZoomLevel = 18; 也就是说 世界一张图,被放大到 2的18次方倍哈。宽度、高度同时放大到2的18次方倍

我们用这个函数就可以知道 每个比例尺下,每个像素代表多少米啦。那我们18级别一个像素代表的米为:0.5971642833709717 (一像素不到一米哈)

Map.getZoomUnits = function(zoom)
{
    var zu = [0,0];
    var a = Math.pow(2,(18-zoom));
    zu[0] = 0.5971642833709717 * a;           
    zu[1] = 0.5971642833709717 * a;
    return zu;
};

4、根据墨卡托经纬度定位到x ,y ,z块号。

用点所在的墨卡托 减去 之前的基础墨卡托值,得到相对绝对距离米,再用这个 总米 / 当前比例尺每块代表的米 就知道是在哪一xy块啦
中国一般在第一象限哈

SE.Map.prototype.toMapId = function(point,zoom)
{
    var x=point.MercatorLng-156543.0339*128;
    var y=-156543.0339*128-point.MercatorLat;
    var zu = this.getZoomUnits(zoom,true);
    var spanX = zu[0]*256;//zu[0]为1px代表的纬度,this.imgSize为加载的图片大小(256)
    var spanY = zu[1]*256;//zu[1]为1px代表的经度,this.imgSize为加载的图片大小(256)
    var bx=parseInt(x/spanX);
    var by=parseInt(y/spanY);
    return [bx,by,(x-bx*spanX)/spanX*this.imgSize,(y-by*spanY)/spanY*this.imgSize];
};


附上:经纬度转84、84转经纬度 算法函数:

/**
    w84转为墨卡托坐标(经纬度转墨卡托)
    WGS84是地理坐标的一种,地理坐标本身有很多种,web墨卡托是投影坐标

    lon :    w84经度
    lat :    w84纬度
*/
PG.Tool.forwardMercator = function(lon, lat) {
    lon = parseFloat(lon);
    lat = parseFloat(lat);
    var x = lon * 20037508.34 / 180;
    var y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180);
    y = y * 20037508.34 / 180;       
    return [x,y];
};

/**
    将墨卡托坐标转为w84(墨卡托转经纬度)

    x :    墨卡托经度
    y :    墨卡托纬度
*/
PG.Tool.inverseMercator = function(x, y) {
    var lon = (x / 20037508.34) * 180;
    var lat = (y / 20037508.34) * 180;
    lat = 180/Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);
    return [lon, lat];
}

 

 

 

  • 大小: 60.3 KB
  • 大小: 76.1 KB
  • 大小: 3.9 KB
  • 大小: 50.1 KB
0
0
分享到:
评论

相关推荐

    Android Google地图显示视频教程.wmv

    Android Google地图显示视频教程,希望能够学习者提供帮助,实现对Google地图显示基础知识的掌握与理解,为后续学习做好铺垫,实现Google地图显示的灵活运用

    地图、Qt、无人机、无人车、导航

    我们在开发无人机(或无人车)的过程时,往往需要用到地图显示无人机的实时轨迹,或是创建航点给无人机指定飞行地点。使用Qt加载地图并不是件容易的事,需要专业的地图相关的知识,如地图切片、网络加载、数据库缓存...

    知识地图,swfobject.js

    可分类显示,并可向下转取,代码完整,可运行!

    地图瓦片知识点.docx

    地图瓦片知识点学习,包括瓦片地图原理、瓦片行列号的换算以及WebGIS中的地图瓦片在Canvas上的拼接显示原理等等

    知识图谱入门 基本概念 知识图谱.png

    知识图谱入门 知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和...

    知识图谱_女性电子商务节点关系数据集.rar

    知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及...

    Android百度地图应用之创建显示地图

    本文是在完成了Android百度地图应用开发基础知识的基础上继续实现的。 本文实例为大家分享了Android如何显示地图,并为后续内容做准备,供大家参考,具体内容如下  1、运行效果  本章共有25个示例,在x86模拟器中...

    android mapbox地图新手基础 demo

    Android世界地图,替代国内谷歌地图不可用,详情介绍可以在 http://blog.csdn.net/zhayunbiao/article/details/51072284#reply 查看

    Python疫情大数据分析之可视化分析、GIS地图及文本挖掘、知识图谱代码(博客前五篇)

    该资源是针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。希望该系列线上远程教学对您...

    知识图谱应用研究综述

    知识图谱(Knowledge Graph)又称为科学知识图谱,在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、...

    知识图谱课件

    知识图谱(Knowledge Graph)又称为科学知识图谱,在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、...

    地图查询.docx

    本次实现地图查询及查询结果居中显示的实习目的在于熟悉Visual Studio和ArcGIS Engine的功能操作,学习使用ArcGIS Engine构建GIS应用,熟悉C#编程语言,掌握课堂教学的相关知识点。通过练习:如何创建模板工程,如何...

    【基于Python+Django的毕业设计】医疗知识图谱问答系统(源码+录像演示+说明).zip

    知识图谱在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。...

    jQuery地图map悬停显示省市代码分享

    这是一款基于jQuery实现地图map悬停显示省市代码,这样一个神奇的地图便于我们更好地了解中国,增加自己的地理知识。 下面是效果图是不是很棒。 效果演示 源码下载 为大家分享的jQuery地图map悬停显示省市代码如下 ...

    OkMap Desktop 2022是一个高度可靠,功能强大编辑和探索地图服务器,数字地图和地理参考数字地图

    该程序为谷歌地球和谷歌地图提供了完整的支持,为您的测绘,分析和显示GPS知识提供了一个灵活的解决方案。 它有能力将地图导入到广泛的流行格式,包括GFW, JGW, PGW, TFW, BPW, ECW, GeoTiff, MAP, IMP, GMI, SHP, ...

    基于echart的简单疫情地图系统.zip

    本项目实现了一个简单的疫情数据显示系统,其中包含了,折线,饼状图,柱状图,疫情地图分布显示,充分应用了echart的所有知识。

    在网站实现实时时间显示、天气显示、地图及其他饼图等的显示(采用echarts)

    1.测试的浏览器为Chrome,如在其他浏览器可能出现布局错误的问题,完全不懂相关知识的朋友建议先从我提供的博文进行学习,避免下载积分浪费。 2.实现效果在文章...

Global site tag (gtag.js) - Google Analytics