2

我有一个位图,我的用户在图像上设置了 2 个或更多标记,然后为任何标记设置纬度和经度。有了这个信息,我必须为 KML 文件创建一个地面叠加层,所以我需要知道如何计算 LatLonBox 参数:位图的北、南、东、西和旋转。

有任何想法吗?

这是结果的示例:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Folder>
    <name>Ground Overlays</name>
    <description>Examples of ground overlays</description>
    <GroundOverlay>
      <name>Large-scale overlay on terrain</name>
      <description>Overlay shows Mount Etna erupting on July 13th, 2001.</description>
      <Icon>
        <href>http://developers.google.com/kml/documentation/images/etna.jpg</href>
      </Icon>
      <LatLonBox>
        <north>37.91904192681665</north>
        <south>37.46543388598137</south>
        <east>15.35832653742206</east>
        <west>14.60128369746704</west>
        <rotation>-0.1556640799496235</rotation>
      </LatLonBox>
     </GroundOverlay>
  </Folder>
</kml>

我的问题是北、南、东、西和旋转值。事实上,我的用户必须加载图像,然后他在其上放置 2 个或更多标记,并为所有标记设置纬度和经度。有了这些数据,我认为有可能获得北、南、东、西和旋转值,但我不知道如何。如果用户只放置 2 个标记,这很容易,我可以计算 dX 和 dY,然后计算北、南、东和西(在这种情况下,我设置旋转 = 0),但如果用户设置超过 2 个点?

4

1 回答 1

2

这对于评论来说太长了,所以我将其写为答案(我确实尝试将其写为评论两次!)。首先让我们来处理您将在地图上获得的标记数量:在完美的世界中,您只需要两个标记,因为从几何上讲,它们是您随后导出地图上任何其他点的坐标所需的全部。这意味着第三个标记应该是多余的,它的精确坐标可以使用前两点的坐标来计算。您暗示使用第三点可以提取“旋转”,但这是完全错误的,因为地图是 2D 的!这是一个使用两点完美定义的旋转矩形示例:

用户在地图上标记的内容:

在此处输入图像描述

如何解释该信息: 在此处输入图像描述

从同一个矩形中获得第三个点的那一刻,您就有机会进行一些“纠错”。假设您要提取矩形左上角的精确坐标。为了计算它,你只需要两点数学。当您获得 3 个点(我们称这些点为 A、B 和 C)时,您可以使用 3 个等式计算相同的坐标:

(A,B) => P1
(A,C) => P2
(B,C) => P3

...而且您几乎可以保证为左上角的坐标获得 3 个不同的值(P1、P2 和 P3)!您现在需要应用一些纠错数学,以便将 3 个不同的值“合并”为一个值。这种纠错通常在现实世界中用于测地线(那些拿着黄色三脚架的人做测地线图,你会在所有建筑工地上看到他们)。如果您想要正确的解决方案,您可以研究它,或者您可以简单地平均 3 个值并完成它,它很可能足以满足您的需求。

请求的输出 XML 似乎使用 TOP、BOTTOM、LEFT、RIGHT 和 ROTATION 坐标定义图像矩形。为了将您的坐标转换为该格式,您需要弄清楚目标软件对 XML 的作用。如果我猜测它会是这样的:图像首先放置在地图上由上/下/左/右坐标定义的空间中,然后旋转给定的数量。如果这是真的,这就是我准备你的位图的方法:

  1. 首先确定左上角、右上角和右下角的坐标。到目前为止,应该清楚两点就足够了,但如果你得到多于两点,请找出一个纠错方案并使用所有点来获得更高的精度。
  2. 使用左上角和右上角坐标计算您当前的旋转。
  3. 找出目标软件使用的旋转中心点的坐标。目标软件是否围绕其中心旋转图像?它是否围绕左上角旋转图像?无论如何,计算该点的坐标。
  4. 使用您在 (2) 处获得的旋转角度围绕您在 (3) 处计算的 CENTER 旋转您的坐标,以使您的图像平行于水平轴。
  5. 从旋转的左上角向北和向西走,从右下角向南和向东走。你在 (2) 处得到了旋转角度,所以现在你已经有了一个完整的解决方案。
于 2012-10-08T08:08:29.147 回答