我已经写了一个增强现实应用程序,它将把物体放在打印的街道地图上。我知道每个地图每个角落的GPS坐标,并可以计算出在地图上放置任何对象的相对值。虽然这在地图集格式下效果很好,但我现在正在集成大型折叠地图(p.e.在法国),立场的偏差是不能接受的。
我没有任何坐标投影的经验,所以我找到了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非常相似(至少结果是这样)。
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";Latlon:
"+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;以及随机城市切雷市的坐标
cheray.lat = 45.97316;
cheray.lon = -1.352547;正确投影,坐标应该大致产生一个矩形(打印页),城市应该相对放置在距矩形左下角大约(0.1748,0.9044)的位置。
我得到的值与之相去甚远。我不知道我做错了什么,也不知道如何继续。提前感谢您的任何提示。
发布于 2017-08-23 18:43:27
墨卡托不是圆形的。你想转换成圆锥曲线,它是圆形的,使用地图的中心作为参考点。地球周长25,000英里,直径8,000英里。所以如果你从月球上看地球,看到地球是平的,你会看到一个直径为8000英里的圆,实际上在赤道上,是12500英里的半个圆。所以地球的曲率是12,500/8000 = 1.5的比率。实际上这是pi * r/2r = pi/2 = 1.57。
GPS经度从-324000000(西)到+324000000 (东),纬度从0(赤道)到+/-162000000.0 (北极/南极)。您将注意到最大经度(180度)是最大纬度(90度)的两倍。因此,GPS尺度对于纬度和经度都是相同的。
所以我认为你唯一需要做的就是将距离乘以比例因子1.57。
https://stackoverflow.com/questions/45820364
复制相似问题