Есть ли встроенный способ анализа файла SLD с помощью геоинструментов, который работает для SLD 1.0.0 и SLD 1.1.0?
Как разобрать SLD 1.0.0 или 1.1.0 с помощью геоинструментов?
Ответы (1)
Я не нашел встроенного способа, но одним из возможных решений является получение версии SLD из XML-файла. В зависимости от версии его можно разобрать с помощью подходящего класса Configuration
.
public Style createStyleFromSld(String uri) throws XPathExpressionException, IOException, SAXException, ParserConfigurationException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document xmlDocument = db.parse(uri);
XPath xPath = XPathFactory.newInstance().newXPath();
String version = xPath.compile("/StyledLayerDescriptor/@version").evaluate(xmlDocument);
Configuration sldConf;
if (version != null && version.startsWith("1.1")) {
sldConf = new org.geotools.sld.v1_1.SLDConfiguration();
} else {
sldConf = new org.geotools.sld.SLDConfiguration();
}
StyledLayerDescriptor sld = (StyledLayerDescriptor) new DOMParser(sldConf, xmlDocument).parse();
NamedLayer l = (NamedLayer) sld.getStyledLayers()[0];
Style style = l.getStyles()[0];
return style;
}
person
gillesB
schedule
26.09.2019
В идеальном мире вы могли бы посмотреть на MIME-тип файла и использовать его, чтобы различать их, но если это не ваш подход или попытка одного, то другой - лучший план.
- person Ian Turton; 27.09.2019