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