📄 gmlmultisurfaceparser.java
字号:
package com.esri.solutions.jitk.datasources.ogc.gml.parsing;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
import com.esri.solutions.jitk.datasources.ogc.gml.GMLLinearRing;
import com.esri.solutions.jitk.datasources.ogc.gml.GMLMultiSurface;
public class GMLMultiSurfaceParser {
public GMLMultiSurfaceParser() {
}
/*
* Polygon Example:
*
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>48.5466792935697 -95.3428312927359 48.7151719818551 -95.3410528986394 48.7173575306641 -95.0943590413198 48.911762409631 -95.0949103591175 48.8944847749398 -95.1338212265542 48.8794465165983 -95.2195784949877 48.9029495836267 -95.2902601906278 48.9320720044932 -95.3141717474895 48.9459389204173 -95.3037572953002 48.9609770120568 -95.3209164322569 48.9789563350931 -95.3232358732832 48.9933954555909 -95.3101205798877 48.999991212244 -95.2766571152866 48.9999959148723 -95.1577498893628 49.3717301437862 -95.1518673347568 49.3308059165428 -94.8320392613248 48.8771613109608 -94.6812499456836 48.7776155300334 -94.6944320224136 48.7136762635816 -94.5703127368143 48.7107852810124 -94.4306344734039 48.3682124544205 -94.4316900480531 48.369004737338 -95.2117880162934 48.5443577612451 -95.2198397975193 48.5466792935697 -95.3428312927359</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
*/
public GMLMultiSurface parse(XMLEventReader xmler, XMLEvent currentEvent) throws XMLStreamException {
GMLMultiSurface surface = new GMLMultiSurface();
String currentElementName = "";
String endElementName = "";
while (xmler.hasNext()) {
XMLEvent event = xmler.nextEvent();
if (event.isStartElement()) {
currentElementName = event.asStartElement().getName().getLocalPart();
}
if (event.isCharacters()) {
if (currentElementName.equalsIgnoreCase("posList")) {
String coords = event.asCharacters().getData();
// The posList data can be larger than 10,916 bytes, which appears to
// be the limit for a single event read. Continue reading unitl all
// positions are read.
while (xmler.peek().isCharacters()) {
event = xmler.nextEvent();
coords += event.asCharacters().getData();
}
buildMultiSurfaceRing(surface, coords);
}
}
if (event.isEndElement()) {
endElementName = event.asEndElement().getName().getLocalPart();
if (endElementName.equalsIgnoreCase("MultiSurface")) {
break;
}
}
}
return surface;
}
protected void buildMultiSurfaceRing(GMLMultiSurface surface, String rawGmlPoint) {
GMLLinearRing ring = new GMLLinearRing();
ring.setPostList(rawGmlPoint);
surface.addRing(ring);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -