【发布时间】:2018-01-30 21:37:44
【问题描述】:
我编写了一个增强现实应用程序,它将对象放置在打印的街道地图上。我知道每张地图每个角落的 GPS 坐标,并且可以计算出在这张地图上放置任何对象的相对值。 虽然这适用于地图集格式,但我现在正在集成大型折叠地图(例如法国),其中位置偏差变得不可接受。
我在坐标投影方面没有任何经验,所以我发现 proj.4 看起来很完美,并且很高兴找到一个 unity3d 集成。 但无论我尝试什么,我都会得到错误的值(可能是我的错,因为我没有深入了解我在这里所做的事情)
这是生成我所有其他地图的地图的投影(我自己组装了字符串,它可能包含语法错误,但值是正确的)
"+proj=lcc +lat_1 =49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps = bessel +datum=hermannskogel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs";
我认为我必须从一个看起来与 lcc 非常相似(至少结果是)的球形 latlon 或 webmercator 进行投影
Webmercator:
"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs";
拉特隆:
"+proj=latlong +a=6370 +b=6370 +towgs84=0,0,0 +no_defs"
所以我初始化投影,然后转换他的位置列表: WebMercator.Transform(mainMapProj, xValues, yValues);
作为测试数据集,我使用的是法国南部地图的 GPS 坐标:
testMap.TopLeft_lat = 46.985;
testMap.TopLeft_lon = -3.702;
testMap.TopRight_lat = 47.3162;
testMap.TopRight_lon = 9.1447;
testMap.BottomRight_lat = 42.41;
testMap.BottomRight_lon = 9.1667;
testMap.BottomLeft_lat = 41.3022;
testMap.BottomLeft_lon = -2.291;
以及随机城市chereay的坐标
cheray.lat = 45.97316;
cheray.lon = -1.352547;
正确投影,坐标应该大致形成一个矩形(打印页面),并且城市应该相对放置在矩形左下角大约(0.1748,0.9044)处。
我得到的价值观相去甚远。我不知道我做错了什么以及如何继续。提前感谢您的任何提示。
【问题讨论】:
-
这是一个 7 年级的地理问题,您将学习不同类型的投影图。你知道你有什么类型的地图吗?该代码使用墨卡托投影地图,您的地图可能不是墨卡托地图(请参阅 wiki en.wikipedia.org/wiki/Mercator_projection)。还有en.wikipedia.org/wiki/List_of_map_projections
-
我一定是在七年级时生病了:-)... 如上所述,我的地图是 lcc(参见第一个投影定义)。我需要转换纬度/经度值,以便可以在该地图上使用 x/y 值正确放置它们。到目前为止,我得到的值是错误的。那么从循环 latlon 转换为 lcc 的方法是错误的吗?我应该尝试什么?
标签: c# dictionary coordinates projection proj