繁体   English   中英

OpenLayers 5.3,从KML图层地标获取属性

[英]OpenLayers 5.3, get PROPERTIES from KML layer placemark

我有一张地图,上面有不同KML图层上的地震信息。

如果您将鼠标悬停在特定位置,则有一个工具提示可以显示特定位置的信息

例如。

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

  • 姓名:蓬塔卡纳
  • 幅度:2.2
  • 纬度:xxx
  • 经度:yyy
  • 时间: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>

但是,如果尝试获取属性,则只能读取“名称”属性:

例如

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正确读取属性名称。 但是,如果我尝试以相同的方式读取其他属性。 例如:-values.lat-values.longitudo等... 不起作用!

如何从KML收集其他属性? 我想念什么吗?

谢谢!

不知道这是否相关(因为我不太了解openlayers),但是您的KML结构不是有效的KML。 您直接在KML中为数据变量使用自定义标记,这不受支持。 如果要在KML功能中包含类似的属性数据,通常最好使用<ExtendedData>部分(定义或不定义Schema)。 您的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM