如果这个问题很广泛,我很抱歉,但我无法找到解决问题的真正办法。我需要解决将用户的位置映射到表示地图的图像(如游乐园地图)的问题。
一种可能的解决方案是将GPS坐标定义到图像的不同部分,然后将用户的位置捕捉到最接近的定义位置。
我看到的其他东西是地理空间PDF,但我找不到实现从PDF读取地理空间信息的方法。
如何拍摄代表主题公园的图片并将用户的位置映射到该图片?
答案 0 :(得分:2)
简答:
你不能这样,我的意思是你不能只拍摄常规图像并快速对齐它的像素。
答案很长: 你可以,但需要做大量的工作和准备,这是你需要做的基础知识。
要做到这一点,你需要一些GIS软件,以及在正确的坐标空间中注册的现有地图。
如果您有预算,那么您应该考虑使用专业软件,例如Autodesk map 3D或ESRI工具套件。如果您没有预算,可以使用QGIS等免费工具执行此操作。
我将假设QGis用于此描述。
将您对区域(已经引用的那个)的现有地图加载到GIS包中。 (你如何以及在哪里获得这张地图完全取决于你,如果你的幸运,你可能有其他人做过,或者你的公园的建设者可能有你可以使用的网站计划,但是没有这个源地图,你,可以忘记任何匹配图像的机会,除非你有一个你想要参考的所有点的列表) [侧面注意:使用GPS设备并记录你的分数是完全可行的手动,尤其是如果您的地图不是很大并且您可以完全访问它,因为您只能引用自己的图像,而不是构建任何超级的图像,不需要1000%的准确度]
假设使用QGis,请转到" Raster"菜单,然后选择" GeoReferencer"工具
一旦工具加载,您将看到一个子窗口,允许您加载"未引用的"将图像映射到其中。 (加载按钮标有红色箭头)
加载光栅图像后,您需要使用已加载到QGis 中的已引用地图(抱歉没有空间来记录此部分,有多种方法,具体取决于您拥有的数据) 并在地理参考工具中从中选择与栅格匹配的点。
确保地理参照工具处于添加点模式。
然后在您想要第一个点的位置点击您加载到地理参考工具中的图像。
输入地图坐标框将弹出。
如果您已经知道这些点的位置(例如,因为您带着GPS,或者您有一些调查数据)那么您只需输入它们。如果没有,那么单击地图画布"中标记为"的按钮,地理参考工具将切换到已加载的已引用地图,并要求您单击引用地图上的相同位置。
点击引用的地图后,QGis将切换回地理参考工具并填入坐标
此时,您可以点击"确定"并且该点将在未参考的光栅图像上注册为参考点(小红点)
重复此过程,直到您拥有所需数量的位置。您不必做任何事情,但应该完成关键位置,例如公园入口,主要场地轮廓周围的角落,着名建筑物的中心和道路交叉点。
您引用的点越多,最终引用的光栅图像就越准确。
一旦您完成了将图像添加到图像中以引用它,您就需要单击黄色齿轮,并填写输出栅格,目标SRS以及将其转换为其他内容的选项。一张地图。
现在,在这个阶段,我还没有提到一个非常非常非常重要的概念,那就是" SRS"另外称为"空间参考系统"
您可能已经在上面的屏幕截图中注意到,当通过点击地图在对话框中输入坐标时,它们看起来不像手机或GPS装置可能产生的通常的纬度/经度对。
那是因为我的所有地图都在SRS中,称为" OSGB36" (或EPSG:27700),这是英国的地方空间参考系统。
如果我想,我可以使用标准GPS系统(称为WGS84或' EPSG:4326'),但因为我只在英国境内工作,所以这实际上会导致我的计算错误。
如果您使用小型娱乐公园,那么为了获得最佳效果,您需要找到您当地的地理坐标系统,使用标准GPS坐标会导致太多错误,甚至可能导致当您最终在图像上绘制点时,错误的位置绘图。
对于我来说,放入SO帖子的信息太多了,所以我强烈建议您从这里获取一份关于该主题的电子书的免费副本:
https://www.syncfusion.com/resources/techportal/details/ebooks/gis
为了做到这一点,这将填补你需要的大量背景知识。
一旦您设置了设置并添加了所有参考点,您就可以通过简单地点击绿色三角形来创建参考光栅图像
一旦你到达这一点,你的参考图像被保存,你现在将有一个地图/图像应该在你的当地坐标中引用,并且可以理解在同一坐标中给出的一个点系统,并知道在地图上绘制它的位置。
然而,这只是你旅程的开始。获得图像后,您需要托管一个名为WMS服务器的东西。
再一次,描述如何在SO帖子中从头开始这样做只是不切实际,你需要的是像#ge; geoserver" (一个基于Java的易于使用的地图服务器系统)或类似于一个简单的linux系统,安装了apache webserver并在其下运行mapserver CGI二进制应用程序。
设置地图服务器并使用WMS协议提供地图后,您可以进入最后阶段
等式的最后一部分是构建一个应用程序以显示来自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://mapserver.org/uk/index.html
您的项目一切顺利,请知道这一点,您需要做很多工作,但您也会有很多乐趣,并且学习大量新东西,GIS的世界就是它的基础。这本身非常复杂,但它也是一个非常迷人的主题,特别是当你从头开始绘制你自己的地图时: - )
辣妹
答案 1 :(得分:1)
如果您的地图图像代表的区域不是那么大,那么我会将其视为一个矩形。
只需将Lat / Lng坐标转换为图像内的(x,y)坐标即可。
pip install
将真实世界的纬度/经度坐标分配到地图的每个角落:
Lat2 |----------------------------|
| |
Lat1 |----------------------------|
Long1 Long2
考虑到用户的经度和纬度并知道图像的宽度和高度,您可以计算图像上的变换(x,y)坐标:
Bottom Left Corner = Lat1, Long1
Bottom Right Corner = Lat1, Long2
Upper Left Corner = Lat2, Long1
Upper Right Corner = Lat2, Long2
您现在应该能够在(x,y)位置放置一个引脚。