如何在 openlayers 中访问 kml 中的嵌套标签?
How do I access a nested tag in a kml in openlayers?
我正在尝试修改 earthquake cluster map 以显示我自己的一些数据。在使用我的 KML 中的属性设置样式时,我 运行 遇到了问题。这是我的 KML 中的示例地图项:
<Placemark>
<name>REIERSTAD 2 ORION DW 16-2-7-6</name>
<ExtendedData><SchemaData schemaUrl="#alberta_wells">
<SimpleData name="UWI">F2/16-02-007-06W4/0</SimpleData>
<SimpleData name="KeyList">0074060216F20</SimpleData>
<SimpleData name="Field">0998</SimpleData>
<SimpleData name="Pool">0158098</SimpleData>
<SimpleData name="OSDep">0000000</SimpleData>
<SimpleData name="LicStatus">Issued</SimpleData>
<SimpleData name="License">0043029</SimpleData>
<SimpleData name="LicDate">19720719</SimpleData>
<SimpleData name="Licensee">0FF30</SimpleData>
<SimpleData name="FDDate">19720719</SimpleData>
<SimpleData name="TotalDep">0457.00</SimpleData>
<SimpleData name="WellStat">0600080000</SimpleData>
<SimpleData name="StatDate">19720721</SimpleData>
</SchemaData></ExtendedData>
<Point><coordinates>-110.707313,49.537234</coordinates></Point>
</Placemark>
下面是地震集群示例中处理各个特征样式的片段:
function createEarthquakeStyle(feature) {
// 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a
// standards-violating <magnitude> tag in each Placemark. We extract it
// from the Placemark's name instead.
var name = feature.get('name');
var magnitude = parseFloat(name.substr(2));
var radius = 5 + 20 * (magnitude - 5);
return new ol.style.Style({
geometry: feature.getGeometry(),
image: new ol.style.RegularShape({
radius1: radius,
radius2: 3,
points: 5,
angle: Math.PI,
fill: earthquakeFill,
stroke: earthquakeStroke
})
});
}
我想使用 "TotalDep" 值作为我的半径,替换示例当前使用的值(幅度)。但是,我的 KML 将这个 "TotalDep" 值隐藏在多个标签中。我一直在尝试使用 DOMParser 来提取此值,如下所示:
function createEarthquakeStyle(feature) {
var extendedData = feature.get('ExtendedData');
console.log(extendedData)
xmlDoc = parser.parseFromString(extendedData, "text/xml")
console.log(xmlDoc)
var wellDepth
var nodeList = xmlDoc.getElementsByTagName("SimpleData")
for (var i = 0; i < nodeList.length; i++) {
if (nodeList[i].getAttribute("name") == "TotalDep") {
wellDepth = parseFloat(nodeList[i].nodeValue)
}
}
var radius = wellDepth / 10.0;
return new ol.style.Style({
geometry: feature.getGeometry(),
image: new ol.style.RegularShape({
radius1: radius,
radius2: 3,
points: 5,
angle: Math.PI,
fill: earthquakeFill,
stroke: earthquakeStroke
})
});
}
它不起作用,一旦您放大到足以将聚类折叠为单个特征,特征将不会显示。
我看到在原始示例中,“.get("name")”在输入特征上被调用,return是 "name" 标签内的内容。我以为调用“.get("ExtendedData")”会 return "ExtendedData" 标签的内容,但是当我尝试打印它时它似乎 return 什么都没有安慰。甚至在将变量 extendedData 记录到控制台日志之前将其转换为 String "undefined".
我想我想问的是在尝试访问这些值时如何深入到嵌套标签?
好吧,很明显我在某种程度上把它复杂化了,但我对我现在如何让它工作感到困惑。似乎只是调用
var wellDepth = feature.get("TotalDep")
returns 该标签中包含的值:
<SimpleData name="TotalDep">0457.00</SimpleData>
我猜“.get()”函数会同时搜索标签名称和标签属性?还查看嵌套标签?这是这里发生的一些直截了当的巫术......我从非常沮丧到对此印象深刻。
对于可能在编写样式函数时拼命搜索如何从 KML 访问属性的任何人来说,最后一个提示是:尝试调用 feature.getKeys() 并将其记录到控制台。您将获得使用 feature.get() 可以访问的所有可能内容的列表。我就是这么想出来的。
我正在尝试修改 earthquake cluster map 以显示我自己的一些数据。在使用我的 KML 中的属性设置样式时,我 运行 遇到了问题。这是我的 KML 中的示例地图项:
<Placemark>
<name>REIERSTAD 2 ORION DW 16-2-7-6</name>
<ExtendedData><SchemaData schemaUrl="#alberta_wells">
<SimpleData name="UWI">F2/16-02-007-06W4/0</SimpleData>
<SimpleData name="KeyList">0074060216F20</SimpleData>
<SimpleData name="Field">0998</SimpleData>
<SimpleData name="Pool">0158098</SimpleData>
<SimpleData name="OSDep">0000000</SimpleData>
<SimpleData name="LicStatus">Issued</SimpleData>
<SimpleData name="License">0043029</SimpleData>
<SimpleData name="LicDate">19720719</SimpleData>
<SimpleData name="Licensee">0FF30</SimpleData>
<SimpleData name="FDDate">19720719</SimpleData>
<SimpleData name="TotalDep">0457.00</SimpleData>
<SimpleData name="WellStat">0600080000</SimpleData>
<SimpleData name="StatDate">19720721</SimpleData>
</SchemaData></ExtendedData>
<Point><coordinates>-110.707313,49.537234</coordinates></Point>
</Placemark>
下面是地震集群示例中处理各个特征样式的片段:
function createEarthquakeStyle(feature) {
// 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a
// standards-violating <magnitude> tag in each Placemark. We extract it
// from the Placemark's name instead.
var name = feature.get('name');
var magnitude = parseFloat(name.substr(2));
var radius = 5 + 20 * (magnitude - 5);
return new ol.style.Style({
geometry: feature.getGeometry(),
image: new ol.style.RegularShape({
radius1: radius,
radius2: 3,
points: 5,
angle: Math.PI,
fill: earthquakeFill,
stroke: earthquakeStroke
})
});
}
我想使用 "TotalDep" 值作为我的半径,替换示例当前使用的值(幅度)。但是,我的 KML 将这个 "TotalDep" 值隐藏在多个标签中。我一直在尝试使用 DOMParser 来提取此值,如下所示:
function createEarthquakeStyle(feature) {
var extendedData = feature.get('ExtendedData');
console.log(extendedData)
xmlDoc = parser.parseFromString(extendedData, "text/xml")
console.log(xmlDoc)
var wellDepth
var nodeList = xmlDoc.getElementsByTagName("SimpleData")
for (var i = 0; i < nodeList.length; i++) {
if (nodeList[i].getAttribute("name") == "TotalDep") {
wellDepth = parseFloat(nodeList[i].nodeValue)
}
}
var radius = wellDepth / 10.0;
return new ol.style.Style({
geometry: feature.getGeometry(),
image: new ol.style.RegularShape({
radius1: radius,
radius2: 3,
points: 5,
angle: Math.PI,
fill: earthquakeFill,
stroke: earthquakeStroke
})
});
}
它不起作用,一旦您放大到足以将聚类折叠为单个特征,特征将不会显示。
我看到在原始示例中,“.get("name")”在输入特征上被调用,return是 "name" 标签内的内容。我以为调用“.get("ExtendedData")”会 return "ExtendedData" 标签的内容,但是当我尝试打印它时它似乎 return 什么都没有安慰。甚至在将变量 extendedData 记录到控制台日志之前将其转换为 String "undefined".
我想我想问的是在尝试访问这些值时如何深入到嵌套标签?
好吧,很明显我在某种程度上把它复杂化了,但我对我现在如何让它工作感到困惑。似乎只是调用
var wellDepth = feature.get("TotalDep")
returns 该标签中包含的值:
<SimpleData name="TotalDep">0457.00</SimpleData>
我猜“.get()”函数会同时搜索标签名称和标签属性?还查看嵌套标签?这是这里发生的一些直截了当的巫术......我从非常沮丧到对此印象深刻。
对于可能在编写样式函数时拼命搜索如何从 KML 访问属性的任何人来说,最后一个提示是:尝试调用 feature.getKeys() 并将其记录到控制台。您将获得使用 feature.get() 可以访问的所有可能内容的列表。我就是这么想出来的。