【问题标题】:OpenLayers 5.3, get PROPERTIES from KML layer placemarkOpenLayers 5.3,从 KML 图层地标获取属性
【发布时间】:2019-02-04 16:19:35
【问题描述】:

我有一张地图,上面有不同的KML 图层

有一个工具提示,如果您将鼠标“悬停”在特定地点上,它会显示该地点的信息

例如。

我将鼠标移到“PUNTA CANA”上,应该有一个工具提示:

  • 名称:蓬塔卡纳
  • 幅度:2.2
  • 纬度:xxx
  • 经度:年年
  • 时间:dd/mm/YY,hh:ii

注意:如您所见,在我的 KML 中,我拥有所有这些信息:

<Folder>
<Placemark id="placemark54021">
<name> Punta Cana</name>
<lat>38.89</lat>
<longitudo>15.78</longitudo>
<magnitudo>2.1</magnitudo>
<profondita>109</profondita>
<data_intera>18/01/2019</data_intera>
<orario>09:10</orario>
<styleUrl>#simbolo_last_0_1</styleUrl>
<Point>
<coordinates>15.78,38.89</coordinates>
</Point>
</Placemark>
</Folder>

但是,如果我尝试获取属性,我只能读取 "name" 属性:

例如

map.on(select, function(event) {

    var feature = map.forEachFeatureAtPixel(event.pixel,
        function(feature, layer) {

        var values = feature.values_;

        var coordinate = event.coordinate;
        var hdms = ol.coordinate.toStringHDMS(ol.proj.toLonLat(coordinate));


        content.innerHTML = '<p style="font-weight: 800">'+ values.name +' - ' + '02/02/2002' + ' - ore 06:00</p>' +
                '<p><span style="font-weight: bold; color: red;">Magnitudo: 2.2</span> - ' +
                '<b>Lat:</b> 42.00 - <b>Long</b>: 32.00 - <b>Profondità</b>: 9km</p>';

        overlay.setPosition(coordinate);


        }, {
            hitTolerance: 5
        });
});

我使用 values.name 正确读取了属性名称。 但是,如果我尝试 same way 来读取其他属性。 例如。: - 值.lat - 值.longitudo ETC... 它不起作用!

如何从 KML 收集其他属性? 我错过了什么吗?

谢谢!

【问题讨论】:

    标签: javascript openlayers kml openlayers-5


    【解决方案1】:

    不确定这是否相关(因为我不太了解 openlayers),但您的 KML 结构不是有效的 KML。您直接在 KML 中为数据变量使用自定义标签,这是不受支持的。如果您想在 KML 要素中包含类似的属性数据,通常最好使用 &lt;ExtendedData&gt; 部分(定义或不定义模式)。您的 KML 最终会看起来像:

    <kml>
      <Folder>
        <Placemark id="placemark54021">
          <name>Punta Cana</name>
          <styleUrl>#simbolo_last_0_1</styleUrl>
          <ExtendedData>
            <Data name="lat"><value>38.89</value></Data>
            <Data name="longitudo"><value>15.78</value></Data>
            <Data name="magnitudo"><value>2.1</value></Data>
            <Data name="profondita"><value>109</value></Data>
            <Data name="data_intera"><value>18/01/2019</value></Data>
            <Data name="orario"><value>09:10</value></Data>
          </ExtendedData>
          <Point>
            <coordinates>15.78,38.89</coordinates>
          </Point>
        </Placemark>
      </Folder>
    </kml>
    

    【讨论】:

    • 谢谢克里斯蒂安。更准确地说(如果其他人读过这篇文章),我使用了这个 sintax:&lt;ExtendedData&gt; &lt;Data name="lat"&gt; &lt;value&gt;38.89&lt;/value&gt; &lt;/Data&gt; &lt;/ExtendedData&gt;
    • 啊,你说得对,我忘记了 标签。我的错...我会编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多