OpenLayers 5.3,从 KML 图层地标获取属性
OpenLayers 5.3, get PROPERTIES from KML layer placemark
我在不同的 KML 图层.
上有一张 带有地震 信息的地图
有一个 工具提示,如果您 "hover" 将鼠标放在某个特定位置,它会显示 信息 。
例如
我将鼠标移到 "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>
但是,如果我尝试获取属性,我只能读取 "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 正确读取了 属性 名称。
但是,如果我尝试 相同的方式 来读取其他属性。
例如。:
- values.lat
- values.longitudo
ETC...
不行!
如何从 KML 中收集其他属性?
我错过了什么吗?
谢谢!
不确定这是否相关(因为我不太了解 openlayers),但是您的 KML 结构不是有效的 KML。您直接在 KML 中为数据变量使用自定义标签,这是不受支持的。如果您想在 KML 要素中包含类似的属性数据,通常最好使用 <ExtendedData>
部分(定义或不定义架构)。您的 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>
我在不同的 KML 图层.
上有一张 带有地震 信息的地图有一个 工具提示,如果您 "hover" 将鼠标放在某个特定位置,它会显示 信息 。
例如
我将鼠标移到 "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>
但是,如果我尝试获取属性,我只能读取 "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 正确读取了 属性 名称。 但是,如果我尝试 相同的方式 来读取其他属性。 例如。: - values.lat - values.longitudo ETC... 不行!
如何从 KML 中收集其他属性? 我错过了什么吗?
谢谢!
不确定这是否相关(因为我不太了解 openlayers),但是您的 KML 结构不是有效的 KML。您直接在 KML 中为数据变量使用自定义标签,这是不受支持的。如果您想在 KML 要素中包含类似的属性数据,通常最好使用 <ExtendedData>
部分(定义或不定义架构)。您的 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>