xref: /sqlite-3.40.0/ext/rtree/visual01.txt (revision 60afcb80)
1#!sqlite3
2#
3# This is a visual test case for the geopoly virtual table.
4#
5# Run this script in the sqlite3 CLI, and redirect output into an
6# HTML file.  This display the HTML in a webbrowser.
7#
8
9/* Test data.
10** Lots of shapes to be displayed over a 1000x800 canvas.
11*/
12CREATE TEMP TABLE basis(name TEXT, jshape TEXT);
13INSERT INTO basis(name,jshape) VALUES
14  ('box-20','[[0,0],[20,0],[20,20],[0,20],[0,0]]'),
15  ('house-70','[[0,0],[50,0],[50,50],[25,70],[0,50],[0,0]]'),
16  ('line-40','[[0,0],[40,0],[40,5],[0,5],[0,0]]'),
17  ('line-80','[[0,0],[80,0],[80,7],[0,7],[0,0]]'),
18  ('arrow-50','[[0,0],[25,25],[0,50],[15,25],[0,0]]'),
19  ('triangle-30','[[0,0],[30,0],[15,30],[0,0]]'),
20  ('angle-30','[[0,0],[30,0],[30,30],[26,30],[26,4],[0,4],[0,0]]'),
21  ('star-10','[[1,0],[5,2],[9,0],[7,4],[10,8],[7,7],[5,10],[3,7],[0,8],[3,4],[1,0]]');
22CREATE TEMP TABLE xform(A,B,C,D,clr);
23INSERT INTO xform(A,B,clr) VALUES
24  (1,0,'black'),
25  (0.707,0.707,'blue'),
26  (0.5,0.866,'red'),
27  (-0.866,0.5,'green');
28CREATE TEMP TABLE xyoff(id1,id2,xoff,yoff,PRIMARY KEY(id1,id2,xoff,yoff))
29  WITHOUT ROWID;
30INSERT INTO xyoff VALUES(1,1,811,659);
31INSERT INTO xyoff VALUES(1,1,235,550);
32INSERT INTO xyoff VALUES(1,1,481,620);
33INSERT INTO xyoff VALUES(1,1,106,494);
34INSERT INTO xyoff VALUES(1,1,487,106);
35INSERT INTO xyoff VALUES(1,1,817,595);
36INSERT INTO xyoff VALUES(1,1,240,504);
37INSERT INTO xyoff VALUES(1,1,806,457);
38INSERT INTO xyoff VALUES(1,1,608,107);
39INSERT INTO xyoff VALUES(1,1,768,662);
40INSERT INTO xyoff VALUES(1,2,808,528);
41INSERT INTO xyoff VALUES(1,2,768,528);
42INSERT INTO xyoff VALUES(1,2,771,171);
43INSERT INTO xyoff VALUES(1,2,275,671);
44INSERT INTO xyoff VALUES(1,2,326,336);
45INSERT INTO xyoff VALUES(1,2,690,688);
46INSERT INTO xyoff VALUES(1,2,597,239);
47INSERT INTO xyoff VALUES(1,2,317,528);
48INSERT INTO xyoff VALUES(1,2,366,223);
49INSERT INTO xyoff VALUES(1,2,621,154);
50INSERT INTO xyoff VALUES(1,3,829,469);
51INSERT INTO xyoff VALUES(1,3,794,322);
52INSERT INTO xyoff VALUES(1,3,358,387);
53INSERT INTO xyoff VALUES(1,3,184,444);
54INSERT INTO xyoff VALUES(1,3,729,500);
55INSERT INTO xyoff VALUES(1,3,333,523);
56INSERT INTO xyoff VALUES(1,3,117,595);
57INSERT INTO xyoff VALUES(1,3,496,201);
58INSERT INTO xyoff VALUES(1,3,818,601);
59INSERT INTO xyoff VALUES(1,3,541,343);
60INSERT INTO xyoff VALUES(1,4,603,248);
61INSERT INTO xyoff VALUES(1,4,761,649);
62INSERT INTO xyoff VALUES(1,4,611,181);
63INSERT INTO xyoff VALUES(1,4,607,233);
64INSERT INTO xyoff VALUES(1,4,860,206);
65INSERT INTO xyoff VALUES(1,4,310,231);
66INSERT INTO xyoff VALUES(1,4,727,539);
67INSERT INTO xyoff VALUES(1,4,660,661);
68INSERT INTO xyoff VALUES(1,4,403,133);
69INSERT INTO xyoff VALUES(1,4,619,331);
70INSERT INTO xyoff VALUES(2,1,712,578);
71INSERT INTO xyoff VALUES(2,1,567,313);
72INSERT INTO xyoff VALUES(2,1,231,423);
73INSERT INTO xyoff VALUES(2,1,490,175);
74INSERT INTO xyoff VALUES(2,1,898,353);
75INSERT INTO xyoff VALUES(2,1,589,483);
76INSERT INTO xyoff VALUES(2,1,188,462);
77INSERT INTO xyoff VALUES(2,1,720,106);
78INSERT INTO xyoff VALUES(2,1,793,380);
79INSERT INTO xyoff VALUES(2,1,154,396);
80INSERT INTO xyoff VALUES(2,2,324,218);
81INSERT INTO xyoff VALUES(2,2,120,327);
82INSERT INTO xyoff VALUES(2,2,655,133);
83INSERT INTO xyoff VALUES(2,2,516,603);
84INSERT INTO xyoff VALUES(2,2,529,572);
85INSERT INTO xyoff VALUES(2,2,481,212);
86INSERT INTO xyoff VALUES(2,2,802,107);
87INSERT INTO xyoff VALUES(2,2,234,509);
88INSERT INTO xyoff VALUES(2,2,501,269);
89INSERT INTO xyoff VALUES(2,2,349,553);
90INSERT INTO xyoff VALUES(2,3,495,685);
91INSERT INTO xyoff VALUES(2,3,897,372);
92INSERT INTO xyoff VALUES(2,3,350,681);
93INSERT INTO xyoff VALUES(2,3,832,257);
94INSERT INTO xyoff VALUES(2,3,778,149);
95INSERT INTO xyoff VALUES(2,3,683,426);
96INSERT INTO xyoff VALUES(2,3,693,217);
97INSERT INTO xyoff VALUES(2,3,746,317);
98INSERT INTO xyoff VALUES(2,3,805,369);
99INSERT INTO xyoff VALUES(2,3,336,585);
100INSERT INTO xyoff VALUES(2,4,890,255);
101INSERT INTO xyoff VALUES(2,4,556,565);
102INSERT INTO xyoff VALUES(2,4,865,555);
103INSERT INTO xyoff VALUES(2,4,230,293);
104INSERT INTO xyoff VALUES(2,4,247,251);
105INSERT INTO xyoff VALUES(2,4,730,563);
106INSERT INTO xyoff VALUES(2,4,318,282);
107INSERT INTO xyoff VALUES(2,4,220,431);
108INSERT INTO xyoff VALUES(2,4,828,336);
109INSERT INTO xyoff VALUES(2,4,278,525);
110INSERT INTO xyoff VALUES(3,1,324,656);
111INSERT INTO xyoff VALUES(3,1,625,362);
112INSERT INTO xyoff VALUES(3,1,155,570);
113INSERT INTO xyoff VALUES(3,1,267,433);
114INSERT INTO xyoff VALUES(3,1,599,121);
115INSERT INTO xyoff VALUES(3,1,873,498);
116INSERT INTO xyoff VALUES(3,1,789,520);
117INSERT INTO xyoff VALUES(3,1,656,378);
118INSERT INTO xyoff VALUES(3,1,831,601);
119INSERT INTO xyoff VALUES(3,1,256,471);
120INSERT INTO xyoff VALUES(3,2,332,258);
121INSERT INTO xyoff VALUES(3,2,305,463);
122INSERT INTO xyoff VALUES(3,2,796,341);
123INSERT INTO xyoff VALUES(3,2,830,229);
124INSERT INTO xyoff VALUES(3,2,413,271);
125INSERT INTO xyoff VALUES(3,2,269,140);
126INSERT INTO xyoff VALUES(3,2,628,441);
127INSERT INTO xyoff VALUES(3,2,747,643);
128INSERT INTO xyoff VALUES(3,2,584,435);
129INSERT INTO xyoff VALUES(3,2,784,314);
130INSERT INTO xyoff VALUES(3,3,722,233);
131INSERT INTO xyoff VALUES(3,3,815,421);
132INSERT INTO xyoff VALUES(3,3,401,267);
133INSERT INTO xyoff VALUES(3,3,451,650);
134INSERT INTO xyoff VALUES(3,3,329,485);
135INSERT INTO xyoff VALUES(3,3,878,370);
136INSERT INTO xyoff VALUES(3,3,162,616);
137INSERT INTO xyoff VALUES(3,3,844,183);
138INSERT INTO xyoff VALUES(3,3,161,216);
139INSERT INTO xyoff VALUES(3,3,176,676);
140INSERT INTO xyoff VALUES(3,4,780,128);
141INSERT INTO xyoff VALUES(3,4,566,121);
142INSERT INTO xyoff VALUES(3,4,646,120);
143INSERT INTO xyoff VALUES(3,4,223,557);
144INSERT INTO xyoff VALUES(3,4,251,117);
145INSERT INTO xyoff VALUES(3,4,139,209);
146INSERT INTO xyoff VALUES(3,4,813,597);
147INSERT INTO xyoff VALUES(3,4,454,538);
148INSERT INTO xyoff VALUES(3,4,616,198);
149INSERT INTO xyoff VALUES(3,4,210,159);
150INSERT INTO xyoff VALUES(4,1,208,415);
151INSERT INTO xyoff VALUES(4,1,326,665);
152INSERT INTO xyoff VALUES(4,1,612,133);
153INSERT INTO xyoff VALUES(4,1,537,513);
154INSERT INTO xyoff VALUES(4,1,638,438);
155INSERT INTO xyoff VALUES(4,1,808,269);
156INSERT INTO xyoff VALUES(4,1,552,121);
157INSERT INTO xyoff VALUES(4,1,100,189);
158INSERT INTO xyoff VALUES(4,1,643,664);
159INSERT INTO xyoff VALUES(4,1,726,378);
160INSERT INTO xyoff VALUES(4,2,478,409);
161INSERT INTO xyoff VALUES(4,2,497,507);
162INSERT INTO xyoff VALUES(4,2,233,148);
163INSERT INTO xyoff VALUES(4,2,587,237);
164INSERT INTO xyoff VALUES(4,2,604,166);
165INSERT INTO xyoff VALUES(4,2,165,455);
166INSERT INTO xyoff VALUES(4,2,320,258);
167INSERT INTO xyoff VALUES(4,2,353,496);
168INSERT INTO xyoff VALUES(4,2,347,495);
169INSERT INTO xyoff VALUES(4,2,166,622);
170INSERT INTO xyoff VALUES(4,3,461,332);
171INSERT INTO xyoff VALUES(4,3,685,278);
172INSERT INTO xyoff VALUES(4,3,427,594);
173INSERT INTO xyoff VALUES(4,3,467,346);
174INSERT INTO xyoff VALUES(4,3,125,548);
175INSERT INTO xyoff VALUES(4,3,597,680);
176INSERT INTO xyoff VALUES(4,3,820,445);
177INSERT INTO xyoff VALUES(4,3,144,330);
178INSERT INTO xyoff VALUES(4,3,557,434);
179INSERT INTO xyoff VALUES(4,3,254,315);
180INSERT INTO xyoff VALUES(4,4,157,339);
181INSERT INTO xyoff VALUES(4,4,249,220);
182INSERT INTO xyoff VALUES(4,4,391,323);
183INSERT INTO xyoff VALUES(4,4,589,429);
184INSERT INTO xyoff VALUES(4,4,859,592);
185INSERT INTO xyoff VALUES(4,4,337,680);
186INSERT INTO xyoff VALUES(4,4,410,288);
187INSERT INTO xyoff VALUES(4,4,636,596);
188INSERT INTO xyoff VALUES(4,4,734,433);
189INSERT INTO xyoff VALUES(4,4,559,549);
190INSERT INTO xyoff VALUES(5,1,549,607);
191INSERT INTO xyoff VALUES(5,1,584,498);
192INSERT INTO xyoff VALUES(5,1,699,116);
193INSERT INTO xyoff VALUES(5,1,525,524);
194INSERT INTO xyoff VALUES(5,1,304,667);
195INSERT INTO xyoff VALUES(5,1,302,232);
196INSERT INTO xyoff VALUES(5,1,403,149);
197INSERT INTO xyoff VALUES(5,1,824,403);
198INSERT INTO xyoff VALUES(5,1,697,203);
199INSERT INTO xyoff VALUES(5,1,293,689);
200INSERT INTO xyoff VALUES(5,2,199,275);
201INSERT INTO xyoff VALUES(5,2,395,393);
202INSERT INTO xyoff VALUES(5,2,657,642);
203INSERT INTO xyoff VALUES(5,2,200,655);
204INSERT INTO xyoff VALUES(5,2,882,234);
205INSERT INTO xyoff VALUES(5,2,483,565);
206INSERT INTO xyoff VALUES(5,2,755,640);
207INSERT INTO xyoff VALUES(5,2,810,305);
208INSERT INTO xyoff VALUES(5,2,731,655);
209INSERT INTO xyoff VALUES(5,2,466,690);
210INSERT INTO xyoff VALUES(5,3,563,584);
211INSERT INTO xyoff VALUES(5,3,491,117);
212INSERT INTO xyoff VALUES(5,3,779,292);
213INSERT INTO xyoff VALUES(5,3,375,637);
214INSERT INTO xyoff VALUES(5,3,253,553);
215INSERT INTO xyoff VALUES(5,3,797,514);
216INSERT INTO xyoff VALUES(5,3,229,480);
217INSERT INTO xyoff VALUES(5,3,257,194);
218INSERT INTO xyoff VALUES(5,3,449,555);
219INSERT INTO xyoff VALUES(5,3,849,630);
220INSERT INTO xyoff VALUES(5,4,329,286);
221INSERT INTO xyoff VALUES(5,4,640,197);
222INSERT INTO xyoff VALUES(5,4,104,150);
223INSERT INTO xyoff VALUES(5,4,438,272);
224INSERT INTO xyoff VALUES(5,4,773,226);
225INSERT INTO xyoff VALUES(5,4,441,650);
226INSERT INTO xyoff VALUES(5,4,242,340);
227INSERT INTO xyoff VALUES(5,4,301,435);
228INSERT INTO xyoff VALUES(5,4,171,397);
229INSERT INTO xyoff VALUES(5,4,541,619);
230INSERT INTO xyoff VALUES(6,1,651,301);
231INSERT INTO xyoff VALUES(6,1,637,137);
232INSERT INTO xyoff VALUES(6,1,765,643);
233INSERT INTO xyoff VALUES(6,1,173,296);
234INSERT INTO xyoff VALUES(6,1,263,192);
235INSERT INTO xyoff VALUES(6,1,791,302);
236INSERT INTO xyoff VALUES(6,1,860,601);
237INSERT INTO xyoff VALUES(6,1,780,445);
238INSERT INTO xyoff VALUES(6,1,462,214);
239INSERT INTO xyoff VALUES(6,1,802,207);
240INSERT INTO xyoff VALUES(6,2,811,685);
241INSERT INTO xyoff VALUES(6,2,533,531);
242INSERT INTO xyoff VALUES(6,2,390,614);
243INSERT INTO xyoff VALUES(6,2,260,580);
244INSERT INTO xyoff VALUES(6,2,116,377);
245INSERT INTO xyoff VALUES(6,2,860,458);
246INSERT INTO xyoff VALUES(6,2,438,590);
247INSERT INTO xyoff VALUES(6,2,604,562);
248INSERT INTO xyoff VALUES(6,2,241,242);
249INSERT INTO xyoff VALUES(6,2,667,298);
250INSERT INTO xyoff VALUES(6,3,787,698);
251INSERT INTO xyoff VALUES(6,3,868,521);
252INSERT INTO xyoff VALUES(6,3,412,587);
253INSERT INTO xyoff VALUES(6,3,640,131);
254INSERT INTO xyoff VALUES(6,3,748,410);
255INSERT INTO xyoff VALUES(6,3,257,244);
256INSERT INTO xyoff VALUES(6,3,411,195);
257INSERT INTO xyoff VALUES(6,3,464,356);
258INSERT INTO xyoff VALUES(6,3,157,339);
259INSERT INTO xyoff VALUES(6,3,434,505);
260INSERT INTO xyoff VALUES(6,4,480,671);
261INSERT INTO xyoff VALUES(6,4,519,228);
262INSERT INTO xyoff VALUES(6,4,404,513);
263INSERT INTO xyoff VALUES(6,4,120,538);
264INSERT INTO xyoff VALUES(6,4,403,663);
265INSERT INTO xyoff VALUES(6,4,477,677);
266INSERT INTO xyoff VALUES(6,4,690,154);
267INSERT INTO xyoff VALUES(6,4,606,498);
268INSERT INTO xyoff VALUES(6,4,430,665);
269INSERT INTO xyoff VALUES(6,4,499,273);
270INSERT INTO xyoff VALUES(7,1,118,526);
271INSERT INTO xyoff VALUES(7,1,817,522);
272INSERT INTO xyoff VALUES(7,1,388,638);
273INSERT INTO xyoff VALUES(7,1,181,265);
274INSERT INTO xyoff VALUES(7,1,442,332);
275INSERT INTO xyoff VALUES(7,1,475,282);
276INSERT INTO xyoff VALUES(7,1,722,633);
277INSERT INTO xyoff VALUES(7,1,104,394);
278INSERT INTO xyoff VALUES(7,1,631,262);
279INSERT INTO xyoff VALUES(7,1,372,392);
280INSERT INTO xyoff VALUES(7,2,600,413);
281INSERT INTO xyoff VALUES(7,2,386,223);
282INSERT INTO xyoff VALUES(7,2,839,174);
283INSERT INTO xyoff VALUES(7,2,293,410);
284INSERT INTO xyoff VALUES(7,2,281,391);
285INSERT INTO xyoff VALUES(7,2,859,387);
286INSERT INTO xyoff VALUES(7,2,478,347);
287INSERT INTO xyoff VALUES(7,2,646,690);
288INSERT INTO xyoff VALUES(7,2,713,234);
289INSERT INTO xyoff VALUES(7,2,199,588);
290INSERT INTO xyoff VALUES(7,3,389,256);
291INSERT INTO xyoff VALUES(7,3,349,542);
292INSERT INTO xyoff VALUES(7,3,363,345);
293INSERT INTO xyoff VALUES(7,3,751,302);
294INSERT INTO xyoff VALUES(7,3,423,386);
295INSERT INTO xyoff VALUES(7,3,267,444);
296INSERT INTO xyoff VALUES(7,3,243,182);
297INSERT INTO xyoff VALUES(7,3,453,658);
298INSERT INTO xyoff VALUES(7,3,126,345);
299INSERT INTO xyoff VALUES(7,3,120,472);
300INSERT INTO xyoff VALUES(7,4,359,654);
301INSERT INTO xyoff VALUES(7,4,339,516);
302INSERT INTO xyoff VALUES(7,4,710,452);
303INSERT INTO xyoff VALUES(7,4,810,560);
304INSERT INTO xyoff VALUES(7,4,644,692);
305INSERT INTO xyoff VALUES(7,4,826,327);
306INSERT INTO xyoff VALUES(7,4,465,462);
307INSERT INTO xyoff VALUES(7,4,310,456);
308INSERT INTO xyoff VALUES(7,4,577,613);
309INSERT INTO xyoff VALUES(7,4,502,555);
310INSERT INTO xyoff VALUES(8,1,601,620);
311INSERT INTO xyoff VALUES(8,1,372,683);
312INSERT INTO xyoff VALUES(8,1,758,399);
313INSERT INTO xyoff VALUES(8,1,485,552);
314INSERT INTO xyoff VALUES(8,1,159,563);
315INSERT INTO xyoff VALUES(8,1,536,303);
316INSERT INTO xyoff VALUES(8,1,122,263);
317INSERT INTO xyoff VALUES(8,1,836,435);
318INSERT INTO xyoff VALUES(8,1,544,146);
319INSERT INTO xyoff VALUES(8,1,270,277);
320INSERT INTO xyoff VALUES(8,2,849,281);
321INSERT INTO xyoff VALUES(8,2,563,242);
322INSERT INTO xyoff VALUES(8,2,704,463);
323INSERT INTO xyoff VALUES(8,2,102,165);
324INSERT INTO xyoff VALUES(8,2,797,524);
325INSERT INTO xyoff VALUES(8,2,612,426);
326INSERT INTO xyoff VALUES(8,2,345,372);
327INSERT INTO xyoff VALUES(8,2,820,376);
328INSERT INTO xyoff VALUES(8,2,789,156);
329INSERT INTO xyoff VALUES(8,2,321,466);
330INSERT INTO xyoff VALUES(8,3,150,332);
331INSERT INTO xyoff VALUES(8,3,136,152);
332INSERT INTO xyoff VALUES(8,3,468,528);
333INSERT INTO xyoff VALUES(8,3,409,192);
334INSERT INTO xyoff VALUES(8,3,820,216);
335INSERT INTO xyoff VALUES(8,3,847,249);
336INSERT INTO xyoff VALUES(8,3,801,267);
337INSERT INTO xyoff VALUES(8,3,181,670);
338INSERT INTO xyoff VALUES(8,3,398,563);
339INSERT INTO xyoff VALUES(8,3,439,576);
340INSERT INTO xyoff VALUES(8,4,123,309);
341INSERT INTO xyoff VALUES(8,4,190,496);
342INSERT INTO xyoff VALUES(8,4,571,531);
343INSERT INTO xyoff VALUES(8,4,290,255);
344INSERT INTO xyoff VALUES(8,4,244,412);
345INSERT INTO xyoff VALUES(8,4,264,596);
346INSERT INTO xyoff VALUES(8,4,253,420);
347INSERT INTO xyoff VALUES(8,4,847,536);
348INSERT INTO xyoff VALUES(8,4,120,288);
349INSERT INTO xyoff VALUES(8,4,331,639);
350
351/* Create the geopoly object from test data above */
352CREATE VIRTUAL TABLE geo1 USING geopoly(type,clr);
353INSERT INTO geo1(_shape,type,clr)
354  SELECT geopoly_xform(jshape,A,B,-B,A,xoff,yoff), basis.name, xform.clr
355    FROM basis, xform, xyoff
356   WHERE xyoff.id1=basis.rowid AND xyoff.id2=xform.rowid;
357
358
359/* Query polygon */
360CREATE TEMP TABLE querypoly(poly JSON, clr TEXT);
361INSERT INTO querypoly(clr, poly) VALUES
362  ('orange', '[[300,300],[400,350],[500,250],[480,500],[400,480],[300,550],[280,450],[320,400],[280,350],[300,300]]');
363
364/* Generate the HTML */
365.print '<html>'
366.print '<h1>Everything</h1>'
367.print '<svg width="1000" height="800" style="border:1px solid black">'
368SELECT geopoly_svg(_shape,
369         printf('style="fill:none;stroke:%s;stroke-width:1"',clr)
370       )
371  FROM geo1;
372SELECT geopoly_svg(poly,
373         printf('style="fill:%s;fill-opacity:0.5;"',clr)
374       )
375  FROM querypoly;
376.print '</svg>'
377
378.print '<h1>Overlap Query</h1>'
379.print '<pre>'
380.print 'SELECT *'
381.print '  FROM geo1, querypoly'
382.print ' WHERE geopoly_overlap(_shape, poly);'
383.print
384EXPLAIN QUERY PLAN
385SELECT geopoly_svg(_shape,
386         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
387       )
388  FROM geo1, querypoly
389 WHERE geopoly_overlap(_shape, poly);
390.print '</pre>'
391.print '<svg width="1000" height="800" style="border:1px solid black">'
392SELECT geopoly_svg(_shape,
393         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
394       )
395  FROM geo1, querypoly
396 WHERE geopoly_overlap(_shape, poly);
397SELECT geopoly_svg(poly,
398         printf('style="fill:%s;fill-opacity:0.5;"',clr)
399       )
400  FROM querypoly;
401.print '</svg>'
402
403.print '<h1>Overlap Query And Result Bounding Box</h1>'
404.print '<svg width="1000" height="800" style="border:1px solid black">'
405SELECT geopoly_svg(_shape,
406         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
407       )
408  FROM geo1, querypoly
409 WHERE geopoly_overlap(_shape, poly);
410SELECT geopoly_svg(geopoly_bbox(poly),
411         'style="fill:none;stroke:black;stroke-width:3"'
412       )
413  FROM querypoly;
414SELECT geopoly_svg(poly,
415         printf('style="fill:%s;fill-opacity:0.5;"',clr)
416       )
417  FROM querypoly;
418SELECT geopoly_svg(geopoly_group_bbox(_shape),
419         'style="fill:none;stroke:red;stroke-width:3"'
420       )
421  FROM geo1, querypoly
422 WHERE geopoly_overlap(_shape, poly);
423.print '</svg>'
424
425.print '<h1>Bounding-Box Overlap Query</h1>'
426.print '<svg width="1000" height="800" style="border:1px solid black">'
427SELECT geopoly_svg(_shape,
428         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
429       ),
430       geopoly_svg(geopoly_bbox(_shape),
431         'style="fill:none;stroke:black;stroke-width:1"'
432       )
433  FROM geo1, querypoly
434 WHERE geopoly_overlap(geopoly_bbox(_shape), geopoly_bbox(poly));
435SELECT geopoly_svg(poly,
436         printf('style="fill:%s;fill-opacity:0.5;"',clr)
437       )
438  FROM querypoly;
439SELECT geopoly_svg(geopoly_bbox(poly),
440         'style="fill:none;stroke:black;stroke-width:3"'
441       )
442  FROM querypoly;
443.print '</svg>'
444
445.print '<h1>Within Query</h1>'
446.print '<pre>'
447.print 'SELECT *'
448.print '  FROM geo1, querypoly'
449.print ' WHERE geopoly_within(_shape, poly);'
450.print
451EXPLAIN QUERY PLAN
452SELECT geopoly_svg(_shape,
453         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
454       )
455  FROM geo1, querypoly
456 WHERE geopoly_within(_shape, poly);
457.print '</pre>'
458.print '<svg width="1000" height="800" style="border:1px solid black">'
459SELECT geopoly_svg(_shape,
460         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
461       )
462  FROM geo1, querypoly
463 WHERE geopoly_within(_shape, poly);
464SELECT geopoly_svg(poly,
465         printf('style="fill:%s;fill-opacity:0.5;"',clr)
466       )
467  FROM querypoly;
468.print '</svg>'
469
470.print '<h1>Bounding-Box WITHIN Query</h1>'
471.print '<svg width="1000" height="800" style="border:1px solid black">'
472SELECT geopoly_svg(_shape,
473         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
474       ),
475       geopoly_svg(geopoly_bbox(_shape),
476         'style="fill:none;stroke:black;stroke-width:1"'
477       )
478  FROM geo1, querypoly
479 WHERE geopoly_within(geopoly_bbox(_shape), geopoly_bbox(poly));
480SELECT geopoly_svg(poly,
481         printf('style="fill:%s;fill-opacity:0.5;"',clr)
482       )
483  FROM querypoly;
484SELECT geopoly_svg(geopoly_bbox(poly),
485         'style="fill:none;stroke:black;stroke-width:3"'
486       )
487  FROM querypoly;
488.print '</svg>'
489
490.print '<h1>Not Overlap Query</h1>'
491.print '<pre>'
492.print 'SELECT *'
493.print '  FROM geo1, querypoly'
494.print ' WHERE NOT geopoly_overlap(_shape, poly);'
495.print
496EXPLAIN QUERY PLAN
497SELECT geopoly_svg(_shape,
498         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
499       )
500  FROM geo1, querypoly
501 WHERE NOT geopoly_overlap(_shape, poly);
502.print '</pre>'
503.print '<svg width="1000" height="800" style="border:1px solid black">'
504SELECT geopoly_svg(_shape,
505         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
506       )
507  FROM geo1, querypoly
508 WHERE NOT geopoly_overlap(_shape, poly);
509SELECT geopoly_svg(poly,
510         printf('style="fill:%s;fill-opacity:0.5;"',clr)
511       )
512  FROM querypoly;
513.print '</svg>'
514
515.print '<h1>Not Within Query</h1>'
516.print '<pre>'
517.print 'SELECT *'
518.print '  FROM geo1, querypoly'
519.print ' WHERE NOT geopoly_within(_shape, poly);'
520.print
521EXPLAIN QUERY PLAN
522SELECT geopoly_svg(_shape,
523         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
524       )
525  FROM geo1, querypoly
526 WHERE NOT geopoly_within(_shape, poly);
527.print '</pre>'
528.print '<svg width="1000" height="800" style="border:1px solid black">'
529SELECT geopoly_svg(_shape,
530         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
531       )
532  FROM geo1, querypoly
533 WHERE NOT geopoly_within(_shape, poly);
534SELECT geopoly_svg(poly,
535         printf('style="fill:%s;fill-opacity:0.5;"',clr)
536       )
537  FROM querypoly;
538.print '</svg>'
539
540.print '<h1>Color-Change For Overlapping Elements</h1>'
541BEGIN;
542UPDATE geo1
543   SET clr=CASE WHEN rowid IN (SELECT geo1.rowid FROM geo1, querypoly
544                                WHERE geopoly_overlap(_shape,poly))
545           THEN 'red' ELSE 'blue' END;
546.print '<svg width="1000" height="800" style="border:1px solid black">'
547SELECT geopoly_svg(_shape,
548         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
549       )
550  FROM geo1;
551SELECT geopoly_svg(poly,'style="fill:none;stroke:black;stroke-width:2"')
552  FROM querypoly;
553ROLLBACK;
554.print '</svg>'
555
556.print '<h1>Color-Change And Move Overlapping Elements</h1>'
557BEGIN;
558UPDATE geo1
559   SET clr=CASE WHEN rowid IN (SELECT geo1.rowid FROM geo1, querypoly
560                                WHERE geopoly_overlap(_shape,poly))
561           THEN 'red' ELSE '#76ccff' END;
562UPDATE geo1
563   SET _shape=geopoly_xform(_shape,1,0,0,1,300,0)
564 WHERE geopoly_overlap(_shape,(SELECT poly FROM querypoly));
565.print '<svg width="1000" height="800" style="border:1px solid black">'
566SELECT geopoly_svg(_shape,
567         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
568       )
569  FROM geo1;
570SELECT geopoly_svg(poly,'style="fill:none;stroke:black;stroke-width:2"')
571  FROM querypoly;
572--ROLLBACK;
573.print '</svg>'
574
575
576.print '<h1>Overlap With Translated Query Polygon</h1>'
577UPDATE querypoly SET poly=geopoly_xform(poly,1,0,0,1,300,0);
578.print '<svg width="1000" height="800" style="border:1px solid black">'
579SELECT geopoly_svg(_shape,
580         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
581       )
582  FROM geo1
583 WHERE geopoly_overlap(_shape,(SELECT poly FROM querypoly));
584SELECT geopoly_svg(poly,'style="fill:none;stroke:black;stroke-width:2"')
585  FROM querypoly;
586ROLLBACK;
587.print '</svg>'
588
589.print '<h1>Regular Polygons</h1>'
590.print '<svg width="1000" height="200" style="border:1px solid black">'
591SELECT geopoly_svg(geopoly_regular(100,100,40,3),'style="fill:none;stroke:red;stroke-width:1"');
592SELECT geopoly_svg(geopoly_regular(200,100,40,4),'style="fill:none;stroke:orange;stroke-width:1"');
593SELECT geopoly_svg(geopoly_regular(300,100,40,5),'style="fill:none;stroke:green;stroke-width:1"');
594SELECT geopoly_svg(geopoly_regular(400,100,40,6),'style="fill:none;stroke:blue;stroke-width:1"');
595SELECT geopoly_svg(geopoly_regular(500,100,40,7),'style="fill:none;stroke:purple;stroke-width:1"');
596SELECT geopoly_svg(geopoly_regular(600,100,40,8),'style="fill:none;stroke:red;stroke-width:1"');
597SELECT geopoly_svg(geopoly_regular(700,100,40,10),'style="fill:none;stroke:orange;stroke-width:1"');
598SELECT geopoly_svg(geopoly_regular(800,100,40,20),'style="fill:none;stroke:green;stroke-width:1"');
599SELECT geopoly_svg(geopoly_regular(900,100,40,30),'style="fill:none;stroke:blue;stroke-width:1"');
600.print '</svg>'
601
602.print '</html>'
603