如何使用地标ID和Java API for KML从文件夹中删除KML地标?

时间:2013-08-21 01:18:07

标签: java api kml jak

我正在使用Java API for KML,JAK来构建KML文件。我希望能够使用其ID删除一个功能,但我还没有找到一个如何做到这一点的好例子。理想情况下,代码将是“myFolder.deleteFeatureById(theID);”,但事实并非如此。有没有比以下更好的方法?

List<Feature> features = myFolder.getFeature();
    for(int i=features.size()-1; i>=0; i--)
    {
        if(features.get(i).getId() == "myId")
        {
            features.remove(i);
            break;
        }
    }        

1 个答案:

答案 0 :(得分:1)

在Java中,您需要使用String.equals()方法而不是逻辑==运算符来比较字符串。

==检查两件事情是否完全相同,不是因为它们具有相同的内容,所以某些字符串比较可以相等(相同的字符串),但对==进行不同的测试。

以下情况应该有效。

List<Feature> features = myFolder.getFeature();
for(int i=features.size()-1; i >= 0; i--)
{
    if("myId".equals(features.get(i).getId()))
    {
        features.remove(i);
        break;
    }
}

此处示例代码使用JAK API在文件夹中创建两个地标,然后通过其ID删除一个。

    final Kml kml = new Kml();
    final Folder folder = new Folder();
    kml.setFeature(folder);

    folder.setName("Folder.kml");
    folder.setOpen(true);

    final Placemark placemark1 = new Placemark().withId("1")
        .withName("Folder object 1 (Placemark)");
    folder.getFeature().add(placemark1);

    final Placemark placemark2 = new Placemark().withId("2")
        .withName("Folder object 2 (Placemark)");
    folder.getFeature().add(placemark2);

    List<Feature> features = folder.getFeature();
    System.out.println(features); // dumps two features     

    for(int i=features.size()-1; i >= 0; i--)
    {
        Feature f = features.get(i);
        if("1".equals(f.getId()))
        {
            // this removes feature with id = "1"
            features.remove(i);
            break;
        }
    }

    System.out.println(features); // folder now only has one item

此问题的相关详情: