จะเขียน GML ด้วย Geotools ได้อย่างไร


9

ฉันต้องการเขียน GML โดยใช้ Geotools น่าเสียดายที่ฉันไม่พบเอกสารของ GML Writer (ยกเว้นเอกสารนี้ตั้งแต่ปี 2549: http://docs.codehaus.org/display/GEOTOOLS/WFS+++GML+DataStore )

คุณช่วยชี้ฉันที่เอกสาร / ตัวอย่างได้ไหม

คำตอบ:


9

ฉันจะพยายามโยกย้ายเอกสารประกอบเครื่องมือทางภูมิศาสตร์ไปยังเทคโนโลยีอื่น (นอกเหนือจาก wiki) เพื่อให้ตัวอย่างโค้ดไม่ล้าสมัย

อัปเดตสิ่งนี้เสร็จแล้ว (ฉันรวบรวมสิ่งต่างๆเพื่อให้ตัวอย่างเรขาคณิตทั้งหมดอยู่ด้วยกัน):

นี่คือตัวอย่างที่สมบูรณ์จากหน้านั้น:

SimpleFeatureType TYPE = DataUtilities.createType("location", "geom:Point,name:String");

File locationFile = new File("location.xsd");
locationFile = locationFile.getCanonicalFile();
locationFile.createNewFile();

URL locationURL = locationFile.toURI().toURL();
URL baseURL = locationFile.getParentFile().toURI().toURL();

FileOutputStream xsd = new FileOutputStream(locationFile);

GML encode = new GML(Version.GML2);
encode.setBaseURL(baseURL);
encode.setNamespace("location", locationURL.toExternalForm());
encode.encode(xsd, TYPE);

xsd.close();

SimpleFeatureCollection collection = FeatureCollections.newCollection("internal");
WKTReader2 wkt = new WKTReader2();

collection.add(SimpleFeatureBuilder.build(TYPE, new Object[] { wkt.read("POINT (1 2)"),"name1" }, null));
collection.add(SimpleFeatureBuilder.build(TYPE, new Object[] { wkt.read("POINT (4 4)"),"name2" }, null));

ByteArrayOutputStream xml = new ByteArrayOutputStream();

GML encode2 = new GML(Version.GML2);
encode2.setBaseURL(baseURL);
encode2.setNamespace("location", "location.xsd");
encode2.encode(out2, collection);

xml.close();

String gml = xml.toString();

ตัวอย่างเพิ่มเติมของวิธีการใช้เทคโนโลยีการแยกวิเคราะห์ GML 4 แบบคือกรณีทดสอบที่มาพร้อมกับซอร์สโค้ด

  1. แซ็กโซโฟน
  2. DOM
  3. GTXML เวอร์ชั่น 1.x (ใช้สำหรับ GML2 ใน WFSDataStore VERSION = 1.0)
  4. GTXML เวอร์ชั่น 4.x (ใช้สำหรับทุกอย่างตอนนี้)

เทคโนโลยี GTXML ทั้งสองนั้นเป็นการรวมกันของส่วนที่ดีที่สุดของตัวแยกวิเคราะห์ SAX ที่มีความสามารถในการแยกส่วนของรหัส (เรียกว่าการผูก) เพื่อใช้ในการแยกวิเคราะห์แต่ละองค์ประกอบตามที่มา (ขึ้นอยู่กับการมององค์ประกอบใน สคี)


ฉันได้รับข้อยกเว้นต่อไปนี้เมื่อพยายามเข้ารหัส SimpleFeatureCollection โดยใช้รหัสด้านบน "java.lang.IllegalStateException: ไม่สามารถเข้ารหัสชุดรวมคุณสมบัติโดยใช้ GML2 (เฉพาะ WFS)" ฉันใช้ 8.3 ความคิดใด ๆ
โทมัส

5

นอกจากนี้คุณยังสามารถดูที่http://svn.osgeo.org/geotools/trunk/modules/library/xml/src/test/java/org/geotools/GMLTest.javaเพื่อดูว่าการทดสอบทำอย่างไร ดูเหมือนจะเป็นส่วนสำคัญ:

GML encode2 = new GML(Version.GML2);
    encode2.setBaseURL(baseURL);
    encode2.setNamespace("location", "location.xsd");
    encode2.encode(out2, collection);

    out.close();

โดยที่ collection เป็น featureCollection


3

ลอง:

//create the encoder with the gml 2.0 configuration
org.geotools.xml.Configuration configuration = new org.geotools.gml2.GMLConfiguration();
org.geotools.xml.Encoder encoder = new org.geotools.xml.Encoder( configuration );

//output stream to serialize to
OutputStream xml = ...

//encode
encoder.encode( featureCollection, new QName( "http://www.geotools.org/test", "featureType1"));

เอกสารอ้างอิง:


ลิงค์ถูกต้องตัวอย่างรหัสผิดหรือเปล่า? ;) ... เดาว่าคุณหมายถึง org.geotools.xml.Encoder ไม่ใช่ parser
underdark

ใช่เหมือนข้างต้น วันอินเทอร์เน็ตที่ไม่สม่ำเสมอ ...
Mapperz

ฉันทำผิดพลาด [คัดลอก / วาง];)
Mapperz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.