1:- module(
    2  gml,
    3  [
    4    gml_shape/2 % +Dom, -Shape
    5  ]
    6).

GML support

*/

   12:- use_module(library(apply)).   13
   14:- use_module(library(dcg)).
 gml_shape(+Dom:list(compound), -Shape:compound) is det
To be done
- set Z
- set LRS
- set CRS
   26gml_shape([Element], shape(_Z,_LRS,_Crs,Shape)) :-
   27  gml_shape_(Element, Shape).
   28
   29gml_shape_(element('gml:coordinates',_,[Coords]), Line) :- !,
   30  atom_phrase(gml_coords(Line), Coords).
   31gml_shape_(element('gml:exterior',_,[Dom]), Shape) :- !,
   32  gml_shape_(Dom, Shape).
   33gml_shape_(element('gml:innerBoundaryIs',_,[Dom]), Line) :- !,
   34  gml_shape_(Dom, Line).
   35gml_shape_(element('gml:interior',_,[Dom]), Shape) :- !,
   36  gml_shape_(Dom, Shape).
   37gml_shape_(element('gml:LinearRing',_,[Dom]), 'LineString'(Line)) :- !,
   38  gml_shape_(Dom, Line).
   39gml_shape_(element('gml:MultiPolygon',_,Dom), 'MultiPolygon'(Polygons)) :- !,
   40  maplist(gml_shape_, Dom, Polygons).
   41gml_shape_(element('gml:MultiSurface',_,Dom), 'MultiSurface'(Surfaces)) :- !,
   42  maplist(gml_shape_, Dom, Surfaces).
   43gml_shape_(element('gml:outerBoundaryIs',_, [Dom]), Line) :- !,
   44  gml_shape_(Dom, Line).
   45gml_shape_(element('gml:Polygon',_,Dom), 'Polygon'(Lines)) :- !,
   46  % Outer boundary and -- possibly -- inner boundary.
   47  maplist(gml_shape_, Dom, Lines).
   48gml_shape_(element('gml:polygonMember',_,[Dom]), Polygon) :- !,
   49  gml_shape_(Dom, Polygon).
   50gml_shape_(element('gml:posList',_,[Coords]), Line) :- !,
   51  atom_phrase(gml_poslist(Line), Coords).
   52gml_shape_(element('gml:surfaceMember',_,[Dom]), Surface) :-
   53  gml_shape_(Dom, Surface).
   54
   55gml_coords(['Point'([X,Y])|T]) -->
   56  number(X), !,
   57  blanks, ",", blanks,
   58  number(Y),
   59  blanks,
   60  gml_coords(T).
   61gml_coords([]) --> "".
   62
   63gml_poslist(['Point'([X,Y])|T]) -->
   64  number(X), !,
   65  blank, blanks,
   66  number(Y),
   67  blanks,
   68  gml_poslist(T).
   69gml_poslist([]) --> ""