2014-12-23 3 views
1

У меня есть геометрия (JTS) геометрии и я хочу, чтобы закодировать эту геометрию с GML3Как писать только геометрию JTS с gml3

Я сделал эту работу Gml2 следующим образом:

 GMLWriter writer = new GMLWriter(); 
     writer.setNamespace(true); 
     writer.setSrsName(CRS.toSRS(pa.getFeature().getType().getCoordinateReferenceSystem())); 
     final String s = writer.write(pa.getGeometry()); 

и s, как указано ниже

 <gml:MultiPolygon srsName="EPSG:4326"> 
     <gml:polygonMember> 
      <gml:Polygon> 
      <gml:outerBoundaryIs> 
       <gml:LinearRing> 
       <gml:coordinates>388398.01680386113,4234936.561284632 388496.2268063746,4234925.211013514 388486.8865137336,4234818.841002756 388473.5261352561,4234681.43099238 388471.2816094029,4234659.843136447 388370.4591269435,4234691.257276198 388370.45921945036,4234691.2574215075 388386.1865097745,4234829.971280575 388398.01680386113,4234936.561284632</gml:coordinates> 
       </gml:LinearRing> 
      </gml:outerBoundaryIs> 
      <gml:innerBoundaryIs> 
       <gml:LinearRing> 
       <gml:coordinates>388480.8967599605,4234910.071050081 388470.27675781824,4234910.611079167 388467.16673689516,4234903.311085147 388477.35673742165,4234902.231057049 388480.8967599605,4234910.071050081</gml:coordinates> 
       </gml:LinearRing> 
      </gml:innerBoundaryIs> 
      </gml:Polygon> 
     </gml:polygonMember> 
     <gml:polygonMember> 
      <gml:Polygon> 
      <gml:outerBoundaryIs> 
       <gml:LinearRing> 
       <gml:coordinates>388471.2816094029,4234659.843136447 388471.2820757456,4234659.842991144 388471.28158315114,4234659.842883958 388471.2816094029,4234659.843136447</gml:coordinates> 
       </gml:LinearRing> 
      </gml:outerBoundaryIs> 
      </gml:Polygon> 
     </gml:polygonMember> 
     </gml:MultiPolygon> 

Есть ли способ сделать это в GML3?

мне нужно GML: posList тег не GML: координаты

ответ

1

Если вы используете GeoTools, то вы можете следовать XML Geometry Tutorial. Так что-то вроде:

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.GML3); 
encode.setBaseURL(baseURL); 
encode.setNamespace("location", locationURL.toExternalForm()); 
encode.encode(xsd, TYPE); 

xsd.close(); 

WKTReader2 wkt = new WKTReader2(); 
List<SimpleFeature> collection = new LinkedList<SimpleFeature>(); 
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.GML3); 
encode2.setLegacy(true); 
encode2.setBaseURL(baseURL); 
encode2.setNamespace("location", "location.xsd"); 
encode2.encode(xml, new ListFeatureCollection(TYPE, collection)); 

xml.close(); 

String gml = xml.toString(); 
+0

привета Iant, я стараюсь так, но у меня есть только геометрия и крупнозернистое это сделало все featurecollection я хочу получить только геометрический тег – esatilmis

+0

создать функцию, которая содержит только геометрию? на самом деле это не GML, если вы оставите все остальное. –

+0

спасибо iant, мы обнаружили, что в GML3 отсутствует метод GML3, только версия 2 работает. Когда вы даете version.gml3, что бы вы ни делали, это не важно, потому что encode2 (в моем коде) не имеет опции для gml3, мы открываем исходный код и проверяем его. – esatilmis

Смежные вопросы