我有一个位图,我的用户在图像上设置了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然后是北,南,东和西(在这种情况下我设置rotation = 0),但是如果用户设置多于2个点?
答案 0 :(得分:2)
这对于评论来说太长了所以我会把它写成答案(我确实尝试将其写为评论两次!)。首先让我们来处理你在地图上得到的标记数量:在一个完美的世界中,你应该只需要两个标记,因为几何上你只需要随后得到任何的坐标。地图上的其他点。这意味着第三个标记应该是冗余,它的精确坐标可以使用前两个点的坐标来计算。你暗示使用第3点你可以提取“旋转”,但这是完全错误的,因为地图是2D!这是一个旋转矩形的例子,它使用两个点完美定义:
用户在地图上标记的内容:
如何解释该信息:
当您从同一个矩形中获得第3个点时,您将有机会进行一些“纠错”。假设您要提取矩形左上角的精确坐标。数学上只需要两点来计算它。当你获得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的作用。如果我猜它会是这样的:图像首先被放置在由顶部/底部/左/右坐标定义的空间中的地图上,然后旋转给定的量。如果这是真的,这就是我准备你的位图所做的事情: