[gdal-dev] Re: [SpatiaLite-Users] Spatialite_gml tool and Inspire
Administrative units dataset
Even Rouault
even.rouault at mines-paris.org
Sun Jan 1 13:08:31 EST 2012
Le dimanche 01 janvier 2012 15:27:34, Jukka Rahkonen a écrit :
> Hi,
>
> I have been playing with a datasets that follows the Inspire
> definitions for the Administrative Units data set. Data are in GML
> 3.2 format and the dataset contain administrative units both as
> polygons and linestrings. In addition, also the reference points for
> the administrational units are present. So there are three layers all
> together.
>
> FME can find all the layers without problems. GDAL v 1.9.0 is also
> doing rather good work and ogr2ogr finds the polygon layer and
> linestring layer and can convert data for example into Spatialite
> format.
You can also fetch the reference points, but it is a bit more involved since
OGR has not native support for multiple geometries per layer. In the case the
GML parser finds several GML geometry elements for a single feature, it only
reports the last one (arbitrary choice, but based on experience it is often
the most interesting one...)
There are 2 different ways of doing this :
1) Remove inspire_au.gfs that has been generated previously and run "ogrinfo
inspire_au_bak.xml --config GML_FETCH_ALL_GEOMETRIES YES". This option isn't
really documented as it is a bit experimental, but seems to work with your
file. The resulting AdministrativeUnit layer will have geometries of type
GEOMETRYCOLLECTION. The first element of the geometry collection will be a
MULTIPOINT with the reference points, and the second element the MULTIPOLYGON
with the area of the unit. A bit of further processing would then be needed to
split the 2 components. For example :
# fetch the points and polygons into a single geometrycollection, and split it
immediately in 2 features, one with the points, the other with the polygons
$ ogr2ogr AdministrativeUnit.sqlite inspire_au.xml -explodecollections -f
SQLite -dsco SPATIALITE=YES --config GML_FETCH_ALL_GEOMETRIES YES
AdministrativeUnit
# extract the points
$ ogr2ogr AdministrativeUnit_points.sqlite AdministrativeUnit.sqlite -f
SQLite -dsco SPATIALITE=YES -sql "select * from administrativeunit where
OGR_GEOMETRY = 'MULTIPOINT' or OGR_GEOMETRY = 'POINT'" -dialect OGRSQL -nln
AdministrativeUnit_points
# extract the polygons
$ ogr2ogr AdministrativeUnit_polygons.sqlite AdministrativeUnit.sqlite -f
SQLite -dsco SPATIALITE=YES -sql "select * from administrativeunit where
OGR_GEOMETRY = 'MULTIPOLYGON' or OGR_GEOMETRY = 'POLYGON'" -dialect OGRSQL -
nln AdministrativeUnit_polygons
2) Or edit the inspire_au.gfs that is generated by a normal run of ogrinfo to
add the <GeometryType> and <GeometryElementPath> elements in the definition of
the AdministrativeUnit class, so it looks like :
<GMLFeatureClassList>
<GMLFeatureClass>
<Name>AdministrativeUnit</Name>
<ElementPath>AdministrativeUnit</ElementPath>
<GeometryType>4</GeometryType> <!-- multipoint -->
<GeometryElementPath>location</GeometryElementPath> <!-- 'location'
contains the reference points -->
<SRSName>EPSG:3067</SRSName>
[...]
The next run of ogrinfo will report the reference points in the
AdministrativeUnit layer. It is however impossible currently to get both the
points and the polygon in a single run.
More information about the gdal-dev
mailing list