0

我编写了一个增强现实应用程序,它将对象放置在打印的街道地图上。我知道每张地图每个角落的 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)处。

我得到的价值相去甚远。我不知道我做错了什么以及如何继续。提前感谢您的任何提示。

4

1 回答 1

0

墨卡托不是圆形的。您想从使用地图中心作为参考点的圆形圆锥转换。地球的周长为 25,000 英里,直径为 8,000 英里。所以如果你从月球上看地球,看到地球是平的,你会看到一个直径为 8,000 英里的圆圈,实际上在赤道处是 12,500 英里的半个圆圈。所以地球的曲率是 12,500/8000 = 1.5。实际上这是 pi * r/2r = pi/2 = 1.57。

GPS 经度从 -324000000(西)到 +324000000(东),纬度从 0(赤道)到 +/-162000000.0(北极/南极)。您会注意到最大经度(180 度)是最大纬度(90 度)的两倍。因此,纬度和经度的 GPS 比例是相同的。

所以我认为你唯一需要做的就是将距离乘以比例因子 1.57。

于 2017-08-23T10:43:26.950 回答