【发布时间】:2018-03-07 12:29:17
【问题描述】:
在阅读了 Projection 的 documentation 并进行了一些尝试失败的测试后,我发现自己无法找到解决此问题的方法。
我找到的所有解决方案都涉及 x 和 y 坐标参考墨卡托地图投影这一事实,但在这种情况下,我将它们来自放置在地图上一层的本地图像。
假设我有一个 400px * 200px 的灰度图像,使用 ImageOverlay.Rotated 放置在传单地图上,位置:
var topleft = L.latLng(41.604766, 0.606402);
var topRight = L.latLng(41.605107, 0.606858);
var bottomleft = L.latLng(41.604610, 0.606613);
此图像使用左上角、右上角和左下角坐标作为参考放置在地图上。
结果是一个稍微向北旋转的矩形。
如果我知道我把手机放在像素 100,50( 原始图像),我如何将这个笛卡尔坐标转换为纬度和经度以供我的地图显示?
如果它是一个与北方完全对齐的矩形,我想我可以得到左上角和左下角之间 º 的差异,将其除以像素数,然后将结果乘以我手机的 Y 以获得纬度。使用先前的值,我会将它乘以我手机的 X 以获得我手机的经度。
但考虑到形状是旋转的,世界并不平坦,而且我的地理和三角学真的很差,我不确定它是否足够精确。
最后我们说的是电话,而不是建筑物。几米外(2-4)是可以的,一个建筑街区就不行了。
【问题讨论】:
-
随着图像的“分辨率”变大,这变得更加困难。由于地球的曲率,纬度和经度不是线性的(就像您的图像那样)。这是使用半正弦公式处理的。不确定这是否有帮助,但请查看该公式。它可能会帮助您找到答案。
-
源图像非常小(最多只能表示几十米),因此图像的分辨率应始终保持不变。为了使它更容易,我只需要根据通用谷歌地图/传单缩放措施在缩放级别 25-30 的确切位置。
标签: javascript angular typescript leaflet angular-leaflet-directive