📄 gmlgeometryparser.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.IGMLGeometry;
import com.esri.solutions.jitk.datasources.ogc.wfs.parsing.stax.IElementParser;
import com.esri.solutions.jitk.datasources.ogc.wfs.parsing.stax.ParsingException;
public class GMLGeometryParser implements IElementParser{
protected GMLMultiCurveParser _gmlMultiCurveParser = new GMLMultiCurveParser();
protected GMLMultiSurfaceParser _gmlMultiSurfaceParser = new GMLMultiSurfaceParser();
protected GMLPointParser _gmlPointParser = new GMLPointParser();
protected IGMLGeometry _currentGeometry = null;
public GMLGeometryParser() {
}
/*
* Point Example:
*
* <gml:Point>
<gml:pos>-122.457766445736 37.7633529139773</gml:pos>
</gml:Point>
* 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>
* Line Example:
*
<gml:MultiCurve>
<gml:curveMember>
<gml:LineString>
<gml:posList>45.7600546588558 -119.168868672517 45.7638769627002 -119.215334347072 45.7773470144612 -119.339828005814 45.8163032256863 -119.612312147489 45.8243941523025 -119.666856095153 45.8072387037575 -119.857573706345 45.767942206243 -120.043920042746 45.7522859126155 -120.12872332364 45.7013363442887 -120.194169498599 45.6757913969963 -120.397697283718 45.6715257192266 -120.493334772811 45.6846631136783 -120.533802656017 45.7169959964628 -120.574667570018 45.7216875915251 -120.621910523352 45.6912458132687 -120.681574076247 45.6544368634817 -120.804723734685 45.6186886841224 -120.903038860253 45.6319290030582 -120.967036410793 45.6343695574925 -121.05453236267 45.626396553557 -121.076207830131 45.5921664817446 -121.118421988557 45.5832852516356 -121.154349511484 45.5839293682508 -121.192825311942 45.5929929675775 -121.210327464259 45.6468609437721 -121.229378231081 45.6541505600154 -121.274186114305 45.6718698751035 -121.307282498605 45.6756881365808 -121.345368596442 45.6865409730422 -121.363686800664 45.6770113735346 -121.403512478945 45.67465753537 -121.419671626101 45.6983578579702 -121.506074799898 45.690609724483 -121.573420096403 45.6667976580193 -121.693774938913 45.6741481634062 -121.810430702612 45.6599574370579 -121.861595027014 45.632850330585 -121.889618621242 45.5978583882015 -121.982867702459 45.5853961316371 -122.059491945563 45.5674751207184 -122.097876518452 45.5635539409591 -122.152962421922 45.5329191598635 -122.22353639063 45.5304092201467 -122.322979140533 45.5406819001248 -122.398709044705 45.5263196996411 -122.471142666611 45.5311906986007 -122.531469320803 45.518365661064 -122.553846667738 45.5170265366317 -122.575224771977 45.5182009369125 -122.635246826224 45.5386969540394 -122.648698097972 45.5486720736045 -122.672998467939</gml:posList>
</gml:LineString>
</gml:curveMember>
</gml:MultiCurve>
*/
public void parse(XMLEventReader xmler, XMLEvent currentEvent) throws XMLStreamException, ParsingException {
XMLEvent event;
String currentElementName = "";
boolean firstElementAfterShape = true;
while (xmler.hasNext()) {
event = xmler.nextEvent();
if (event.isStartElement()) {
currentElementName = event.asStartElement().getName().getLocalPart();
if (currentElementName.equals("MultiSurface")) {
_currentGeometry = _gmlMultiSurfaceParser.parse(xmler, currentEvent);
}
else if (currentElementName.equals("MultiCurve")) {
_currentGeometry = _gmlMultiCurveParser.parse(xmler, currentEvent);
}
else if (currentElementName.equals("Point")) {
_currentGeometry = _gmlPointParser.parse(xmler, currentEvent);
}
else {
if (firstElementAfterShape) {
throw new UnsupportGmlGeometryException(currentElementName + " GML Geometry type not supported");
}
}
firstElementAfterShape = false;
}
if (event.isEndElement()) {
String endElement = event.asEndElement().getName().getLocalPart();
if (endElement.equalsIgnoreCase("Shape")) {
break;
}
}
}
}
public IGMLGeometry getGeometry() {
return _currentGeometry;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -