【问题标题】:How to map a user location to a not true to realism map?如何将用户位置映射到不真实的地图?
【发布时间】:2016-09-09 21:06:26
【问题描述】:

很抱歉,如果这个问题很宽泛,但我无法找到任何真正解决我必须解决的问题的方法。我需要解决将用户位置映射到表示地图的图像(如游乐园地图)的问题。

一种可能的解决方案是为图像的不同部分定义 GPS 坐标,然后将用户的位置捕捉​​到最近的定义位置。

我看到的其他东西是地理空间 PDF,但我找不到太多关于实现从 PDF 中读取地理空间信息的方法。

如何拍摄代表主题公园的图像并将用户的位置映射到该图像?

【问题讨论】:

    标签: c# android ios geolocation gis


    【解决方案1】:

    简答:

    你不能,我的意思是你不能只拍摄一张普通的图像并将坐标捕捉到它的像素。

    长答案: 可以,但需要大量的工作和准备,以下是您需要做的基本操作。

    第 1 步 - 地理参考图像

    为此,您需要一些 GIS 软件,以及在正确坐标空间中注册的该区域的现有地图。

    如果您有预算,那么您应该考虑使用专业软件,例如 Autodesk map 3D 或 ESRI 工具套件。如果您没有预算,可以使用 QGIS 等免费工具。

    我将假设 QGis 用于此描述。

    将您对该区域的现有地图(已被引用的地图)加载到您的 GIS 包中。 (如何以及从何处获取此地图完全取决于您,如果您很幸运,您可能有其他人做过,或者您的公园的建设者可能有您可以使用的场地平面图,但是如果没有此源地图,您除非您有所有要参考的点的列表,否则可能会忘记将图像与其匹配的任何机会) [旁注:使用 GPS 设备外出并手动记录您的点是完全可行的,尤其是如果您映射的站点不是很大,并且您可以完全访问它,因为您只引用自己的图像,而不是构建任何东西,因此不需要超级、超级 1000% 的准确度]

    假设使用QGis,进入“Raster”菜单,选择“GeoReferencer”工具

    加载该工具后,您将看到一个子窗口,您可以将“未引用”地图图像加载到其中。 (加载按钮标有红色箭头)

    加载光栅图像后,您需要使用已加载到 QGis 中的已引用地图 (抱歉,没有空间来记录这部分,有多种方法,具体取决于您拥有的数据) 并在您的地理参考工具中从中选择与栅格匹配的点。

    确保地理参考工具处于添加点模式。

    然后单击您加载到地理参考工具中的图像,在您想要的第一个点的位置。

    会弹出输入地图坐标框。

    如果您已经知道这些点的位置(例如,因为您带着 GPS 外出,或者您有一些调查数据),那么您只需输入它们即可。如果不知道,那么点击标记为“从地图画布”的按钮,地理参考工具将切换到您已加载的已参考地图,并要求您点击参考地图上的相同位置。

    点击参考地图后,QGis 将切换回地理参考工具并填写坐标

    此时,您可以单击“确定”,该点将作为参考点注册在您未参考的光栅图像上(小红点)

    重复此过程,直到您拥有想要引用的任意多个位置。您不必做所有事情,但应该完成关键位置,例如公园入口、主要场地轮廓周围的角落、突出建筑物的中心和道路交叉口。

    您参考的点越多,最终参考的光栅图像就越准确。

    完成将点添加到图像以引用它后,您需要单击黄色齿轮,并填写输出栅格、目标 SRS 和其他将其转换为地图的选项.

    现在,在这个阶段,我没有提到一个非常、非常、非常重要的概念,那就是“SRS”,也称为“空间参考系统”

    您可能已经注意到,在我上面的屏幕截图中,当通过单击地图在对话框中输入坐标时,它们看起来不像电话或 GPS 装置可能产生的通常的纬度/经度对。

    那是因为我的所有地图都位于名为“OSGB36”(或 EPSG:27700)的 SRS 中,这是英国的本地空间参考系统。

    如果我愿意,我可以使用标准 GPS 系统(称为 WGS84 或“EPSG:4326”),但因为我只在英国工作,这样做实际上会导致我的计算出现错误.

    如果您使用像游乐园这样的小东西,那么为了获得最佳效果,您需要找到您当地的地理坐标系,使用标准 GPS 坐标会导致太多错误,甚至可能导致当您最终在图像上绘制点时,位置绘制不正确。

    信息太多了,我无法将其放入 SO 帖子中,因此我强烈建议您从此处获取我就该主题撰写的电子书的免费副本:

    https://www.syncfusion.com/resources/techportal/details/ebooks/gis

    这将填写您需要的大量背景知识,以便执行此操作。

    设置好设置并添加所有参考点后,只需单击绿色三角形即可创建参考光栅图像

    一旦您到达这一点,并且您引用的图像已保存,您现在将拥有一个应该在本地坐标中引用的地图/图像,并且可以理解在同一坐标中赋予它的点系统,并知道将其绘制在地图上的哪个位置。

    然而,这只是你旅程的开始。

    第 2 步 - 构建地图服务器

    获得图像后,您需要托管在称为 WMS 服务器的东西中。

    再次,在 SO 帖子中从头开始描述如何执行此操作根本不切实际,您需要的是“geoserver”之类的东西(基于 Java 的易于使用的地图服务器系统) 或者类似一个简单的 linux 系统,安装了 apache webserver 并在其下运行 mapserver CGI 二进制应用程序。

    一旦您设置好地图服务器并使用 WMS 协议提供地图,您就可以进入最后阶段

    STEP3 - 创建应用程序以显示地图

    等式的最后一部分是构建一个应用程序来显示来自您的 WMS 服务器的地图,然后获取您要绘制的人或项目的位置,可选择将坐标转换为匹配的本地 SRS您的图像,然后将点绘制在图像上的正确位置。

    如果您在网络/移动应用程序中执行此操作,那么您很可能想要调查 openlayers.js 或 Leaflet.js 的使用,如果您在 C# 应用程序中执行此操作,那么 GreatMaps 或 SharpMap 是工具包你想看。

    总结

    许多人认为在地图图像上绘制位置是一项非常直接和简单的任务,我现在可以告诉你事实并非如此。

    这些年来,我构建了许多 GIS 系统,即使是最简单的系统也花了我 3 个月的时间。

    即使是一个简单的想法,例如您提出的问题,也需要大量的计划和分析,除非您只是想在您的网页上托管一个谷歌地图图像,并匹配您的设备坐标。

    从您开始制作自定义地图的那一刻起,您就会自动为大量工作做好准备,这需要您花费时间和耐心才能完成。

    图像中的像素与现实世界的坐标根本不匹配,事情的真相很简单。制图和 GIS 公司为创建这样的系统收取如此高的费用是有原因的。

    参考资料和延伸阅读

    http://www.qgistutorials.com/en/docs/georeferencing_basics.html

    http://www.digital-geography.com/qgis-tutorial-i-how-to-georeference-a-map/

    http://glaikit.org/2011/03/27/image-georeferencing-with-qgis/

    http://geoserver.org/

    http://mapserver.org/uk/index.html

    http://openlayers.org/

    祝您的项目一切顺利,请知道这一点,您需要做很多工作,但您也将获得很多乐趣,并学习大量新知识,GIS 的世界就其本质而言很复杂,但它也是一个非常吸引人的主题,尤其是当您从头开始绘制自己的地图时 :-)

    肖蒂

    【讨论】:

    • 哇,感谢您花时间这么详细地回答我的问题!
    • 没问题,我只是在正确的时间登录到正确的页面(在等待 QGis 加载内容的同时快速浏览 SO 上的 GIS。):-) 实际上恰好是做一些我自己的地理参考。
    【解决方案2】:

    如果您的地图图像表示的区域不是那么大,那么我会将其视为一个矩形。

    只需将 Lat/Lng 坐标转换为图像内的 (x,y) 坐标即可。

      Lat2 |----------------------------|
    
           |                            |
    
      Lat1 |----------------------------|
    
         Long1                        Long2
    

    将真实世界的纬度/经度坐标分配到地图的每个角落:

    Bottom Left Corner = Lat1, Long1
    Bottom Right Corner = Lat1, Long2
    Upper Left Corner = Lat2, Long1
    Upper Right Corner = Lat2, Long2
    

    给定用户经度和纬度并知道图像的宽度和高度,您可以计算图像上转换后的 (x,y) 坐标:

    x = User Longitude * Image Width / |Long2 - Long1|
    y = User Latitude * Image Height / |Lat2 - Lat1|
    

    您现在应该可以在 (x,y) 位置上放置一个大头针。

    【讨论】:

    • 问题是地图不是二维的,这意味着它是从一个角度观看的。
    • 我已经开始研究最近邻插值并手动将 GPS 坐标映射到图像位置。然后将用户位置捕捉到最近的邻居。映射到地图上的 GPS 样本越多,准确度就越高。
    • 如果要覆盖的区域不是很大,将其视为矩形应该没有任何问题。
    • 我不明白。我拥有的地图不是矩形的,所以我不确定矩形坐标系如何对齐。谢谢!
    • 您的地图看起来有一定角度的原因是因为您没有将其映射到适合您工作的空间参考系统。您将看到的错误之一(正如我在我的帖子中提到的)是屏幕图像似乎倾斜或倾斜,这仅仅是因为现实世界之间的颗粒间距指向您的使用点和像素 DPI你试图映射到的只是小而准确地匹配这样一个像素的小部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多