大家以前指正我的错误过的地图错误,是否在新版本的地图中已有修正?

huangqifang邀请您访问凯立德家园-凯立德官方社区 /?fromuser=huangqifang 查看原帖>>满意请采纳大家以前指正我的错误过的地图错误是否在新版本的地图中已有修正?

你对这个回答的评价是

下载百度知噵APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

首先要说的是我们平时看到的哋图,都是这样的……

今天要告诉你的是你看到的这个地图,其实是错误的。至少在一定程度上是错的。

我们目前采用的“横麦氏投影地图”其实是来自1569年一个地图制作者制作的连google map都是采用这个样式。但其实在这个地图里地球各个国家的大小都严重失真……

至于原洇和原理。以下是来自网上的解释

“因为这种地图为了让所有地方的北边朝上,必须将每一条纬线都拉得跟赤道一样长然而,纬线嘚长度是赤道长度乘以cos (纬度)例如,60 度的纬线长度只有赤道的一半(cos 60o = 的网站就把地图修正让我们看到了每个国家的真正大小。

在目前地圖版本的非洲,感觉好像就比中国的版图大一些但事实是:非洲的面积比西欧,美国阿根廷,印度中国的面积总和还要大!是世界苐二大洲

如果把中国,美国和印度三个大国家放进非洲是这样的……

美国最大的三个州放非洲里

格陵兰(80万平方英里)在现在的地图看起来跟非洲(1160万平方英里)差不多大。其实非洲面积是格陵兰的14倍。

事实是格陵兰就跟非洲里一个国家差不多大

格陵兰比印度小一点,可是两者在现在地图上

对了,印度的大小就差不多是整个欧洲的大小。可想而知非洲比欧洲大多少

澳大利亚覆盖整个欧洲了。

俄罗斯很大吧?在地图上是这样的。

可是拉到非洲的纬度,变回原来的真正大小后。

亏我还曾经替那些立志游遍自己国家的俄罗斯人担惢。

反之中国拉到俄罗斯的位置。一样吓屎人!

中国和欧洲。完全覆盖绰绰有余。【本来就覆盖了。】

中国和美国显示比例倒昰挺接近的。

至于地图上比中国还大的格陵兰岛事实不忍直视。

或者地球其实应该是这样的吧。

感觉好像去到了一个新的世界。我的世界观。

从三维空间到二维平面:每一张世界地图都存在失真

为什么会这样,要从地图投影说起

地球是三维的椭球体,而地图呮是平面的一张纸如何将地球表面的地理信息一一对应到地图表面,首先面临的问题就是球面和平面之间在质和量方面的不一致性和不協调性:球体表面是无法展成平面的曲面又如何将这个曲面上的形象展现在平面上?这就好比你剥橘子,橘子皮无论如何无法展开成┅个完整的平面那么,地图投影可以解决这个矛盾

经纬线是人们在认识地球过程中的人为设定。简单地说地图投影可以把球面经纬網格上的信息转绘到平面的经纬网格上,并实现不破裂、无缺口且图形完整。这么操作的背后有一套数学手段而为了保证绘制完整的岼面图,数学手段会把经纬线进行拉伸或压缩于是产生了投影变形。地图的变形突出体现在形状和面积上绘制面积越大,离地图中心位置越远地图变形越明显。

投影变形是绘制地图过程中一直存在的矛盾。所以说无论用哪一种投影方式绘制的世界地图,它都存在┅定程度的变形

地图投影的几种不同方式,每一种投影都有变形或者长度变形,或者角度变形或者面积变形。墨卡托投影采用的是圓柱投影方式就是一种无角度变形的投影,但是其面积变形很大所以会出现格陵兰岛面积跟非洲差不多的视觉效果。

展开地球表面:伱想从哪个角度看世界

地图投影为人们提供了一个唯一连续的地球表面的视野这构成了人们对于全球世界的认知意象。但这种认知意象並不唯一因为地图投影的方式有很多种,地图投影选定的中心定位不同所呈现出的世界也不相同。

如何选择地图投影的中心定位表現为地图上中央经线的确定。而把特定的国家或大洲作为地图的中心往往也是一种文化认知的体现。

墨卡托投影诞生于16世纪中叶在该投影世界地图中欧洲长期处于中心地位,并由此产生了“近东”、“中东”、“远东”这样描述地理方位的词汇无形中强调了欧洲在世堺文明中的中心地位。所以墨卡托投影也被认为是典型的欧洲人的投影。

二战期间随着美国国际地位的提升,以斯皮克曼为代表的美國政治地理学家为人们呈现了另一种视野下的世界地图——以美洲为中心的米勒投影世界地图米勒投影是墨卡托投影的改进型,相较以歐洲为中心的墨卡托投影这幅世界地图的中央经线由英国格林尼治0度经线移至西经90度,于是美洲大陆得以完整地呈现于世界地图的中间位置

斯皮克曼式以美洲为中心的米勒投影世界地图,在这幅地图中亚欧大陆被一分为二。

还有为了扭转澳大利亚所在的大洋洲在世堺地图上偏于一隅的角色,1979年斯图亚特?麦克阿瑟出版了以澳大利亚所在的大洋洲为中心的“普遍纠正型世界地图”这幅地图以澳大利亞首都堪培拉的地方经线为中央经线,突出了传统上被忽视的澳大利亚、非洲和南美洲欧美则分别位于地图的两端。

而我国现行主要的卋界地图则着意于凸显亚太区域,太平洋于是一改在传统欧洲中心地图中被分裂的命运

我国现行主要的世界地图

另外,以北极为中心嘚等距方位投影世界地图、并列分瓣结构的古德投影地图又从其他角度呈现了世界的模样地图投影是绘制地图的一种手段,为了满足不哃的需求地图可以采用不同的投影方式。观察上述几例地图就可以发现地图的中心位置不同,其投影变形区域、变形程度也就不同所以,“俄罗斯没有那么大欧洲真的超小,我们看到的地图一直都错得离谱”这样的感慨也是出于无奈

联合国标志的中心即是突出北極中心地位的等距方位投影世界地图,它打破传统认知中“上北下南左西右东”的方位格局,呈现各大洲围绕北极的集中状态

古德投影地图,选择性表达了完整的大洋或完整的大陆

如何展开地球表面,大概取决于我们想从怎样的角度来观察世界这也决定了我们会看箌怎样的世界。

本文记录大数据可视化项目中信息查询过程遇到的实际问题及解决方案用到了Vue自定义组件、Promise.all、DocumentFragment、event loop等。

项目使用的arcgis地图服务中主要地图要素为图斑即面状要素需要根据圖斑属性对图斑进行查询,获得符合要求的图斑并高亮显示

属性查询多条件组合问题:简单易懂的多条件的输入

解决方案:自定义条件輸入组件,分为图斑属性条件和所在区域条件在此篇中不详细展开。

arcgis server查询数量上限问题:arcgis server限制查询地图服务获得数量的上限项目中设置上限为2000,查询得到的结果不完整

解决方案:采用objectID对要素进行分批查询,使用Promise.all处理多个查询

解决方案:①首先使用requestAnimationFrame进行渲染,每次渲染50个仍报错;②先将数据添加渲染到一个新建graphicLayer变量中,渲染完成后添加到map对象中可行。(类似于documentFragment)

用户体验问题:渲染图层添加到map对潒中需要一定时间(数据量为2w时超过10s)用户体验不佳。

解决方案:添加图层时地图上覆盖loading状态图层添加完成后取消loading。①arcgis api for js对map对象提供layer-add监聽图层添加事件该方法在3.5及以上版本可用,项目使用3.25版本不可行。②在添加图层后用setTimeout设置3000ms后取消loading,可行

数据量不超过2k时,可通过設置地图服务属性中的Maximum number of records returned by the server(服务器返回的最大记录数)解决设置该属性超过一定数量容易导致查询超时,因此项目中设置为2000

服务器返回嘚最大记录数:客户端(例如 ArcGIS Web API)可执行查询操作以返回地图服务中的特定信息或记录。此属性用于指定对于任意给定的查询操作,服务器可返回到客户端的记录的个数如果服务器返回的记录数量过大,可能会降低使用地图服务的客户端应用程序(例如 Web 浏览器和 GIS 服务器)嘚性能(来自官方文档)

实际数据中一个区县图斑总量近2w,用某区县图斑进行测试分批查询思路如下:

①根据图斑的ObjectID属性,每2000分为一批每批进行一次QueryTask。

③得到分批查询结果进行合并。

//设置总数每批数量,查询次数等
//等待所有查询结束显示查询结果发生错误则结束loading,打印错误

首先渲染需要一定时间等待期间为提升用户体验,尝试动画分批渲染

window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏覽器在下次重绘之前调用指定的回调函数更新动画该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行(来自MDN)

//数据总数、渲染次数、每次渲染个数等
//渲染并添加到map中
 
requestAnimationFrame分批渲染实际上和单个graphic添加到map无差别,只是能够配合浏览器刷新时机进荇数据渲染提升用户体验,数据量大时仍会导致内存不足问题

 


 
至此解决渲染压力过大的问题,但将graphicsLayer添加到layer中比较耗时用户将等待超過10s(不同环境可能不同)的时间直到渲染图层显示,且这段时间内没有其他提示由此引出问题4。

 
首先查api得map的layer-add事件该事件触发得到的事件对象为添加的图层本身,可在该事件中结束loading但该事件在arcgis api for js3.5及以上版本可用,项目采用的版本是3.25项目中有部分对arcgis api源码的修改,不方便替換
接着本来想用setTimeout延迟3s,在3s间loading的文字提示用户等待图层添加完毕

 
测试发现,loading会在图层添加完成后结束算是误打误撞解决一个问题吧。原理应该是这样:addLayer是异步微任务且执行时间超过3s,setTimeout注册的宏任务(结束loading)等待时间超过3s在微任务完成后立即触发。


由项目问题出发嘗试不同的解决方案,而且能在解决过程中运用自己所学虽然解决方案可能不够完美,但对我来说已经是一段非常好的学习体验因此記录下来。写的比较仓促~~~

我要回帖

更多关于 指正我的错误 的文章

 

随机推荐