-
Notifications
You must be signed in to change notification settings - Fork 0
/
q-queries.lisp
218 lines (192 loc) · 7.07 KB
/
q-queries.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
;;; -*- Mode: Lisp; Syntax: Ansi-Common-Lisp; Package: SPATIAL-SUBSTRATE; Base: 10 -*-
(in-package spatial-substrate)
(defun q1 ()
(let ((q '(?*x wohngebiet))
(v '(?*x)))
(inspector-answer-query q v
"Zeige mir alle Wohngebiete.")))
(defun q2 ()
(let ((q '(?*x park))
(v '(?*x)))
(inspector-answer-query q v
"Zeige mir alle Parks.")))
(defun q3 ()
(let ((q '(and (?*x wohngebiet) (?*y gruenflaeche) (?*x ?*y ec)))
(v '(?*x ?*y)))
(inspector-answer-query q v "Zeige mir alle Wohngebiete,
die an einer Grünfläche liegen.")))
(defun q4 ()
(let ((q '(and (?*x park) (?*x ?*y ppi) (?*y teich)))
(v '(?*x ?*y)))
(inspector-answer-query q v "Zeige mir alle Parks,
die einen Teich enthalten.")))
(defun q5 ()
(let ((q '(and (?*x wohngebiet) (?*x ?*y ec) (?*y gruenflaeche) (?*y ?*z ppi) (?*z (:or teich see))))
(v '(?*x ?*y ?*z)))
(inspector-answer-query q v "Zeige mir alle Wohngebiete,
die an einer Grünfläche liegen,
welche einen Teich oder See enthält.")))
(defun q6 ()
(let ((q '(and (?*x wohngebiet)
(?*x ?*y ec)
(?*y gruenflaeche)
(?*y ?*z ppi)
(?*z (:or teich see))
(?*x ?*u ec)
(?*u gewerbe)))
(v '(?*x ?*y ?*z ?*u)))
(inspector-answer-query q v
"Zeige mir alle Wohngebiete,
die an einer Gruenfläche liegen,
welche einen Teich oder See enthält;
das Wohngebiet soll zudem an einem
Gewerbegebiet liegen (zum Einkaufen).")))
(defun q7 ()
(let ((q '(and (?*x (:or teich see))
(?*x ?*y ec)
(?*y (:or fluss bach))
(?*y ?*z (:or ec po))
(?*z wohngebiet)
(?*x ?*w pp)
(?*w park)))
(v '(?*x ?*y ?*z ?*w)))
(inspector-answer-query q v
"Gibt es einen Fluss oder Bach,
der ein Wohngebiet kreutzt,
und dann in einen Teich oder See fließt,
der in einem Park liegt?")))
(defun q8 ()
(let ((q '(and (?*x wohngebiet)
(?*x ?*y (:or ec po))
(?*y autobahn)))
(v '(?*x ?*y)))
(inspector-answer-query q v
"Zeige mir alle Wohngebiete,
die an einer Autobahn liegen.")))
(defun q9 ()
(let ((q '(and (?*x park)
(?*x ?*y (:or ec po))
(?*y autobahn)
(?*x ?*z ppi)
(?*z (and wasser flaeche))))
(v '(?*x ?*y)))
(inspector-answer-query q v
"Zeige mir alle Parks,
die an der Autobahn liegen,
und die eine Wasserfläche enthalten.")))
(defun q10 ()
(let ((q '(and (?*x park)
(?*x ?*y ppi)
(?*y laubbaum)))
(v '(?*x ?*y)))
(inspector-answer-query q v
"Zeige mir alle Parks mit Laubbäumen")))
(defun q11 ()
(let ((q '(and (?*x wald)))
(v '(?*x)))
(inspector-answer-query q v
"Zeige mir alle Wälder.")))
(defun q12 ()
(let ((q
`(?*x (and wohnen
(some ec
(and wiese-weide
(:or (some tppi teich-nicht-schiffbar)
(some ntppi teich-nicht-schiffbar))))
(:or (some tppi oeffentliches-gebaeude)
(some ntppi oeffentliches-gebaeude))
(all ec (:or wiese-weide
parkplatz)))))
(v '(?*x)))
(inspector-answer-query q v
"Zeige mir Wohngebiete,
die an eine Wiese/Weide angrenzen,
die einen Teich enthält,
sodass alle angrenzenden Flächen
ebenfalls Wiesen/Weiden oder
Parkplätze sind.")))
(defun q13 ()
(let ((q '(and (?*wohngebiet wohngebiet)
(?*u-bahn-station u-bahn-station)
(?u-bahn-station ?wohngebiet (:inside-epsilon 100))
(?*wohngebiet ?*teich :contains)
(?*teich (:or :teich :see))))
(v '(?*wohngebiet ?*u-bahn-station ?*teich)))
(inspector-answer-query q v
"Zeige mir Wohngebiete,
die Teiche oder Seen enthalten,
und in deren Epsilon-Umgebung von
100 Metern eine U-Bahn-Station liegt.")))
(defun q14 ()
(let ((q '(and
;; note: Q operator not implemented in MIDELORA:
;; (?*x (and wohngebiet (at-least 8 ntppi gebaeude)))
;; hence:
(?*x (and wohngebiet (at-least 8 ntppi top)))
(?x (:satisfies
(and (geometry::is-geom-polygon-p object)
(> (geometry:calculate-area object) 50000))))))
(v '(?*x)))
(inspector-answer-query q v
"Zeige mir Wohngebiete,
die mindestens 8 Gebäude enthalten,
und deren Fläche größer als 50000 ist.")))
(defun q15 ()
(let ((q '(and (?*x (and wohngebiet (at-least 8 ntppi top)))
(?x (:area (< area 50000)))))
(v '(?*x)))
(inspector-answer-query q v
"Welche Wohngebiete mit mindestens 8 Gebäuden
haben eine Fläche, die kleiner als 5000 ist?")))
(defun q16 ()
(let ((q '(and (?*x :bach)
(?*x ?*y :touches)
(?*y :teich)
(?*x ?*z :crosses)
(?*z :park)
(?*z ?*y :contains)
(?*x ?*w :touches)
(?*w :wohngebiet)))
(v '(?*x ?*y ?*z ?*w)))
(inspector-answer-query q v
"Welcher Bach fließt von einem Wohngebiet
in einen Teich, der in einem Park liegt?")))
(defun q17 ()
(let ((q '(and (?*wohngebiet wohngebiet)
(?*wohngebiet (ALL EC (not (:or industrie gewerbe))))
(?*wohngebiet ?*gebaeude :contains)
(?*gebaeude gebaeude)
(?kirche ?wohngebiet (:inside-epsilon 200))
(?*u-bahn-station u-bahn-station)
(?u-bahn-station ?wohngebiet (:inside-epsilon 100))
(?*wohngebiet ?*teich :contains)
(?*teich (:or :teich :see))
(?*kirche kirche)))
(v
'(?*wohngebiet
?*gebaeude
?*kirche
?*u-bahn-station
?*teich)))
(inspector-answer-query q v
"Zeige mir Wohngebiete,
die nicht an Industrie- oder Gewerbegebiete angrenzen,
die Gebaeude enthalten, und
die eine Kirche in der Epsilon-Umgebung von 200 Metern,
eine U-Bahn-Station im Epsilon-Umkreis von 100 Metern,
sowie einen Teich (oder See) enthalten.")))
(defun q18 ()
(let ((q '(?*x wohngebiet))
(v '(?*x)))
(inspector-answer-query q v
"Zeige mir alle Wohngebiete.")))
(defun q19 ()
(let ((q '(and (?*wohngebiet wohngebiet)
(?u-bahn-station ?wohngebiet (:inside-epsilon 100))))
(v '(?*wohngebiet ?u-bahn-station)))
(inspector-answer-query q v
"Zeige mir Wohngebiete,
in deren Epsilon-Umgebung von
100 Metern eine U-Bahn-Station liegt.")))
(defun q20 ()
)