以编程方式在KML中创建矢量箭头

6

有没有人有在KML中以矢量形式编程绘制图标的实际例子?具体而言,我有一些带有大小和方位角的数据,我想根据这些值生成图标(或其他图形元素)。

以下是我可能会采取的一些方法:

  1. 图像目录(一种蛮力方法):创建一个包含360个不同图像文件的图像目录(可能是批量旋转单个图像),每个文件指向相应的方位角。我看过类似于 "Excel to KML" 的东西,但我正在寻找可以在程序中使用的代码,而不是网络实用程序。问题:箭头不包含大小的上下文,因此必须添加标签。我宁愿动态延长箭头。

  2. KML中的线条创建:也许创建一个公式,该公式以坐标点为原点创建一条线,线的长度与大小成比例,并根据方位角倾斜。然后会有另外两条线,也许是30度左右,从前一条线的末端延伸出来,形成箭头。问题:不是单独的图像图标,因此不确定在KML中如何工作。还不确定生成此算法的难易程度。

  3. 分离图像生成:也许创建一个PHP文件,使用imagemagick或类似的东西以类似于上述方法动态生成.png文件,然后使用URI“domain.tld/imagegen.php?magnitude=magvalue&azimuth=azmvalue”链接到图标。问题:仍然存在实际编写图像生成算法的问题。

所以,问题是:是否有其他人提出了编程向量(而不仅仅是箭头)生成的解决方案?

1个回答

3

我曾经在Fortran中使用选项1的变体完成过这个任务,但只使用了一张箭头图片,并使用KML IconStyle元素设置大小和方向。

关键是首先将您的向量从任何格式转换为航向(以度为单位,顺时针从北方计算,因此介于0到360度之间),并将向量长度转换为比例因子(十进制表示的浮点数)。您还需要为每个向量命名。然后为每个向量创建一块KML代码,例如对于向量“my-vector-1”,其比例为1.8,方向为90.0(即东):

<IconStyle id="my-vector-1">
    <scale>1.8</scale>
    <heading>90.0</heading>
    <Icon>
        <href>/path/to/arrow.png</href>
    </Icon> 
</IconStyle>

然后将向量放置在地图上,参考IconStyle:

<Placemark>
  <styleUrl>#my-vector-1</styleUrl>
  <Point>
     <coordinates>-10.5,10.8</coordinates>
  </Point>

将所有这些内容包装在一起:
<kml><Document> ... </Document></kml> 

你应该显示一堆向量。获取正确的缩放因子可能需要进行一些实验(并且取决于箭头图像的大小),但这种方法应该比加载大量不同的图像快得多。如果有帮助的话,我可能可以挖出做这个的Fortran代码...


无法通过更改方向使矢量图像旋转。有什么建议吗? - tony gil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接