Hallo gissers,
We krijgen een ‘non-simple’ melding bij dit soort situaties:
Ok, prima. Maar voorzover ik kan nagaan wordt de geovalidatie geregeld door Geonovum en keurt hun online GML3.2 SF2 en GML-2D Geometrie deze objecten wel goed:
https://validatie.geostandaarden.nl/etf-webapp/testprojects
Twee opties geprobeerd; multipart in 3 en in 4 delen. Beide worden geaccepteerd door de Geonovum tool, hoewel verschillende applicaties er wel afwijkend op reageren.
De ‘4 delen’ optie is dezelfde geometrie, maar dan met een extra uitsnede:
GML3.2 SF2 - multipolygoon in vier delen.png
Vertexen:
drie delen:
MDSYS.SDO_GEOMETRY(2007, 28992, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1, 11, 2003, 1, 21, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(124000, 586000, 124000, 547000, 188000, 547000, 188000, 586000, 124000, 586000, 134000, 580000, 179000, 580000, 179000, 555000, 134000, 555000, 134000, 580000, 140000, 575000, 140000, 560000, 175000, 560000, 175000, 575000, 155000, 575000, 160000, 570000, 155000, 565000, 150000, 570000, 155000, 575000, 155000, 575000, 140000, 575000))
MULTIPOLYGON (((124000.0 586000.0, 124000.0 547000.0, 188000.0 547000.0, 188000.0 586000.0, 124000.0 586000.0), (134000.0 580000.0, 179000.0 580000.0, 179000.0 555000.0, 134000.0 555000.0, 134000.0 580000.0)), ((140000.0 575000.0, 140000.0 560000.0, 175000.0 560000.0, 175000.0 575000.0, 155000.0 575000.0, 160000.0 570000.0, 155000.0 565000.0, 150000.0 570000.0, 155000.0 575000.0, 155000.0 575000.0, 140000.0 575000.0)))
vier delen:
MDSYS.SDO_GEOMETRY(2007, 28992, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1, 11, 2003, 1, 21, 1003, 1, 33, 2003, 1), MDSYS.SDO_ORDINATE_ARRAY(124000, 586000, 124000, 547000, 188000, 547000, 188000, 586000, 124000, 586000, 134000, 580000, 179000, 580000, 179000, 555000, 134000, 555000, 134000, 580000, 140000, 575000, 140000, 560000, 175000, 560000, 175000, 575000, 155000, 575000, 140000, 575000, 155000, 575000, 160000, 570000, 155000, 565000, 150000, 570000, 155000, 575000))
MULTIPOLYGON (((124000.0 586000.0, 124000.0 547000.0, 188000.0 547000.0, 188000.0 586000.0, 124000.0 586000.0), (134000.0 580000.0, 179000.0 580000.0, 179000.0 555000.0, 134000.0 555000.0, 134000.0 580000.0)), ((140000.0 575000.0, 140000.0 560000.0, 175000.0 560000.0, 175000.0 575000.0, 155000.0 575000.0, 140000.0 575000.0), (155000.0 575000.0, 160000.0 570000.0, 155000.0 565000.0, 150000.0 570000.0, 155000.0 575000.0)))
GML in drie delen:
<?xml version="1.0" encoding="utf-8"?>
<ogr:FeatureCollection gml:id="aFeatureCollection" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ogr.maptools.org/ voorbeeldgmldrie.xsd" xmlns:ogr="http://ogr.maptools.org/" xmlns:gml="http://www.opengis.net/gml/3.2">
<gml:boundedBy>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::28992">
<gml:lowerCorner>124000 547000</gml:lowerCorner>
<gml:upperCorner>188000 586000</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<ogr:featureMember>
<ogr:voorbeeldgmldrie gml:id="voorbeeldgmldrie.0">
<gml:boundedBy>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::28992">
<gml:lowerCorner>124000 547000</gml:lowerCorner>
<gml:upperCorner>188000 586000</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<ogr:geometryProperty>
<gml:MultiSurface srsName="urn:ogc:def:crs:EPSG::28992" gml:id="voorbeeldgmldrie.geom.0">
<gml:surfaceMember>
<gml:Polygon gml:id="voorbeeldgmldrie.geom.0.0">
<gml:exterior>
<gml:LinearRing>
<gml:posList>124000 586000 124000 547000 188000 547000 188000 586000 124000 586000</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing>
<gml:posList>134000 580000 179000 580000 179000 555000 134000 555000 134000 580000</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon gml:id="voorbeeldgmldrie.geom.0.1">
<gml:exterior>
<gml:LinearRing>
<gml:posList>140000 575000 140000 560000 175000 560000 175000 575000 155000 575000 160000 570000 155000 565000 150000 570000 155000 575000 155000 575000 140000 575000</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</ogr:geometryProperty>
<ogr:id>3</ogr:id>
</ogr:voorbeeldgmldrie>
</ogr:featureMember>
</ogr:FeatureCollection>
GML in vier delen:
<?xml version="1.0" encoding="utf-8"?>
<ogr:FeatureCollection gml:id="aFeatureCollection" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ogr.maptools.org/ voorbeeldgmlvier.xsd" xmlns:ogr="http://ogr.maptools.org/" xmlns:gml="http://www.opengis.net/gml/3.2">
<gml:boundedBy>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::28992">
<gml:lowerCorner>124000 547000</gml:lowerCorner>
<gml:upperCorner>188000 586000</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<ogr:featureMember>
<ogr:voorbeeldgmlvier gml:id="voorbeeldgmlvier.0">
<gml:boundedBy>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::28992">
<gml:lowerCorner>124000 547000</gml:lowerCorner>
<gml:upperCorner>188000 586000</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<ogr:geometryProperty>
<gml:MultiSurface srsName="urn:ogc:def:crs:EPSG::28992" gml:id="voorbeeldgmlvier.geom.0">
<gml:surfaceMember>
<gml:Polygon gml:id="voorbeeldgmlvier.geom.0.0">
<gml:exterior>
<gml:LinearRing>
<gml:posList>124000 586000 124000 547000 188000 547000 188000 586000 124000 586000</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing>
<gml:posList>134000 580000 179000 580000 179000 555000 134000 555000 134000 580000</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon gml:id="voorbeeldgmlvier.geom.0.1">
<gml:exterior>
<gml:LinearRing>
<gml:posList>140000 575000 140000 560000 175000 560000 175000 575000 140000 575000</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing>
<gml:posList>155000 575000 150000 570000 155000 565000 160000 570000 155000 575000</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</ogr:geometryProperty>
<ogr:id>4</ogr:id>
</ogr:voorbeeldgmlvier>
</ogr:featureMember>
</ogr:FeatureCollection>
Applicatieoverzicht:
Applicatieresultaat bij multipolygoon in drie of vier delen.png
Aangezien onze geometrie wordt samengesteld mbv aggregaties, buffers en intersect acties kunnen we moeilijk ieder vertexje handmatig gaan aanpassen. We hebben dit probleem nu omzeild door de vertexen in de multiparts te tellen en bij iedere ‘dubbeling’ (behalve start en eind) een vierkant buffertje te genereren en deze weer samen te voegen met het bronobject. Risico is echter dat dit ook weer een dubbele vertex kan opleveren waardoor je dus weer een loopje nodig hebt, net zo lang tot iedere coördinaat nog maar één keer voor komt.
De OGC documentatie snel doorgebladerd, maar kon niet zo snel iets vinden over dit soort situaties.
Hopelijk kan iemand hier uitsluitsel over geven en wellicht testen of de vier delen optie wel acceptabel is. Kan deze versie zelf helaas niet aanbieden aan de DSO; bij verservicing dmv ESRI biedt de service altijd een drie-part aan in zowel rest als wfs, ook als de brongeometrie in de database vier delen heeft.
Groeten,
Jos