Many hyperlinks are disabled.

Use anonymous login
to enable hyperlinks.

Overview

Comment: | Updates to the geopoly documentation. |
---|---|

Timelines: | family | ancestors | descendants | both | trunk |

Files: | files | file ages | folders |

SHA3-256: | f1742a52f5b20e2bb6064adc05e90a496d4fbb80fe4672778317fb462d7f9fcc |

User & Date: | drh 2018-09-13 12:50:58 |

Context

2018-09-14
| ||

15:54 | Update the speed-and-size spreadsheet with the latest measurements. check-in: 37ab9b40af user: drh tags: trunk | |

2018-09-13
| ||

12:50 | Updates to the geopoly documentation. check-in: f1742a52f5 user: drh tags: trunk | |

2018-09-12
| ||

10:49 | Fix typos in the windowfunctions.html document. check-in: 221cce4209 user: drh tags: trunk | |

Changes

Changes to pages/compile.in.

872 873 874 875 876 877 878 879 880 881 882 883 884 885 |
of the full-text search engine is added to the build automatically. } COMPILE_OPTION {SQLITE_ENABLE_FTS5} { When this option is defined in the [amalgamation], versions 5 of the full-text search engine ([fts5]) is added to the build automatically. } COMPILE_OPTION {SQLITE_ENABLE_ICU} { This option causes the [http://www.icu-project.org/ | International Components for Unicode] or "ICU" extension to SQLite to be added to the build. } |
> > > > > |
872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 |
of the full-text search engine is added to the build automatically. } COMPILE_OPTION {SQLITE_ENABLE_FTS5} { When this option is defined in the [amalgamation], versions 5 of the full-text search engine ([fts5]) is added to the build automatically. } COMPILE_OPTION {SQLITE_ENABLE_GEOPOLY} { When this option is defined in the [amalgamation], the [Geopoly extension] is included in the build. } COMPILE_OPTION {SQLITE_ENABLE_ICU} { This option causes the [http://www.icu-project.org/ | International Components for Unicode] or "ICU" extension to SQLite to be added to the build. } |

Changes to pages/geopoly.in.

1 2 3 4 5 6 7 8 9 .. 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 ... 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 |
<title>The Geopoly Interface To The SQLite R*Tree Module</title> <tcl>hd_keywords {geopoly} {Geopoly module}</tcl> <table_of_contents> <h1>Overview</h1> <p> The Geopoly module is an alternative interface to the [R-Tree extension] that uses the [http://geojson.org | GeoJSON] notation ................................................................................ polygons. Geopoly includes functions for detecting when one polygon is contained within or overlaps with another, for computing the area enclosed by a polygon, for doing linear transformations of polygons, for rendering polygons as [https://en.wikipedia.org/wiki/Scalable_Vector_Graphics | SVG], and other similar operations. <p> Geopoly operates on "simple" polygons - that is, polygons for which the boundary does not intersect itself. Geopoly thus extends the capabilities of the [R-Tree extension] which can only deal with rectangular areas. On the other hand, the [R-Tree extension] is able to handle between 1 and 5 coordinate dimensions, whereas Geopoly is restricted to 2-dimensional shapes only. ................................................................................ with the origin at the lower left, whereas SVG uses a left-handed coordinate system with the origin at the upper left. The geopoly_svg() routine makes no attempt to transform the coordinate system, so the displayed images are shown in mirror image and rotated. If that is undesirable, the geopoly_xform() routine can be used to transform the output from cartesian to SVG coordinates prior to passing the polygons into geopoly_svg(). <tcl>hd_fragment gbbox geopoly_bbox</tcl> <h2>The geopoly_bbox(P) Function</h2> <p> If P is a polygon, then geopoly_bbox(P) returns a new polygon that is the smallest (axis-aligned) rectangle completely enclosing P. If P is not a polygon, geopoly_bbox(P) returns NULL. <tcl>hd_fragment gpoint geopoly_constains_point</tcl> <h2>The geopoly_contains_point(P,X,Y) Function</h2> <p> If P is a polygon, then geopoly_contains_point(P,X,Y) returns true if and only if the coordinate X,Y is inside or on the boundary of the polygon P. If P is not a polygon, geopoly_contains_point(P,X,Y) returns NULL. <tcl>hd_fragment xform geopoly_xform</tcl> <h2>The geopoly_xform(P,A,B,C,D,E,F) Function</h2> <p> The geopoly_xform(P,A,B,C,D,E,F) returns a new polygon that is a affine transformation of the polygon P and where the transformation is defined by values A,B,C,D,E,F. If P is not a valid polygon, this routine returns NULL. <p> The transformation converts each vertex of the polygon according to the following formula: ................................................................................ to compute polygon decoding, overlap, and containment. <h2>Binary Encoding of Polygons</h2> <p> Geopoly stores all polygons internally using a binary format. A binary polygon consists of a 4-byte header following by an array of coordinate pairs in which each dimension of each coordinate is of 32-byte floating point number. <p> The first byte of the header is a flag byte. The least significant bit of the flag byte determines whether the coordinate pairs that follow the header are stored big-endian or little-endian. A value of 0 for the least significant bit means big-endian and a value of 1 means little endian. |
| > > > > > | | > > > > > | | |
1 2 3 4 5 6 7 8 9 .. 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 ... 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
<title>The Geopoly Interface To The SQLite R*Tree Module</title> <tcl>hd_keywords {geopoly} {Geopoly module} {Geopoly extension}</tcl> <table_of_contents> <h1>Overview</h1> <p> The Geopoly module is an alternative interface to the [R-Tree extension] that uses the [http://geojson.org | GeoJSON] notation ................................................................................ polygons. Geopoly includes functions for detecting when one polygon is contained within or overlaps with another, for computing the area enclosed by a polygon, for doing linear transformations of polygons, for rendering polygons as [https://en.wikipedia.org/wiki/Scalable_Vector_Graphics | SVG], and other similar operations. <p> The source code for Geopoly is included in the [amalgamation] but is not included in the library unless the [-DSQLITE_ENABLE_GEOPOLY] compile-time option is used. <p> Geopoly operates on "simple" polygons - that is, polygons for which the boundary does not intersect itself. Geopoly thus extends the capabilities of the [R-Tree extension] which can only deal with rectangular areas. On the other hand, the [R-Tree extension] is able to handle between 1 and 5 coordinate dimensions, whereas Geopoly is restricted to 2-dimensional shapes only. ................................................................................ with the origin at the lower left, whereas SVG uses a left-handed coordinate system with the origin at the upper left. The geopoly_svg() routine makes no attempt to transform the coordinate system, so the displayed images are shown in mirror image and rotated. If that is undesirable, the geopoly_xform() routine can be used to transform the output from cartesian to SVG coordinates prior to passing the polygons into geopoly_svg(). <tcl>hd_fragment gbbox geopoly_bbox geopoly_group_bbox</tcl> <h2>The geopoly_bbox(P) and geopoly_group_bbox(P) Functions</h2> <p> If P is a polygon, then geopoly_bbox(P) returns a new polygon that is the smallest (axis-aligned) rectangle completely enclosing P. If P is not a polygon, geopoly_bbox(P) returns NULL. <p> The geopoly_group_bbox(P) function is an aggregate version of geopoly_bbox(P). The geopoly_group_bbox(P) function returns the smallest rectangle that will enclose all P values seen during aggregation. <tcl>hd_fragment gpoint geopoly_constains_point</tcl> <h2>The geopoly_contains_point(P,X,Y) Function</h2> <p> If P is a polygon, then geopoly_contains_point(P,X,Y) returns true if and only if the coordinate X,Y is inside or on the boundary of the polygon P. If P is not a polygon, geopoly_contains_point(P,X,Y) returns NULL. <tcl>hd_fragment xform geopoly_xform</tcl> <h2>The geopoly_xform(P,A,B,C,D,E,F) Function</h2> <p> The geopoly_xform(P,A,B,C,D,E,F) function returns a new polygon that is an affine transformation of the polygon P and where the transformation is defined by values A,B,C,D,E,F. If P is not a valid polygon, this routine returns NULL. <p> The transformation converts each vertex of the polygon according to the following formula: ................................................................................ to compute polygon decoding, overlap, and containment. <h2>Binary Encoding of Polygons</h2> <p> Geopoly stores all polygons internally using a binary format. A binary polygon consists of a 4-byte header following by an array of coordinate pairs in which each dimension of each coordinate is a 32-bit floating point number. <p> The first byte of the header is a flag byte. The least significant bit of the flag byte determines whether the coordinate pairs that follow the header are stored big-endian or little-endian. A value of 0 for the least significant bit means big-endian and a value of 1 means little endian. |