【问题标题】:How to mark multiple coordinates in KML using Java?如何使用 Java 在 KML 中标记多个坐标?
【发布时间】:2012-10-03 03:06:43
【问题描述】:

我正在处理一个涉及使用 Java 创建 KML 的项目。目前,我正在使用Micromata Labs JAK Example 的 KML 示例中的示例 Java 代码。我试图通过添加多个坐标并获取两个标记来“扩展”代码,但我无法让它工作。你能告诉我如何添加多个坐标并在它们上面放置标记,并在标记之间画一条线。感谢您的帮助!

PS:我需要通过程序来做到这一点。我看到了它们使用 DOM 和 XML 的示例代码,但不是纯 Java/JAK。请指导我。

我得到了这个(更新):

kml.createAndSetDocument().withName("MyMarkers")
.createAndAddPlacemark().withName("London, UK").withOpen(Boolean.TRUE)  
.createAndSetPoint().addToCoordinates(-0.126236, 51.500152);    

kml.createAndSetDocument().withName("MyMarkers")  
.createAndAddPlacemark().withName("Somewhere near London,UK").withOpen(Boolean.TRUE)
.createAndSetPoint().addToCoordinates(-0.129800,52.70‌​0152);

但我知道我在某个地方出错了。请指出正确的方向。

这是生成的 KML 输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
<Document>
    <name>MyMarkers</name>
    <Placemark>
        <name>Somewhere near London, UK</name>
        <open>1</open>
        <Point>
            <coordinates>-0.1298,52.700152</coordinates>
        </Point>
    </Placemark>
</Document>
</kml>

我似乎无法再次访问文档来添加更多地标。我该怎么做?

【问题讨论】:

    标签: java kml google-earth jak


    【解决方案1】:

    基本上,你需要这样做:

    Document document = kml.createAndSetDocument().withName("MyMarkers");
    
    document.createAndAddPlacemark().withName("London, UK").withOpen(Boolean.TRUE)  
        .createAndSetPoint().addToCoordinates(-0.126236, 51.500152);    
    
    document.createAndAddPlacemark().withName("Somewhere near London,UK").withOpen(Boolean.TRUE)
        .createAndSetPoint().addToCoordinates(-0.129800,52.70‌​0152);
    

    之前,您正在创建一个新文档并将其设置为(作为唯一的文档!)在 kml 对象中。因此,只显示了最后一个条目。

    【讨论】:

      【解决方案2】:

      要在 KML 文件中放置多个地标,您需要一个文件夹或一个文档

      A basic &lt;kml&gt; element contains 0 or 1 Feature

      A Feature 是一个抽象元素,可以是Placemark

      A Container 扩展功能和 可以是DocumentFolder

      长话短说,如果您需要多个地标,则需要将它们包含在文档或文件夹中

      <kml>
        <Document>
          <Placemark>
          </Placemark>
          ...
          <Placemark>
          </Placemark>
        </Document>
      </kml>
      

      【讨论】:

      • 对,但那是纯 KML。我想用 Java 创建 KML 的结构。正如你所看到的,我尝试这样做。我添加了一个新文档,并创建了一个地标。如何在代码中添加第二个?
      • 您需要将第二个地标添加到文档元素中,因此生成的 kml 具有如上指定的结构,目前您将其添加到 kml 元素,而不是文档元素。
      • 我明白了。我会试一试,让你知道我是否以及何时出错。谢谢! :)
      • 请用您的最新版本更新您的问题,cmets 中发布的代码很难阅读。在我看来,您现在正在创建两个文档,均名为“MyMarkers”。发布生成的 kml 也会有所帮助。
      【解决方案3】:

      文档很糟糕。

              final Kml kml = new Kml();
              Document document = kml.createAndSetDocument();
              listForms = formDAO.getAll();
              for (Form list : listForms){
                  document.createAndAddPlacemark()
                  .withName(String.valueOf(list.getId()))
                  .withDescription(list.toStringKML())
                  .createAndSetPoint().addToCoordinates(-20.3978398, -43.5146653);
              }
              kml.setFeature(document);
              kml.marshal(new File("test.kml"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 2012-07-11
        • 1970-01-01
        • 2015-08-02
        相关资源
        最近更新 更多