我编写了一个增强现实应用程序,它将对象放置在打印的街道地图上。我知道每张地图每个角落的 GPS 坐标,并且可以计算出在这张地图上放置任何对象的相对值。虽然这适用于地图集格式,但我现在正在集成大型折叠地图(pe France),其中位置偏差变得不可接受。
我在坐标投影方面没有任何经验,所以我发现 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";
我想我必须从一个看起来非常相似(至少结果是)的球形 latlon 或 webmercator 投射到 lcc
网商:
"+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)处。
我得到的价值相去甚远。我不知道我做错了什么以及如何继续。提前感谢您的任何提示。