【发布时间】:2016-02-07 01:21:32
【问题描述】:
我正在尝试修改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>
这里是地震集群示例中的 sn-p,它处理单个特征的样式:
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")”,它返回了“name”标签内的内容。我认为调用“.get("ExtendedData")”会返回“ExtendedData”标签的内容,但是当我尝试将它打印到控制台时它似乎没有返回任何内容。甚至在将变量 extendedData 转换为 String 之前将其记录到控制台日志“未定义”。
我想我要问的是,当您尝试访问这些值时,如何深入了解嵌套标签?
【问题讨论】:
标签: javascript kml openlayers-3 domparser