Java 如何使用Geotools编写GML解析器?
我使用geotools 8.4从OS Mastermap为GML文件编写了一个解析器。有一部分我还是有问题。这把xsd的剪子:Java 如何使用Geotools编写GML解析器?,java,geotools,gml-geographic-markup-lan,Java,Geotools,Gml Geographic Markup Lan,我使用geotools 8.4从OS Mastermap为GML文件编写了一个解析器。有一部分我还是有问题。这把xsd的剪子: <complexType name="RoadLinkType"> <complexContent> <extension base="osgb:AbstractFeatureType"> <sequence> <element name
<complexType name="RoadLinkType">
<complexContent>
<extension base="osgb:AbstractFeatureType">
<sequence>
<element name="polyline" type="gml:GeometryPropertyType"/>
<element name="directedNode" type="osgb:directedNodeAssociationType" minOccurs="2" maxOccurs="2"/>
</sequence>
</extension>
</complexContent>
</complexType>
以及输出:
id: osgb4000000023204016
polyline: LINESTRING (516609 257678, 516615 257733, 516618 257786)
directedNode: '{orientation=-, href=#osgb4000000027916595}' class java.util.HashMap
我做错了什么?为什么我不能同时获得directedNode?如何绑定到真正的Java对象?在您调用的循环中
Object dnode=feature.getAttribute(“directNode”)代码>。如的文档中所述,调用将只返回一个节点,即列表中的第一个或最后一个节点,文档没有说明。如果要检索所有节点,应调用。虽然您需要自己检查姓名,但这会解决您的问题
虽然已经过了相当长的一段时间,但它可能仍然与读者相关 我还把它贴在了gis.stackexchange上,因为我不知道它更适合哪里:谢谢你的努力(尽管我不再需要它了)。欢迎你。您希望我将答案也发布在GIS Stackexchange网站上,还是希望链接到此网站,编写您自己的答案?您可以这样做。你应该为此获得声誉;)
GML gml = new GML(Version.GML3);
CRSAuthorityFactory crsFac = ReferencingFactoryFinder.getCRSAuthorityFactory("EPSG", null);
CoordinateReferenceSystem osgbCrs = crsFac.createCoordinateReferenceSystem("EPSG:27700");
gml.setCoordinateReferenceSystem(osgbCrs);
SimpleFeatureIterator iter = gml.decodeFeatureIterator(in);
while (iter.hasNext())
{
SimpleFeature feature = iter.next();
System.out.println("id: " + feature.getID());
System.out.println("polyline: " + feature.getAttribute("polyline"));
Object dnode = feature.getAttribute("directedNode");
System.out.println("directedNode: '" + dnode + "'\t" + dnode.getClass());
}
id: osgb4000000023204016
polyline: LINESTRING (516609 257678, 516615 257733, 516618 257786)
directedNode: '{orientation=-, href=#osgb4000000027916595}' class java.util.HashMap