34
36:- use_module(library(space/space)). 37
39:- use_module(library('semweb/rdf_db.pl')). 40
42:- rdf_register_ns(geo, 'http://www.geonames.org/ontology#'). 43:- rdf_register_ns(wgs84, 'http://www.w3.org/2003/01/geo/wgs84_pos#'). 44
45:- writef("\n----\n\nLoading demo RDF file of Geonames features in the Rotterdam harbor.\n"). 47:- rdf_load('demo_geonames.rdf'). 48
50:- writef("Selecting features with coordinates to put in the spatial index.\n"). 51:- space_bulkload(uri_shape,'demo_index'). 52:- writef("done loading demo\n\n----\n\n"). 53
55nearest_features(point(Lat,Long), Name) :-
56 space_nearest(point(Lat,Long), Nearest,'demo_index'),
57 rdf(Nearest, rdf:type, geo:'Feature'), 58 rdf(Nearest, geo:name, literal(Name)).
59
61contained_features(box(point(NWLat,NWLong),point(SELat,SELong)), Name) :-
62 space_contains(box(point(NWLat,NWLong),point(SELat,SELong)), Contained, 'demo_index'),
63 rdf(Contained, rdf:type, geo:'Feature'),
64 rdf(Contained, geo:name, literal(Name)).
65
68nearest_harbors(point(Lat,Long), Name, point(HarborLat,HarborLong)) :-
69 space_nearest(point(Lat,Long), Nearest,'demo_index'),
70 rdf(Nearest, rdf:type, geo:'Feature'),
71 rdf(Nearest, geo:featureCode, geo:'H.HBR'),
72 rdf(Nearest, geo:name, literal(Name)),
73 rdf(Nearest, wgs84:lat, literal(HarborLat)),
74 rdf(Nearest, wgs84:long, literal(HarborLong)).
75
76
77
78:- writef("Welcome to the SWI-Prolog \"space\" package demo.\n\n"). 79:- writef("Try finding features in the Rotterdam harbor.\n"). 80:- writef("To find features near lat 51.96 long 4.13, try the following:\n"). 81:- writef("?- nearest_features(point(51.96,4.13), Name).\n\n"). 82:- writef("To find the nearest harbor to that point, try the following:\n"). 83:- writef("?- nearest_harbors(point(51.96,4.13), Name, point(HarborLat,HarborLong)).\n\n"). 84:- writef("To find features in the rectangular area between "). 85:- writef("lat 51.93 long 4.10 and lat 51.96 long 4.19, try the following:\n"). 86:- writef("?- contained_features(box(point(51.93,4.10),point(51.96,4.19)), Name).\n\n"). 87:- writef("Have fun experimenting with the \"space\" package!\n"). 88:- writef("If you have questions, please e-mail me.\n\n"). 89:- writef("Willem Robert van Hage <W.R.van.Hage@vu.nl>\n\n").