1:- module(
2 gml,
3 [
4 gml_shape/2 5 ]
6).
12:- use_module(library(apply)). 13
14:- use_module(library(dcg)).
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 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([]) --> ""
GML support
*/