├── .eslintrc.js ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md └── workflows │ ├── bigquery-ded.yml │ ├── bigquery.yml │ ├── databricks.yml │ ├── postgres-ded.yml │ ├── postgres.yml │ ├── publish-release.yml │ ├── redshift-ded.yml │ ├── redshift.yml │ ├── snowflake-ded.yml │ └── snowflake.yml ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── clouds ├── bigquery │ ├── .env.template │ ├── CHANGELOG.md │ ├── CHANGELOG.old.md │ ├── Makefile │ ├── README.md │ ├── common │ │ ├── .sqlfluff │ │ ├── DROP_FUNCTIONS.sql │ │ ├── Makefile │ │ ├── VERSION.sql │ │ ├── analytics-toolbox-bigquery.png │ │ ├── build_modules.js │ │ ├── copy_module_permissions.sh │ │ ├── list_functions.js │ │ ├── list_libraries.js │ │ ├── package.json │ │ ├── python3_requirements.txt │ │ ├── rollup.config.js │ │ ├── run-query.js │ │ ├── run-script.js │ │ ├── set_module_permissions.sh │ │ ├── set_module_permissions_group.sh │ │ ├── sql_lint.py │ │ ├── test-extend.js │ │ └── test-utils.js │ ├── libraries │ │ └── javascript │ │ │ ├── Makefile │ │ │ ├── libs │ │ │ ├── accessors.js │ │ │ ├── clustering.js │ │ │ ├── constructors.js │ │ │ ├── h3.js │ │ │ ├── measurements.js │ │ │ ├── placekey.js │ │ │ ├── processing.js │ │ │ ├── quadkey.js │ │ │ ├── random.js │ │ │ ├── s2.js │ │ │ └── transformations.js │ │ │ ├── package.json │ │ │ ├── src │ │ │ ├── index.js │ │ │ ├── quadkey.js │ │ │ ├── random.js │ │ │ └── s2.js │ │ │ └── test │ │ │ ├── accessors.test.js │ │ │ ├── clustering.test.js │ │ │ ├── constructors.test.js │ │ │ ├── h3.test.js │ │ │ ├── measurements.test.js │ │ │ ├── placekey.test.js │ │ │ ├── processing.test.js │ │ │ ├── quadkey.test.js │ │ │ ├── random.test.js │ │ │ ├── s2.test.js │ │ │ └── transformations.test.js │ ├── modules │ │ ├── Makefile │ │ ├── doc │ │ │ ├── accessors │ │ │ │ ├── ST_ENVELOPE.md │ │ │ │ └── _INTRO.md │ │ │ ├── clustering │ │ │ │ ├── ST_CLUSTERKMEANS.md │ │ │ │ └── _INTRO.md │ │ │ ├── constructors │ │ │ │ ├── ST_BEZIERSPLINE.md │ │ │ │ ├── ST_MAKEELLIPSE.md │ │ │ │ ├── ST_MAKEENVELOPE.md │ │ │ │ ├── ST_TILEENVELOPE.md │ │ │ │ └── _INTRO.md │ │ │ ├── geohash │ │ │ │ ├── GEOHASH_BOUNDARY.md │ │ │ │ └── _INTRO.md │ │ │ ├── h3 │ │ │ │ ├── H3_BOUNDARY.md │ │ │ │ ├── H3_CENTER.md │ │ │ │ ├── H3_COMPACT.md │ │ │ │ ├── H3_DISTANCE.md │ │ │ │ ├── H3_FROMGEOGPOINT.md │ │ │ │ ├── H3_FROMLONGLAT.md │ │ │ │ ├── H3_HEXRING.md │ │ │ │ ├── H3_INT_TOSTRING.md │ │ │ │ ├── H3_ISPENTAGON.md │ │ │ │ ├── H3_ISVALID.md │ │ │ │ ├── H3_KRING.md │ │ │ │ ├── H3_KRING_DISTANCES.md │ │ │ │ ├── H3_POLYFILL.md │ │ │ │ ├── H3_POLYFILL_MODE.md │ │ │ │ ├── H3_POLYFILL_TABLE.md │ │ │ │ ├── H3_RESOLUTION.md │ │ │ │ ├── H3_STRING_TOINT.md │ │ │ │ ├── H3_TOCHILDREN.md │ │ │ │ ├── H3_TOPARENT.md │ │ │ │ ├── H3_UNCOMPACT.md │ │ │ │ ├── _H3_COVERINGCELLIDS.mdx │ │ │ │ ├── _INTRO.md │ │ │ │ └── images │ │ │ │ │ ├── H3_POLYFILL_MODE_center.png │ │ │ │ │ ├── H3_POLYFILL_MODE_contains.png │ │ │ │ │ └── H3_POLYFILL_MODE_intersects.png │ │ │ ├── measurements │ │ │ │ ├── ST_ANGLE.md │ │ │ │ ├── ST_MINKOWSKIDISTANCE.md │ │ │ │ └── _INTRO.md │ │ │ ├── placekey │ │ │ │ ├── PLACEKEY_FROMH3.md │ │ │ │ ├── PLACEKEY_ISVALID.md │ │ │ │ ├── PLACEKEY_TOH3.md │ │ │ │ └── _INTRO.md │ │ │ ├── processing │ │ │ │ ├── ST_DELAUNAYLINES.md │ │ │ │ ├── ST_DELAUNAYPOLYGONS.md │ │ │ │ ├── ST_POLYGONIZE.md │ │ │ │ ├── ST_VORONOILINES.md │ │ │ │ ├── ST_VORONOIPOLYGONS.md │ │ │ │ └── _INTRO.md │ │ │ ├── quadbin │ │ │ │ ├── QUADBIN_BBOX.md │ │ │ │ ├── QUADBIN_BOUNDARY.md │ │ │ │ ├── QUADBIN_CENTER.md │ │ │ │ ├── QUADBIN_DISTANCE.md │ │ │ │ ├── QUADBIN_FROMGEOGPOINT.md │ │ │ │ ├── QUADBIN_FROMLONGLAT.md │ │ │ │ ├── QUADBIN_FROMQUADKEY.md │ │ │ │ ├── QUADBIN_FROMZXY.md │ │ │ │ ├── QUADBIN_ISVALID.md │ │ │ │ ├── QUADBIN_KRING.md │ │ │ │ ├── QUADBIN_KRING_DISTANCES.md │ │ │ │ ├── QUADBIN_POLYFILL.md │ │ │ │ ├── QUADBIN_POLYFILL_MODE.md │ │ │ │ ├── QUADBIN_POLYFILL_TABLE.md │ │ │ │ ├── QUADBIN_RESOLUTION.md │ │ │ │ ├── QUADBIN_SIBLING.md │ │ │ │ ├── QUADBIN_TOCHILDREN.md │ │ │ │ ├── QUADBIN_TOPARENT.md │ │ │ │ ├── QUADBIN_TOQUADKEY.md │ │ │ │ ├── QUADBIN_TOZXY.md │ │ │ │ ├── _INTRO.md │ │ │ │ └── images │ │ │ │ │ ├── QUADBIN_POLYFILL_MODE_center.png │ │ │ │ │ ├── QUADBIN_POLYFILL_MODE_contains.png │ │ │ │ │ ├── QUADBIN_POLYFILL_MODE_intersects.png │ │ │ │ │ └── QUADBIN_POLYFILL_MODE_polygon.png │ │ │ ├── random │ │ │ │ ├── ST_GENERATEPOINTS.md │ │ │ │ └── _INTRO.md │ │ │ ├── s2 │ │ │ │ ├── S2_BOUNDARY.md │ │ │ │ ├── S2_CENTER.md │ │ │ │ ├── S2_FROMGEOGPOINT.md │ │ │ │ ├── S2_FROMHILBERTQUADKEY.md │ │ │ │ ├── S2_FROMLONGLAT.md │ │ │ │ ├── S2_FROMTOKEN.md │ │ │ │ ├── S2_FROMUINT64REPR.md │ │ │ │ ├── S2_RESOLUTION.md │ │ │ │ ├── S2_TOCHILDREN.md │ │ │ │ ├── S2_TOHILBERTQUADKEY.md │ │ │ │ ├── S2_TOTOKEN.md │ │ │ │ ├── S2_TOUINT64REPR.md │ │ │ │ └── _INTRO.md │ │ │ └── transformations │ │ │ │ ├── ST_BUFFER.md │ │ │ │ ├── ST_CENTERMEAN.md │ │ │ │ ├── ST_CENTERMEDIAN.md │ │ │ │ ├── ST_CENTEROFMASS.md │ │ │ │ ├── ST_CONCAVEHULL.md │ │ │ │ ├── ST_DESTINATION.md │ │ │ │ ├── ST_GREATCIRCLE.md │ │ │ │ ├── ST_LINE_INTERPOLATE_POINT.md │ │ │ │ ├── ST_POINTONSURFACE.md │ │ │ │ └── _INTRO.md │ │ ├── sql │ │ │ ├── .sqlfluffignore │ │ │ ├── accessors │ │ │ │ └── ST_ENVELOPE.sql │ │ │ ├── clustering │ │ │ │ └── ST_CLUSTERKMEANS.sql │ │ │ ├── constructors │ │ │ │ ├── ST_BEZIERSPLINE.sql │ │ │ │ ├── ST_MAKEELLIPSE.sql │ │ │ │ ├── ST_MAKEENVELOPE.sql │ │ │ │ └── ST_TILEENVELOPE.sql │ │ │ ├── geohash │ │ │ │ └── GEOHASH_BOUNDARY.sql │ │ │ ├── h3 │ │ │ │ ├── H3_BOUNDARY.sql │ │ │ │ ├── H3_CENTER.sql │ │ │ │ ├── H3_COMPACT.sql │ │ │ │ ├── H3_DISTANCE.sql │ │ │ │ ├── H3_FROMGEOGPOINT.sql │ │ │ │ ├── H3_FROMLONGLAT.sql │ │ │ │ ├── H3_HEXRING.sql │ │ │ │ ├── H3_INT_TOSTRING.sql │ │ │ │ ├── H3_ISPENTAGON.sql │ │ │ │ ├── H3_ISVALID.sql │ │ │ │ ├── H3_KRING.sql │ │ │ │ ├── H3_KRING_DISTANCES.sql │ │ │ │ ├── H3_POLYFILL.sql │ │ │ │ ├── H3_POLYFILL_TABLE.sql │ │ │ │ ├── H3_RESOLUTION.sql │ │ │ │ ├── H3_STRING_TOINT.sql │ │ │ │ ├── H3_TOCHILDREN.sql │ │ │ │ ├── H3_TOPARENT.sql │ │ │ │ ├── H3_UNCOMPACT.sql │ │ │ │ └── _H3_COVERINGCELLIDS.sql │ │ │ ├── measurements │ │ │ │ ├── ST_ANGLE.sql │ │ │ │ └── ST_MINKOWSKIDISTANCE.sql │ │ │ ├── placekey │ │ │ │ ├── PLACEKEY_FROMH3.sql │ │ │ │ ├── PLACEKEY_ISVALID.sql │ │ │ │ └── PLACEKEY_TOH3.sql │ │ │ ├── processing │ │ │ │ ├── ST_DELAUNAYLINES.sql │ │ │ │ ├── ST_DELAUNAYPOLYGONS.sql │ │ │ │ ├── ST_POLYGONIZE.sql │ │ │ │ ├── ST_VORONOILINES.sql │ │ │ │ ├── ST_VORONOIPOLYGONS.sql │ │ │ │ ├── __DELAUNAYGENERIC.sql │ │ │ │ ├── __VORONOIGENERIC.sql │ │ │ │ └── __VORONOIHELPER.sql │ │ │ ├── quadbin │ │ │ │ ├── QUADBIN_BBOX.sql │ │ │ │ ├── QUADBIN_BOUNDARY.sql │ │ │ │ ├── QUADBIN_CENTER.sql │ │ │ │ ├── QUADBIN_DISTANCE.sql │ │ │ │ ├── QUADBIN_FROMGEOGPOINT.sql │ │ │ │ ├── QUADBIN_FROMLONGLAT.sql │ │ │ │ ├── QUADBIN_FROMQUADKEY.sql │ │ │ │ ├── QUADBIN_FROMZXY.sql │ │ │ │ ├── QUADBIN_ISVALID.sql │ │ │ │ ├── QUADBIN_KRING.sql │ │ │ │ ├── QUADBIN_KRING_DISTANCES.sql │ │ │ │ ├── QUADBIN_POLYFILL.sql │ │ │ │ ├── QUADBIN_POLYFILL_TABLE.sql │ │ │ │ ├── QUADBIN_RESOLUTION.sql │ │ │ │ ├── QUADBIN_SIBLING.sql │ │ │ │ ├── QUADBIN_TOCHILDREN.sql │ │ │ │ ├── QUADBIN_TOPARENT.sql │ │ │ │ ├── QUADBIN_TOQUADKEY.sql │ │ │ │ ├── QUADBIN_TOZXY.sql │ │ │ │ ├── __QUADBIN_FROMLONGLAT_ZOOMRANGE.sql │ │ │ │ ├── __QUADBIN_FROMQUADINT.sql │ │ │ │ ├── __QUADBIN_INT_TOSTRING.sql │ │ │ │ └── __QUADBIN_STRING_TOINT.sql │ │ │ ├── quadkey │ │ │ │ ├── QUADINT_BBOX.sql │ │ │ │ ├── QUADINT_BOUNDARY.sql │ │ │ │ ├── QUADINT_CENTER.sql │ │ │ │ ├── QUADINT_FROMGEOGPOINT.sql │ │ │ │ ├── QUADINT_FROMLONGLAT.sql │ │ │ │ ├── QUADINT_FROMLONGLAT_ZOOMRANGE.sql │ │ │ │ ├── QUADINT_FROMQUADKEY.sql │ │ │ │ ├── QUADINT_FROMZXY.sql │ │ │ │ ├── QUADINT_KRING.sql │ │ │ │ ├── QUADINT_KRING_DISTANCES.sql │ │ │ │ ├── QUADINT_POLYFILL.sql │ │ │ │ ├── QUADINT_RESOLUTION.sql │ │ │ │ ├── QUADINT_SIBLING.sql │ │ │ │ ├── QUADINT_TOCHILDREN.sql │ │ │ │ ├── QUADINT_TOGEOGPOINT.sql │ │ │ │ ├── QUADINT_TOPARENT.sql │ │ │ │ ├── QUADINT_TOQUADKEY.sql │ │ │ │ └── QUADINT_TOZXY.sql │ │ │ ├── random │ │ │ │ └── ST_GENERATEPOINTS.sql │ │ │ ├── s2 │ │ │ │ ├── S2_BOUNDARY.sql │ │ │ │ ├── S2_CENTER.sql │ │ │ │ ├── S2_FROMGEOGPOINT.sql │ │ │ │ ├── S2_FROMHILBERTQUADKEY.sql │ │ │ │ ├── S2_FROMLONGLAT.sql │ │ │ │ ├── S2_FROMTOKEN.sql │ │ │ │ ├── S2_FROMUINT64REPR.sql │ │ │ │ ├── S2_RESOLUTION.sql │ │ │ │ ├── S2_TOCHILDREN.sql │ │ │ │ ├── S2_TOHILBERTQUADKEY.sql │ │ │ │ ├── S2_TOTOKEN.sql │ │ │ │ └── S2_TOUINT64REPR.sql │ │ │ ├── transformations │ │ │ │ ├── ST_BUFFER.sql │ │ │ │ ├── ST_CENTERMEAN.sql │ │ │ │ ├── ST_CENTERMEDIAN.sql │ │ │ │ ├── ST_CENTEROFMASS.sql │ │ │ │ ├── ST_CONCAVEHULL.sql │ │ │ │ ├── ST_DESTINATION.sql │ │ │ │ ├── ST_GREATCIRCLE.sql │ │ │ │ ├── ST_LINE_INTERPOLATE_POINT.sql │ │ │ │ └── ST_POINTONSURFACE.sql │ │ │ └── utils │ │ │ │ ├── __CHECK_TABLE.sql │ │ │ │ ├── __TABLENAME_JOIN.sql │ │ │ │ └── __TABLENAME_SPLIT.sql │ │ └── test │ │ │ ├── accessors │ │ │ ├── ST_ENVELOPE.test.js │ │ │ └── fixtures │ │ │ │ ├── st_envelope_featureCollection_in.js │ │ │ │ ├── st_envelope_featureCollection_out.js │ │ │ │ ├── st_envelope_points_in.js │ │ │ │ └── st_envelope_points_out.js │ │ │ ├── clustering │ │ │ ├── ST_CLUSTERKMEANS.test.js │ │ │ └── fixtures │ │ │ │ ├── st_clusterkmeans_points1_out.js │ │ │ │ ├── st_clusterkmeans_points2_out.js │ │ │ │ └── st_clusterkmeans_points3_out.js │ │ │ ├── constructors │ │ │ ├── ST_BEZIERSPLINE.test.js │ │ │ ├── ST_MAKEELLIPSE.test.js │ │ │ ├── ST_MAKEENVELOPE.test.js │ │ │ └── ST_TILEENVELOPE.test.js │ │ │ ├── geohash │ │ │ └── GEOHASH_BOUNDARY.test.js │ │ │ ├── h3 │ │ │ ├── H3_BOUNDARY.test.js │ │ │ ├── H3_CENTER.test.js │ │ │ ├── H3_COMPACT.test.js │ │ │ ├── H3_DISTANCE.test.js │ │ │ ├── H3_FROMGEOGPOINT.test.js │ │ │ ├── H3_FROMLONGLAT.test.js │ │ │ ├── H3_HEXRING.test.js │ │ │ ├── H3_INT_TOSTRING.test.js │ │ │ ├── H3_ISPENTAGON.test.js │ │ │ ├── H3_ISVALID.test.js │ │ │ ├── H3_KRING.test.js │ │ │ ├── H3_KRING_DISTANCES.test.js │ │ │ ├── H3_POLYFILL.test.js │ │ │ ├── H3_POLYFILL_TABLE.test.js │ │ │ ├── H3_RESOLUTION.test.js │ │ │ ├── H3_STRING_TOINT.test.js │ │ │ ├── H3_TOCHILDREN.test.js │ │ │ ├── H3_TOPARENT.test.js │ │ │ └── _H3_COVERINGCELLIDS.test.js │ │ │ ├── measurements │ │ │ ├── ST_ANGLE.test.js │ │ │ └── ST_MINKOWSKIDISTANCE.test.js │ │ │ ├── placekey │ │ │ ├── PLACEKEY_FROMH3.test.js │ │ │ ├── PLACEKEY_ISVALID.test.js │ │ │ └── PLACEKEY_TOH3.test.js │ │ │ ├── processing │ │ │ ├── ST_DELAUNAYLINES.test.js │ │ │ ├── ST_DELAUNAYPOLYGONS.test.js │ │ │ ├── ST_POLYGONIZE.test.js │ │ │ ├── ST_VORONOILINES.test.js │ │ │ ├── ST_VORONOIPOLYGONS.test.js │ │ │ └── fixtures │ │ │ │ ├── st_delaunay_in.js │ │ │ │ ├── st_delaunay_out.js │ │ │ │ ├── st_polygonize_in.js │ │ │ │ ├── st_polygonize_out.js │ │ │ │ ├── st_voronoi_in.js │ │ │ │ └── st_voronoi_out.js │ │ │ ├── quadbin │ │ │ ├── QUADBIN_BBOX.test.js │ │ │ ├── QUADBIN_BOUNDARY.test.js │ │ │ ├── QUADBIN_CENTER.test.js │ │ │ ├── QUADBIN_DISTANCE.test.js │ │ │ ├── QUADBIN_FROMGEOGPOINT.test.js │ │ │ ├── QUADBIN_FROMLONGLAT.test.js │ │ │ ├── QUADBIN_FROMQUADKEY.test.js │ │ │ ├── QUADBIN_FROMZXY.test.js │ │ │ ├── QUADBIN_ISVALID.test.js │ │ │ ├── QUADBIN_KRING.test.js │ │ │ ├── QUADBIN_KRING_DISTANCES.test.js │ │ │ ├── QUADBIN_POLYFILL.test.js │ │ │ ├── QUADBIN_POLYFILL_TABLE.test.js │ │ │ ├── QUADBIN_RESOLUTION.test.js │ │ │ ├── QUADBIN_SIBLING.test.js │ │ │ ├── QUADBIN_TOCHILDREN.test.js │ │ │ ├── QUADBIN_TOPARENT.test.js │ │ │ ├── QUADBIN_TOQUADKEY.test.js │ │ │ ├── QUADBIN_TOZXY.test.js │ │ │ ├── __QUADBIN_FROMLONGLAT_ZOOMRANGE.test.js │ │ │ ├── __QUADBIN_FROMQUADINT.test.js │ │ │ ├── __QUADBIN_INT_TOSTRING.test.js │ │ │ └── __QUADBIN_STRING_TOINT.test.js │ │ │ ├── quadkey │ │ │ ├── QUADINT.test.js │ │ │ ├── QUADINT_BBOX.test.js │ │ │ ├── QUADINT_BOUNDARY.test.js │ │ │ ├── QUADINT_CENTER.test.js │ │ │ ├── QUADINT_FROMLONGLAT.test.js │ │ │ ├── QUADINT_FROMLONGLAT_ZOOMRANGE.test.js │ │ │ ├── QUADINT_KRING.test.js │ │ │ ├── QUADINT_KRING_DISTANCES.test.js │ │ │ ├── QUADINT_POLYFILL.test.js │ │ │ ├── QUADINT_RESOLUTION.test.js │ │ │ ├── QUADINT_SIBLING.test.js │ │ │ ├── QUADINT_TOCHILDREN.test.js │ │ │ ├── QUADINT_TOGEOGPOINT.test.js │ │ │ ├── QUADINT_TOPARENT.test.js │ │ │ └── fixtures │ │ │ │ ├── quadint_fromlonglat_out.js │ │ │ │ └── quadint_polyfill_out.js │ │ │ ├── random │ │ │ └── ST_GENERATEPOINTS.test.js │ │ │ ├── s2 │ │ │ ├── S2_BOUNDARY.test.js │ │ │ ├── S2_CENTER.test.js │ │ │ ├── S2_FROMGEOGPOINT.test.js │ │ │ ├── S2_FROMHILBERTQUADKEY.test.js │ │ │ ├── S2_FROMLONGLAT.test.js │ │ │ ├── S2_FROMTOKEN.test.js │ │ │ ├── S2_FROMUINT64REPR.test.js │ │ │ ├── S2_RESOLUTION.test.js │ │ │ ├── S2_TOCHILDREN.test.js │ │ │ ├── S2_TOHILBERTQUADKEY.test.js │ │ │ ├── S2_TOTOKEN.test.js │ │ │ └── S2_TOUINT64REPR.test.js │ │ │ └── transformations │ │ │ ├── ST_BUFFER.test.js │ │ │ ├── ST_CENTERMEAN.test.js │ │ │ ├── ST_CENTERMEDIAN.test.js │ │ │ ├── ST_CENTEROFMASS.test.js │ │ │ ├── ST_CONCAVEHULL.test.js │ │ │ ├── ST_DESTINATION.test.js │ │ │ ├── ST_GREATCIRCLE.test.js │ │ │ ├── ST_LINE_INTERPOLATE_POINT.test.js │ │ │ ├── ST_POINTONSURFACE.test.js │ │ │ └── fixtures │ │ │ ├── st_buffer_in.js │ │ │ ├── st_buffer_out.js │ │ │ ├── st_concavehull_duplicates_in.js │ │ │ ├── st_concavehull_duplicates_out.js │ │ │ ├── st_concavehull_fiji_in.js │ │ │ ├── st_concavehull_fiji_out.js │ │ │ ├── st_concavehull_hole_in.js │ │ │ ├── st_concavehull_hole_out.js │ │ │ ├── st_concavehull_in.js │ │ │ ├── st_concavehull_out.js │ │ │ ├── st_concavehull_point_in.js │ │ │ └── st_concavehull_point_out.js │ └── version ├── databricks │ ├── .env.template │ ├── .gitignore │ ├── CHANGELOG.md │ ├── CHANGELOG.old.md │ ├── Makefile │ ├── README.md │ ├── common │ │ ├── .sqlfluff │ │ ├── Makefile │ │ ├── README.md │ │ ├── analytics-toolbox-databricks.png │ │ ├── createIT.sh │ │ ├── package.json │ │ ├── python3_requirements.txt │ │ ├── python_utils │ │ │ ├── __init__.py │ │ │ ├── create_modules_sql.py │ │ │ ├── create_tests_from_doc.py │ │ │ ├── resources │ │ │ │ ├── test_modules_init.py │ │ │ │ └── test_template.py │ │ │ └── run_query.py │ │ ├── requirements_create_it.txt │ │ ├── sql_lint.py │ │ └── submit-run-template.json │ ├── libraries │ │ └── scala │ │ │ ├── .scalafix.conf │ │ │ ├── .scalafmt.conf │ │ │ ├── LICENSE │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── build.sbt │ │ │ ├── core │ │ │ └── src │ │ │ │ ├── main │ │ │ │ ├── resources │ │ │ │ │ └── .gitignore │ │ │ │ └── scala │ │ │ │ │ └── com │ │ │ │ │ └── carto │ │ │ │ │ └── analyticstoolbox │ │ │ │ │ ├── modules │ │ │ │ │ ├── accessors │ │ │ │ │ │ ├── ST_CoordDim.scala │ │ │ │ │ │ ├── ST_Dimension.scala │ │ │ │ │ │ ├── ST_Envelope.scala │ │ │ │ │ │ ├── ST_GeometryN.scala │ │ │ │ │ │ ├── ST_IsClosed.scala │ │ │ │ │ │ ├── ST_IsCollection.scala │ │ │ │ │ │ ├── ST_IsEmpty.scala │ │ │ │ │ │ ├── ST_IsGeomField.scala │ │ │ │ │ │ ├── ST_IsRing.scala │ │ │ │ │ │ ├── ST_IsSimple.scala │ │ │ │ │ │ ├── ST_IsValid.scala │ │ │ │ │ │ ├── ST_NumGeometries.scala │ │ │ │ │ │ ├── ST_NumPoints.scala │ │ │ │ │ │ ├── ST_PointN.scala │ │ │ │ │ │ ├── ST_X.scala │ │ │ │ │ │ └── ST_Y.scala │ │ │ │ │ ├── constructors │ │ │ │ │ │ ├── ST_MakeBBOX.scala │ │ │ │ │ │ ├── ST_MakeBox2D.scala │ │ │ │ │ │ ├── ST_MakeLine.scala │ │ │ │ │ │ ├── ST_MakePoint.scala │ │ │ │ │ │ ├── ST_MakePointM.scala │ │ │ │ │ │ └── ST_MakePolygon.scala │ │ │ │ │ ├── formatters │ │ │ │ │ │ ├── ST_AsBinary.scala │ │ │ │ │ │ ├── ST_AsGeoHash.scala │ │ │ │ │ │ ├── ST_AsGeoJson.scala │ │ │ │ │ │ ├── ST_AsLatLonText.scala │ │ │ │ │ │ ├── ST_AsTWKB.scala │ │ │ │ │ │ ├── ST_AsText.scala │ │ │ │ │ │ ├── ST_ByteArray.scala │ │ │ │ │ │ ├── ST_CastToGeometry.scala │ │ │ │ │ │ ├── ST_CastToLineString.scala │ │ │ │ │ │ ├── ST_CastToPoint.scala │ │ │ │ │ │ └── ST_CastToPolygon.scala │ │ │ │ │ ├── index │ │ │ │ │ │ ├── ST_CrsFromText.scala │ │ │ │ │ │ ├── ST_ExtentFromGeom.scala │ │ │ │ │ │ ├── ST_ExtentToGeom.scala │ │ │ │ │ │ ├── ST_GeomReproject.scala │ │ │ │ │ │ ├── ST_MakeExtent.scala │ │ │ │ │ │ ├── ST_PartitionCentroid.scala │ │ │ │ │ │ ├── ST_Z2LatLon.scala │ │ │ │ │ │ └── package.scala │ │ │ │ │ ├── measurements │ │ │ │ │ │ ├── ST_Area.scala │ │ │ │ │ │ ├── ST_Distance.scala │ │ │ │ │ │ ├── ST_DistanceSphere.scala │ │ │ │ │ │ ├── ST_Length.scala │ │ │ │ │ │ └── ST_LengthSphere.scala │ │ │ │ │ ├── package.scala │ │ │ │ │ ├── parsers │ │ │ │ │ │ ├── ST_GeomFromGeoHash.scala │ │ │ │ │ │ ├── ST_GeomFromGeoJson.scala │ │ │ │ │ │ ├── ST_GeomFromTWKB.scala │ │ │ │ │ │ ├── ST_GeomFromWKB.scala │ │ │ │ │ │ ├── ST_GeomFromWKT.scala │ │ │ │ │ │ ├── ST_LineFromText.scala │ │ │ │ │ │ ├── ST_MLineFromText.scala │ │ │ │ │ │ ├── ST_MPointFromText.scala │ │ │ │ │ │ ├── ST_MPolyFromText.scala │ │ │ │ │ │ ├── ST_PointFromGeoHash.scala │ │ │ │ │ │ ├── ST_PointFromText.scala │ │ │ │ │ │ ├── ST_PointFromWKB.scala │ │ │ │ │ │ └── ST_PolygonFromText.scala │ │ │ │ │ ├── predicates │ │ │ │ │ │ ├── ST_Contains.scala │ │ │ │ │ │ ├── ST_Covers.scala │ │ │ │ │ │ ├── ST_Crosses.scala │ │ │ │ │ │ ├── ST_Disjoint.scala │ │ │ │ │ │ ├── ST_Equals.scala │ │ │ │ │ │ ├── ST_Intersects.scala │ │ │ │ │ │ ├── ST_Overlaps.scala │ │ │ │ │ │ ├── ST_Relate.scala │ │ │ │ │ │ ├── ST_RelateBool.scala │ │ │ │ │ │ ├── ST_Touches.scala │ │ │ │ │ │ └── ST_Within.scala │ │ │ │ │ ├── product │ │ │ │ │ │ └── VersionCore.scala │ │ │ │ │ └── transformations │ │ │ │ │ │ ├── ST_AntimeridianSafeGeom.scala │ │ │ │ │ │ ├── ST_Boundary.scala │ │ │ │ │ │ ├── ST_BufferPoint.scala │ │ │ │ │ │ ├── ST_Centroid.scala │ │ │ │ │ │ ├── ST_ClosestPoint.scala │ │ │ │ │ │ ├── ST_ConvexHull.scala │ │ │ │ │ │ ├── ST_Difference.scala │ │ │ │ │ │ ├── ST_ExteriorRing.scala │ │ │ │ │ │ ├── ST_InteriorRingN.scala │ │ │ │ │ │ ├── ST_Intersection.scala │ │ │ │ │ │ ├── ST_Simplify.scala │ │ │ │ │ │ ├── ST_SimplifyPreserveTopology.scala │ │ │ │ │ │ └── ST_Translate.scala │ │ │ │ │ └── spark │ │ │ │ │ ├── geotrellis │ │ │ │ │ ├── Z2Index.scala │ │ │ │ │ └── encoders │ │ │ │ │ │ └── StandardEncoders.scala │ │ │ │ │ ├── spatial │ │ │ │ │ ├── OptimizeSpatial.scala │ │ │ │ │ └── package.scala │ │ │ │ │ └── sql │ │ │ │ │ ├── SpatialFilterPushdownOptimizations.scala │ │ │ │ │ └── rules │ │ │ │ │ ├── STContainsRule.scala │ │ │ │ │ ├── STIntersectsRule.scala │ │ │ │ │ └── SpatialFilterPushdownRules.scala │ │ │ │ └── test │ │ │ │ ├── resources │ │ │ │ ├── polygons.csv │ │ │ │ └── polygons.snappy.parquet │ │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── carto │ │ │ │ ├── analyticstoolbox │ │ │ │ ├── HiveTestEnvironment.scala │ │ │ │ ├── InjectOptimizerTestEnvironment.scala │ │ │ │ ├── TestTables.scala │ │ │ │ └── modules │ │ │ │ │ ├── accessors │ │ │ │ │ ├── STAccessorsSpec.scala │ │ │ │ │ ├── ST_CoordDimTest.scala │ │ │ │ │ └── ST_XTest.scala │ │ │ │ │ ├── constructors │ │ │ │ │ ├── STConstructorsSpec.scala │ │ │ │ │ └── ST_MakePointTest.scala │ │ │ │ │ ├── index │ │ │ │ │ ├── STIndexSpec.scala │ │ │ │ │ └── ST_CrsFromTextTest.scala │ │ │ │ │ └── predicates │ │ │ │ │ └── STPredicatesSpec.scala │ │ │ │ └── hiveless │ │ │ │ └── spatial │ │ │ │ └── util │ │ │ │ └── TWKBWriterTest.scala │ │ │ ├── jts │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── carto │ │ │ │ │ └── hiveless │ │ │ │ │ └── spatial │ │ │ │ │ └── util │ │ │ │ │ ├── BoundsExtractor.java │ │ │ │ │ ├── BufferedTKWBOutputStream.java │ │ │ │ │ ├── TWKBHeader.java │ │ │ │ │ ├── TWKBOutputStream.java │ │ │ │ │ ├── TWKBReader.java │ │ │ │ │ ├── TWKBWriter.java │ │ │ │ │ └── Varint.java │ │ │ │ └── scala │ │ │ │ └── com │ │ │ │ └── carto │ │ │ │ └── hiveless │ │ │ │ └── spatial │ │ │ │ └── util │ │ │ │ ├── DeflateCompressor.scala │ │ │ │ └── TWKBUtils.scala │ │ │ └── project │ │ │ ├── build.properties │ │ │ └── plugins.sbt │ ├── modules │ │ ├── Makefile │ │ ├── doc │ │ │ ├── accessors │ │ │ │ ├── ST_COORDDIM.md │ │ │ │ ├── ST_DIMENSION.md │ │ │ │ ├── ST_ENVELOPE.md │ │ │ │ ├── ST_GEOMETRYN.md │ │ │ │ ├── ST_ISCLOSED.md │ │ │ │ ├── ST_ISCOLLECTION.md │ │ │ │ ├── ST_ISEMPTY.md │ │ │ │ ├── ST_ISGEOMFIELD.md │ │ │ │ ├── ST_ISRING.md │ │ │ │ ├── ST_ISSIMPLE.md │ │ │ │ ├── ST_ISVALID.md │ │ │ │ ├── ST_NUMGEOMETRIES.md │ │ │ │ ├── ST_NUMPOINTS.md │ │ │ │ ├── ST_POINTN.md │ │ │ │ ├── ST_X.md │ │ │ │ ├── ST_Y.md │ │ │ │ └── _INTRO.md │ │ │ ├── constructors │ │ │ │ ├── ST_MAKEBBOX.md │ │ │ │ ├── ST_MAKEBOX2D.md │ │ │ │ ├── ST_MAKELINE.mdx │ │ │ │ ├── ST_MAKEPOINT.md │ │ │ │ ├── ST_MAKEPOINTM.md │ │ │ │ ├── ST_MAKEPOLYGON.md │ │ │ │ ├── ST_POINT.md │ │ │ │ └── _INTRO.md │ │ │ ├── formatters │ │ │ │ ├── ST_ASBINARY.md │ │ │ │ ├── ST_ASGEOJSON.md │ │ │ │ ├── ST_ASLATLONTEXT.md │ │ │ │ ├── ST_ASTEXT.md │ │ │ │ ├── ST_ASTWKB.md │ │ │ │ ├── ST_BYTEARRAY.md │ │ │ │ ├── ST_CASTTOGEOMETRY.md │ │ │ │ ├── ST_CASTTOLINESTRING.md │ │ │ │ ├── ST_CASTTOPOINT.md │ │ │ │ ├── ST_CASTTOPOLYGON.md │ │ │ │ ├── ST_GEOHASH.md │ │ │ │ └── _INTRO.md │ │ │ ├── indexing │ │ │ │ ├── ST_CRSFROMTEXT.md │ │ │ │ ├── ST_EXTENTFROMGEOM.md │ │ │ │ ├── ST_EXTENTTOGEOM.md │ │ │ │ ├── ST_GEOMREPROJECT.md │ │ │ │ ├── ST_MAKEEXTENT.md │ │ │ │ ├── ST_PARTITIONCENTROID.mdx │ │ │ │ ├── ST_Z2LATLON.mdx │ │ │ │ └── _INTRO.md │ │ │ ├── measurements │ │ │ │ ├── ST_AREA.md │ │ │ │ ├── ST_DISTANCE.md │ │ │ │ ├── ST_DISTANCESPHERE.md │ │ │ │ ├── ST_LENGTH.md │ │ │ │ ├── ST_LENGTHSPHERE.md │ │ │ │ └── _INTRO.md │ │ │ ├── parsers │ │ │ │ ├── ST_BOX2DFROMGEOHASH.md │ │ │ │ ├── ST_GEOMFROMGEOHASH.md │ │ │ │ ├── ST_GEOMFROMGEOJSON.md │ │ │ │ ├── ST_GEOMFROMTEXT.md │ │ │ │ ├── ST_GEOMFROMTWKB.md │ │ │ │ ├── ST_GEOMFROMWKB.md │ │ │ │ ├── ST_GEOMFROMWKT.md │ │ │ │ ├── ST_LINEFROMTEXT.md │ │ │ │ ├── ST_MLINEFROMTEXT.md │ │ │ │ ├── ST_MPOINTFROMTEXT.md │ │ │ │ ├── ST_MPOLYFROMTEXT.md │ │ │ │ ├── ST_POINTFROMGEOHASH.md │ │ │ │ ├── ST_POINTFROMTEXT.md │ │ │ │ ├── ST_POINTFROMWKB.md │ │ │ │ ├── ST_POLYGONFROMTEXT.md │ │ │ │ └── _INTRO.md │ │ │ ├── predicates │ │ │ │ ├── ST_CONTAINS.md │ │ │ │ ├── ST_COVERS.md │ │ │ │ ├── ST_CROSSES.md │ │ │ │ ├── ST_DISJOINT.md │ │ │ │ ├── ST_EQUALS.md │ │ │ │ ├── ST_INTERSECTS.md │ │ │ │ ├── ST_OVERLAPS.md │ │ │ │ ├── ST_RELATE.md │ │ │ │ ├── ST_RELATEBOOL.md │ │ │ │ ├── ST_TOUCHES.md │ │ │ │ ├── ST_WITHIN.md │ │ │ │ └── _INTRO.md │ │ │ └── transformations │ │ │ │ ├── ST_ANTIMERIDIANSAFEGEOM.md │ │ │ │ ├── ST_BOUNDARY.md │ │ │ │ ├── ST_BUFFERPOINT.md │ │ │ │ ├── ST_CENTROID.md │ │ │ │ ├── ST_CLOSESTPOINT.md │ │ │ │ ├── ST_CONVEXHULL.md │ │ │ │ ├── ST_DIFFERENCE.md │ │ │ │ ├── ST_EXTERIORRING.md │ │ │ │ ├── ST_IDLSAFEGEOM.md │ │ │ │ ├── ST_INTERIORRINGN.md │ │ │ │ ├── ST_INTERSECTION.md │ │ │ │ ├── ST_SIMPLIFY.md │ │ │ │ ├── ST_SIMPLIFYPRESERVETOPOLOGY.md │ │ │ │ ├── ST_TRANSLATE.md │ │ │ │ └── _INTRO.md │ │ ├── sql │ │ │ ├── .sqlfluffignore │ │ │ ├── accessors │ │ │ │ ├── ST_COORDDIM.sql │ │ │ │ ├── ST_DIMENSION.sql │ │ │ │ ├── ST_ENVELOPE.sql │ │ │ │ ├── ST_GEOMETRYN.sql │ │ │ │ ├── ST_ISCLOSED.sql │ │ │ │ ├── ST_ISCOLLECTION.sql │ │ │ │ ├── ST_ISEMPTY.sql │ │ │ │ ├── ST_ISGEOMFIELD.sql │ │ │ │ ├── ST_ISRING.sql │ │ │ │ ├── ST_ISSIMPLE.sql │ │ │ │ ├── ST_ISVALID.sql │ │ │ │ ├── ST_NUMGEOMETRIES.sql │ │ │ │ ├── ST_NUMPOINTS.sql │ │ │ │ ├── ST_POINTN.sql │ │ │ │ ├── ST_X.sql │ │ │ │ └── ST_Y.sql │ │ │ ├── constructors │ │ │ │ ├── ST_MAKEBBOX.sql │ │ │ │ ├── ST_MAKEBOX2D.sql │ │ │ │ ├── ST_MAKELINE.sql │ │ │ │ ├── ST_MAKEPOINT.sql │ │ │ │ ├── ST_MAKEPOINTM.sql │ │ │ │ ├── ST_MAKEPOLYGON.sql │ │ │ │ └── ST_POINT.sql │ │ │ ├── formatters │ │ │ │ ├── ST_ASBINARY.sql │ │ │ │ ├── ST_ASGEOJSON.sql │ │ │ │ ├── ST_ASLATLONTEXT.sql │ │ │ │ ├── ST_ASTEXT.sql │ │ │ │ ├── ST_ASTWKB.sql │ │ │ │ ├── ST_BYTEARRAY.sql │ │ │ │ ├── ST_CASTTOGEOMETRY.sql │ │ │ │ ├── ST_CASTTOLINESTRING.sql │ │ │ │ ├── ST_CASTTOPOINT.sql │ │ │ │ ├── ST_CASTTOPOLYGON.sql │ │ │ │ └── ST_GEOHASH.sql │ │ │ ├── indexing │ │ │ │ ├── ST_CRSFROMTEXT.sql │ │ │ │ ├── ST_EXTENTFROMGEOM.sql │ │ │ │ ├── ST_EXTENTTOGEOM.sql │ │ │ │ ├── ST_GEOMREPROJECT.sql │ │ │ │ ├── ST_MAKEEXTENT.sql │ │ │ │ ├── ST_PARTITIONCENTROID.sql │ │ │ │ └── ST_Z2LATLON.sql │ │ │ ├── measurements │ │ │ │ ├── ST_AREA.sql │ │ │ │ ├── ST_DISTANCE.sql │ │ │ │ ├── ST_DISTANCESPHERE.sql │ │ │ │ ├── ST_LENGTH.sql │ │ │ │ └── ST_LENGTHSPHERE.sql │ │ │ ├── parsers │ │ │ │ ├── ST_BOX2DFROMGEOHASH.sql │ │ │ │ ├── ST_GEOMFROMGEOHASH.sql │ │ │ │ ├── ST_GEOMFROMGEOJSON.sql │ │ │ │ ├── ST_GEOMFROMTEXT.sql │ │ │ │ ├── ST_GEOMFROMTWKB.sql │ │ │ │ ├── ST_GEOMFROMWKB.sql │ │ │ │ ├── ST_GEOMFROMWKT.sql │ │ │ │ ├── ST_LINEFROMTEXT.sql │ │ │ │ ├── ST_MLINEFROMTEXT.sql │ │ │ │ ├── ST_MPOINTFROMTEXT.sql │ │ │ │ ├── ST_MPOLYFROMTEXT.sql │ │ │ │ ├── ST_POINTFROMGEOHASH.sql │ │ │ │ ├── ST_POINTFROMTEXT.sql │ │ │ │ ├── ST_POINTFROMWKB.sql │ │ │ │ └── ST_POLYGONFROMTEXT.sql │ │ │ ├── predicates │ │ │ │ ├── ST_CONTAINS.sql │ │ │ │ ├── ST_COVERS.sql │ │ │ │ ├── ST_CROSSES.sql │ │ │ │ ├── ST_DISJOINT.sql │ │ │ │ ├── ST_EQUALS.sql │ │ │ │ ├── ST_INTERSECTS.sql │ │ │ │ ├── ST_OVERLAPS.sql │ │ │ │ ├── ST_RELATE.sql │ │ │ │ ├── ST_RELATEBOOL.sql │ │ │ │ ├── ST_TOUCHES.sql │ │ │ │ └── ST_WITHIN.sql │ │ │ ├── product │ │ │ │ └── VERSION.sql │ │ │ └── transformations │ │ │ │ ├── ST_ANTIMERIDIANSAFEGEOM.sql │ │ │ │ ├── ST_BOUNDARY.sql │ │ │ │ ├── ST_BUFFERPOINT.sql │ │ │ │ ├── ST_CENTROID.sql │ │ │ │ ├── ST_CLOSESTPOINT.sql │ │ │ │ ├── ST_CONVEXHULL.sql │ │ │ │ ├── ST_DIFFERENCE.sql │ │ │ │ ├── ST_EXTERIORRING.sql │ │ │ │ ├── ST_IDLSAFEGEOM.sql │ │ │ │ ├── ST_INTERIORRINGN.sql │ │ │ │ ├── ST_INTERSECTION.sql │ │ │ │ ├── ST_SIMPLIFY.sql │ │ │ │ ├── ST_SIMPLIFYPRESERVETOPOLOGY.sql │ │ │ │ └── ST_TRANSLATE.sql │ │ └── test │ │ │ ├── accessors │ │ │ ├── __init__.py │ │ │ ├── test_ST_COORDDIM.py │ │ │ ├── test_ST_DIMENSION.py │ │ │ ├── test_ST_ENVELOPE.py │ │ │ ├── test_ST_GEOMETRYN.py │ │ │ ├── test_ST_ISCLOSED.py │ │ │ ├── test_ST_ISCOLLECTION.py │ │ │ ├── test_ST_ISEMPTY.py │ │ │ ├── test_ST_ISGEOMFIELD.py │ │ │ ├── test_ST_ISRING.py │ │ │ ├── test_ST_ISSIMPLE.py │ │ │ ├── test_ST_ISVALID.py │ │ │ ├── test_ST_NUMGEOMETRIES.py │ │ │ ├── test_ST_NUMPOINTS.py │ │ │ ├── test_ST_POINTN.py │ │ │ ├── test_ST_X.py │ │ │ └── test_ST_Y.py │ │ │ ├── constructors │ │ │ ├── __init__.py │ │ │ ├── test_ST_MAKEBBOX.py │ │ │ ├── test_ST_MAKEBOX2D.py │ │ │ ├── test_ST_MAKEPOINT.py │ │ │ ├── test_ST_MAKEPOINTM.py │ │ │ ├── test_ST_MAKEPOLYGON.py │ │ │ └── test_ST_POINT.py │ │ │ ├── formatters │ │ │ ├── __init__.py │ │ │ ├── test_ST_ASBINARY.py │ │ │ ├── test_ST_ASGEOJSON.py │ │ │ ├── test_ST_ASLATLONTEXT.py │ │ │ ├── test_ST_ASTEXT.py │ │ │ ├── test_ST_ASTWKB.py │ │ │ ├── test_ST_BYTEARRAY.py │ │ │ ├── test_ST_CASTTOGEOMETRY.py │ │ │ ├── test_ST_CASTTOLINESTRING.py │ │ │ ├── test_ST_CASTTOPOINT.py │ │ │ ├── test_ST_CASTTOPOLYGON.py │ │ │ └── test_ST_GEOHASH.py │ │ │ ├── indexing │ │ │ ├── __init__.py │ │ │ ├── test_ST_CRSFROMTEXT.py │ │ │ ├── test_ST_EXTENTFROMGEOM.py │ │ │ ├── test_ST_EXTENTTOGEOM.pyx │ │ │ ├── test_ST_GEOMREPROJECT.py │ │ │ ├── test_ST_MAKEEXTENT.py │ │ │ └── test_ST_Z2LATLON.py │ │ │ ├── measurements │ │ │ ├── __init__.py │ │ │ ├── test_ST_AREA.py │ │ │ ├── test_ST_DISTANCE.py │ │ │ ├── test_ST_DISTANCESPHERE.py │ │ │ ├── test_ST_LENGTH.py │ │ │ └── test_ST_LENGTHSPHERE.py │ │ │ ├── parsers │ │ │ ├── __init__.py │ │ │ ├── test_ST_BOX2DFROMGEOHASH.py │ │ │ ├── test_ST_GEOMFROMGEOHASH.py │ │ │ ├── test_ST_GEOMFROMGEOJSON.py │ │ │ ├── test_ST_GEOMFROMTEXT.py │ │ │ ├── test_ST_GEOMFROMTWKB.py │ │ │ ├── test_ST_GEOMFROMWKB.py │ │ │ ├── test_ST_GEOMFROMWKT.py │ │ │ ├── test_ST_LINEFROMTEXT.py │ │ │ ├── test_ST_MLINEFROMTEXT.py │ │ │ ├── test_ST_MPOINTFROMTEXT.py │ │ │ ├── test_ST_MPOLYFROMTEXT.py │ │ │ ├── test_ST_POINTFROMGEOHASH.py │ │ │ ├── test_ST_POINTFROMTEXT.py │ │ │ ├── test_ST_POINTFROMWKB.py │ │ │ └── test_ST_POLYGONFROMTEXT.py │ │ │ ├── predicates │ │ │ ├── __init__.py │ │ │ ├── test_ST_CONTAINS.py │ │ │ ├── test_ST_COVERS.py │ │ │ ├── test_ST_CROSSES.py │ │ │ ├── test_ST_DISJOINT.py │ │ │ ├── test_ST_EQUALS.py │ │ │ ├── test_ST_INTERSECTS.py │ │ │ ├── test_ST_OVERLAPS.py │ │ │ ├── test_ST_RELATE.py │ │ │ ├── test_ST_RELATEBOOL.py │ │ │ ├── test_ST_TOUCHES.py │ │ │ └── test_ST_WITHIN.py │ │ │ └── transformations │ │ │ ├── __init__.py │ │ │ ├── test_ST_ANTIMERIDIANSAFEGEOM.py │ │ │ ├── test_ST_BOUNDARY.py │ │ │ ├── test_ST_BUFFERPOINT.py │ │ │ ├── test_ST_CENTROID.py │ │ │ ├── test_ST_CLOSESTPOINT.py │ │ │ ├── test_ST_CONVEXHULL.pyx │ │ │ ├── test_ST_DIFFERENCE.py │ │ │ ├── test_ST_EXTERIORRING.py │ │ │ ├── test_ST_IDLSAFEGEOM.py │ │ │ ├── test_ST_INTERIORRINGN.py │ │ │ ├── test_ST_INTERSECTION.py │ │ │ ├── test_ST_SIMPLIFY.py │ │ │ ├── test_ST_SIMPLIFYPRESERVETOPOLOGY.py │ │ │ └── test_ST_TRANSLATE.py │ └── version ├── postgres │ ├── .env.template │ ├── CHANGELOG.md │ ├── CHANGELOG.old.md │ ├── Makefile │ ├── README.md │ ├── common │ │ ├── .sqlfluff │ │ ├── DROP_FUNCTIONS.sql │ │ ├── Makefile │ │ ├── VERSION.sql │ │ ├── analytics-toolbox-postgres.png │ │ ├── build_modules.js │ │ ├── list_functions.js │ │ ├── list_libraries.js │ │ ├── package.json │ │ ├── python3_requirements.txt │ │ ├── rollup.config.js │ │ ├── run_query.py │ │ ├── run_script.py │ │ ├── sql_lint.py │ │ └── test_utils │ │ │ └── __init__.py │ ├── libraries │ │ └── javascript │ │ │ ├── Makefile │ │ │ ├── libs │ │ │ └── h3.js │ │ │ ├── package.json │ │ │ ├── src │ │ │ ├── h3.js │ │ │ └── index.js │ │ │ └── test │ │ │ └── h3.test.js │ ├── modules │ │ ├── Makefile │ │ ├── doc │ │ │ ├── h3 │ │ │ │ ├── H3_BOUNDARY.md │ │ │ │ ├── H3_CENTER.md │ │ │ │ ├── H3_COMPACT.md │ │ │ │ ├── H3_DISTANCE.md │ │ │ │ ├── H3_FROMGEOGPOINT.md │ │ │ │ ├── H3_FROMLONGLAT.md │ │ │ │ ├── H3_HEXRING.md │ │ │ │ ├── H3_INT_TOSTRING.md │ │ │ │ ├── H3_ISPENTAGON.md │ │ │ │ ├── H3_ISVALID.md │ │ │ │ ├── H3_KRING.md │ │ │ │ ├── H3_KRING_DISTANCES.md │ │ │ │ ├── H3_POLYFILL.md │ │ │ │ ├── H3_STRING_TOINT.md │ │ │ │ ├── H3_TOCHILDREN.md │ │ │ │ ├── H3_TOPARENT.md │ │ │ │ ├── H3_UNCOMPACT.md │ │ │ │ ├── _INTRO.md │ │ │ │ └── images │ │ │ │ │ ├── H3_POLYFILL_MODE_center.png │ │ │ │ │ ├── H3_POLYFILL_MODE_contains.png │ │ │ │ │ └── H3_POLYFILL_MODE_intersects.png │ │ │ └── quadbin │ │ │ │ ├── QUADBIN_BBOX.md │ │ │ │ ├── QUADBIN_BOUNDARY.md │ │ │ │ ├── QUADBIN_CENTER.md │ │ │ │ ├── QUADBIN_DISTANCE.md │ │ │ │ ├── QUADBIN_FROMGEOGPOINT.md │ │ │ │ ├── QUADBIN_FROMLONGLAT.md │ │ │ │ ├── QUADBIN_FROMQUADKEY.md │ │ │ │ ├── QUADBIN_FROMZXY.md │ │ │ │ ├── QUADBIN_ISVALID.md │ │ │ │ ├── QUADBIN_KRING.md │ │ │ │ ├── QUADBIN_KRING_DISTANCES.md │ │ │ │ ├── QUADBIN_POLYFILL.md │ │ │ │ ├── QUADBIN_RESOLUTION.md │ │ │ │ ├── QUADBIN_SIBLING.md │ │ │ │ ├── QUADBIN_TOCHILDREN.md │ │ │ │ ├── QUADBIN_TOPARENT.md │ │ │ │ ├── QUADBIN_TOQUADKEY.md │ │ │ │ ├── QUADBIN_TOZXY.md │ │ │ │ ├── _INTRO.md │ │ │ │ └── images │ │ │ │ ├── QUADBIN_POLYFILL_MODE_center.png │ │ │ │ ├── QUADBIN_POLYFILL_MODE_contains.png │ │ │ │ └── QUADBIN_POLYFILL_MODE_intersects.png │ │ ├── sql │ │ │ ├── h3 │ │ │ │ ├── H3_BOUNDARY.sql │ │ │ │ ├── H3_CENTER.sql │ │ │ │ ├── H3_COMPACT.sql │ │ │ │ ├── H3_DISTANCE.sql │ │ │ │ ├── H3_FROMGEOGPOINT.sql │ │ │ │ ├── H3_FROMLONGLAT.sql │ │ │ │ ├── H3_HEXRING.sql │ │ │ │ ├── H3_INT_TOSTRING.sql │ │ │ │ ├── H3_ISPENTAGON.sql │ │ │ │ ├── H3_ISVALID.sql │ │ │ │ ├── H3_KRING.sql │ │ │ │ ├── H3_KRING_DISTANCES.sql │ │ │ │ ├── H3_POLYFILL.sql │ │ │ │ ├── H3_RESOLUTION.sql │ │ │ │ ├── H3_STRING_TOINT.sql │ │ │ │ ├── H3_TOCHILDREN.sql │ │ │ │ ├── H3_TOPARENT.sql │ │ │ │ └── H3_UNCOMPACT.sql │ │ │ └── quadbin │ │ │ │ ├── QUADBIN_BBOX.sql │ │ │ │ ├── QUADBIN_BOUNDARY.sql │ │ │ │ ├── QUADBIN_CENTER.sql │ │ │ │ ├── QUADBIN_DISTANCE.sql │ │ │ │ ├── QUADBIN_FROMGEOGPOINT.sql │ │ │ │ ├── QUADBIN_FROMLONGLAT.sql │ │ │ │ ├── QUADBIN_FROMQUADKEY.sql │ │ │ │ ├── QUADBIN_FROMZXY.sql │ │ │ │ ├── QUADBIN_ISVALID.sql │ │ │ │ ├── QUADBIN_KRING.sql │ │ │ │ ├── QUADBIN_KRING_DISTANCES.sql │ │ │ │ ├── QUADBIN_POLYFILL.sql │ │ │ │ ├── QUADBIN_RESOLUTION.sql │ │ │ │ ├── QUADBIN_SIBLING.sql │ │ │ │ ├── QUADBIN_TOCHILDREN.sql │ │ │ │ ├── QUADBIN_TOPARENT.sql │ │ │ │ ├── QUADBIN_TOQUADKEY.sql │ │ │ │ ├── QUADBIN_TOZXY.sql │ │ │ │ ├── __CARTO_ERROR.sql │ │ │ │ ├── __QUADBIN_FROMQUADINT.sql │ │ │ │ ├── __QUADBIN_INT_TOSTRING.sql │ │ │ │ └── __QUADBIN_STRING_TOINT.sql │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── h3 │ │ │ ├── __init__.py │ │ │ ├── test_H3_BOUNDARY.py │ │ │ ├── test_H3_CENTER.py │ │ │ ├── test_H3_COMPACT.py │ │ │ ├── test_H3_DISTANCE.py │ │ │ ├── test_H3_FROMGEOGPOINT.py │ │ │ ├── test_H3_FROMLONGLAT.py │ │ │ ├── test_H3_HEXRING.py │ │ │ ├── test_H3_INT_TOSTRING.py │ │ │ ├── test_H3_ISPENTAGON.py │ │ │ ├── test_H3_ISVALID.py │ │ │ ├── test_H3_KRING.py │ │ │ ├── test_H3_KRING_DISTANCES.py │ │ │ ├── test_H3_POLYFILL.py │ │ │ ├── test_H3_RESOLUTION.py │ │ │ ├── test_H3_STRING_TOINT.py │ │ │ ├── test_H3_TOCHILDREN.py │ │ │ └── test_H3_TOPARENT.py │ │ │ └── quadbin │ │ │ ├── __init__.py │ │ │ ├── test_QUADBIN_BBOX.py │ │ │ ├── test_QUADBIN_BOUNDARY.py │ │ │ ├── test_QUADBIN_CENTER.py │ │ │ ├── test_QUADBIN_DISTANCE.py │ │ │ ├── test_QUADBIN_FROMGEOGPOINT.py │ │ │ ├── test_QUADBIN_FROMLONGLAT.py │ │ │ ├── test_QUADBIN_FROMQUADKEY.py │ │ │ ├── test_QUADBIN_FROMZXY.py │ │ │ ├── test_QUADBIN_ISVALID.py │ │ │ ├── test_QUADBIN_KRING.py │ │ │ ├── test_QUADBIN_KRING_DISTANCES.py │ │ │ ├── test_QUADBIN_POLYFILL.py │ │ │ ├── test_QUADBIN_RESOLUTION.py │ │ │ ├── test_QUADBIN_SIBLING.py │ │ │ ├── test_QUADBIN_TOCHILDREN.py │ │ │ ├── test_QUADBIN_TOPARENT.py │ │ │ ├── test_QUADBIN_TOQUADKEY.py │ │ │ ├── test_QUADBIN_TOZXY.py │ │ │ ├── test___QUADBIN_FROMQUADINT.py │ │ │ ├── test___QUADBIN_INT_TOSTRING.py │ │ │ └── test___QUADBIN_STRING_TOINT.py │ └── version ├── redshift │ ├── .env.template │ ├── CHANGELOG.md │ ├── CHANGELOG.old.md │ ├── Makefile │ ├── README.md │ ├── common │ │ ├── .sqlfluff │ │ ├── DROP_FUNCTIONS.sql │ │ ├── Makefile │ │ ├── VERSION.sql │ │ ├── analytics-toolbox-redshift.png │ │ ├── build_modules.js │ │ ├── list_functions.js │ │ ├── package.json │ │ ├── python2_requirements.txt │ │ ├── python3_requirements.txt │ │ ├── run_query.py │ │ ├── run_script.py │ │ ├── serialize_libraries.sh │ │ ├── sql_lint.py │ │ └── test_utils │ │ │ └── __init__.py │ ├── libraries │ │ └── python │ │ │ ├── Makefile │ │ │ ├── lib │ │ │ ├── __init__.py │ │ │ ├── _version.py │ │ │ ├── clustering │ │ │ │ ├── __init__.py │ │ │ │ └── kmeans.py │ │ │ ├── constructors │ │ │ │ ├── __init__.py │ │ │ │ ├── bezier_spline │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── helper.py │ │ │ │ │ └── spline.py │ │ │ │ └── ellipse │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── helper.py │ │ │ │ │ ├── measurement.py │ │ │ │ │ ├── meta.py │ │ │ │ │ └── transformation.py │ │ │ ├── placekey │ │ │ │ └── __init__.py │ │ │ ├── processing │ │ │ │ ├── __init__.py │ │ │ │ ├── helper.py │ │ │ │ └── voronoi │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── helper.py │ │ │ ├── quadbin │ │ │ │ └── __init__.py │ │ │ ├── quadkey │ │ │ │ ├── __init__.py │ │ │ │ └── tilecover │ │ │ │ │ └── __init__.py │ │ │ ├── random │ │ │ │ ├── __init__.py │ │ │ │ ├── helper.py │ │ │ │ └── measurement.py │ │ │ ├── s2 │ │ │ │ └── __init__.py │ │ │ └── transformations │ │ │ │ ├── __init__.py │ │ │ │ ├── center_lib │ │ │ │ ├── __init__.py │ │ │ │ ├── center_mean.py │ │ │ │ ├── center_median.py │ │ │ │ ├── centroid.py │ │ │ │ └── helper.py │ │ │ │ ├── destination │ │ │ │ ├── __init__.py │ │ │ │ └── helper.py │ │ │ │ ├── great_circle │ │ │ │ └── __init__.py │ │ │ │ └── helper.py │ │ │ ├── requirements.txt │ │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ └── ellipse_out.txt │ │ │ ├── test_constructors.py │ │ │ ├── test_init.py │ │ │ ├── test_processing.py │ │ │ ├── test_quadkey.py │ │ │ └── test_transformations.py │ ├── modules │ │ ├── Makefile │ │ ├── __init__.py │ │ ├── doc │ │ │ ├── clustering │ │ │ │ ├── CREATE_CLUSTERKMEANS.md │ │ │ │ ├── ST_CLUSTERKMEANS.md │ │ │ │ └── _INTRO.md │ │ │ ├── constructors │ │ │ │ ├── ST_BEZIERSPLINE.md │ │ │ │ ├── ST_MAKEELLIPSE.md │ │ │ │ ├── ST_MAKEENVELOPE.md │ │ │ │ ├── ST_TILEENVELOPE.md │ │ │ │ └── _INTRO.md │ │ │ ├── placekey │ │ │ │ ├── PLACEKEY_ASH3.md │ │ │ │ ├── PLACEKEY_FROMH3.md │ │ │ │ ├── PLACEKEY_ISVALID.md │ │ │ │ └── _INTRO.md │ │ │ ├── processing │ │ │ │ ├── ST_DELAUNAYLINES.md │ │ │ │ ├── ST_DELAUNAYPOLYGONS.md │ │ │ │ ├── ST_POLYGONIZE.md │ │ │ │ ├── ST_VORONOILINES.md │ │ │ │ ├── ST_VORONOIPOLYGONS.md │ │ │ │ └── _INTRO.md │ │ │ ├── quadbin │ │ │ │ ├── QUADBIN_BBOX.md │ │ │ │ ├── QUADBIN_BOUNDARY.md │ │ │ │ ├── QUADBIN_CENTER.md │ │ │ │ ├── QUADBIN_DISTANCE.md │ │ │ │ ├── QUADBIN_FROMGEOGPOINT.md │ │ │ │ ├── QUADBIN_FROMLONGLAT.md │ │ │ │ ├── QUADBIN_FROMQUADKEY.md │ │ │ │ ├── QUADBIN_FROMZXY.md │ │ │ │ ├── QUADBIN_ISVALID.md │ │ │ │ ├── QUADBIN_KRING.md │ │ │ │ ├── QUADBIN_KRING_DISTANCES.md │ │ │ │ ├── QUADBIN_POLYFILL.md │ │ │ │ ├── QUADBIN_RESOLUTION.md │ │ │ │ ├── QUADBIN_SIBLING.md │ │ │ │ ├── QUADBIN_TOCHILDREN.md │ │ │ │ ├── QUADBIN_TOPARENT.md │ │ │ │ ├── QUADBIN_TOQUADKEY.md │ │ │ │ ├── QUADBIN_TOZXY.md │ │ │ │ └── _INTRO.md │ │ │ ├── random │ │ │ │ ├── ST_GENERATEPOINTS.md │ │ │ │ └── _INTRO.md │ │ │ ├── s2 │ │ │ │ ├── S2_BOUNDARY.md │ │ │ │ ├── S2_FROMGEOGPOINT.md │ │ │ │ ├── S2_FROMHILBERTQUADKEY.md │ │ │ │ ├── S2_FROMLONGLAT.md │ │ │ │ ├── S2_FROMTOKEN.md │ │ │ │ ├── S2_FROMUINT64REPR.md │ │ │ │ ├── S2_POLYFILL_BBOX.md │ │ │ │ ├── S2_RESOLUTION.md │ │ │ │ ├── S2_TOCHILDREN.md │ │ │ │ ├── S2_TOHILBERTQUADKEY.md │ │ │ │ ├── S2_TOPARENT.md │ │ │ │ ├── S2_TOTOKEN.md │ │ │ │ ├── S2_TOUINT64REPR.md │ │ │ │ └── _INTRO.md │ │ │ └── transformations │ │ │ │ ├── ST_CENTERMEAN.md │ │ │ │ ├── ST_CENTERMEDIAN.md │ │ │ │ ├── ST_CENTEROFMASS.md │ │ │ │ ├── ST_CENTROID.md │ │ │ │ ├── ST_DESTINATION.md │ │ │ │ ├── ST_GREATCIRCLE.md │ │ │ │ └── _INTRO.md │ │ ├── sql │ │ │ ├── clustering │ │ │ │ ├── CREATE_CLUSTERKMEANS.sql │ │ │ │ └── ST_CLUSTERKMEANS.sql │ │ │ ├── constructors │ │ │ │ ├── ST_BEZIERSPLINE.sql │ │ │ │ ├── ST_MAKEELLIPSE.sql │ │ │ │ ├── ST_MAKEENVELOPE.sql │ │ │ │ └── ST_TILEENVELOPE.sql │ │ │ ├── placekey │ │ │ │ ├── PLACEKEY_ASH3.sql │ │ │ │ ├── PLACEKEY_FROMH3.sql │ │ │ │ └── PLACEKEY_ISVALID.sql │ │ │ ├── processing │ │ │ │ ├── ST_DELAUNAYLINES.sql │ │ │ │ ├── ST_DELAUNAYPOLYGONS.sql │ │ │ │ ├── ST_POLYGONIZE.sql │ │ │ │ ├── ST_VORONOILINES.sql │ │ │ │ ├── ST_VORONOIPOLYGONS.sql │ │ │ │ ├── __DELAUNAYGENERIC.sql │ │ │ │ └── __VORONOIGENERIC.sql │ │ │ ├── quadbin │ │ │ │ ├── QUADBIN_BBOX.sql │ │ │ │ ├── QUADBIN_BOUNDARY.sql │ │ │ │ ├── QUADBIN_CENTER.sql │ │ │ │ ├── QUADBIN_DISTANCE.sql │ │ │ │ ├── QUADBIN_FROMGEOGPOINT.sql │ │ │ │ ├── QUADBIN_FROMLONGLAT.sql │ │ │ │ ├── QUADBIN_FROMQUADKEY.sql │ │ │ │ ├── QUADBIN_FROMZXY.sql │ │ │ │ ├── QUADBIN_ISVALID.sql │ │ │ │ ├── QUADBIN_KRING.sql │ │ │ │ ├── QUADBIN_KRING_DISTANCES.sql │ │ │ │ ├── QUADBIN_POLYFILL.sql │ │ │ │ ├── QUADBIN_RESOLUTION.sql │ │ │ │ ├── QUADBIN_SIBLING.sql │ │ │ │ ├── QUADBIN_TOCHILDREN.sql │ │ │ │ ├── QUADBIN_TOPARENT.sql │ │ │ │ ├── QUADBIN_TOQUADKEY.sql │ │ │ │ ├── QUADBIN_TOZXY.sql │ │ │ │ ├── __QUADBIN_FROMQUADINT.sql │ │ │ │ ├── __QUADBIN_INT_TOSTRING.sql │ │ │ │ ├── __QUADBIN_STRING_TOINT.sql │ │ │ │ ├── __QUADBIN_TOZXY_X.sql │ │ │ │ └── __QUADBIN_TOZXY_Y.sql │ │ │ ├── quadkey │ │ │ │ ├── QUADINT_BBOX.sql │ │ │ │ ├── QUADINT_BOUNDARY.sql │ │ │ │ ├── QUADINT_FROMGEOGPOINT.sql │ │ │ │ ├── QUADINT_FROMLONGLAT.sql │ │ │ │ ├── QUADINT_FROMQUADKEY.sql │ │ │ │ ├── QUADINT_FROMZXY.sql │ │ │ │ ├── QUADINT_KRING.sql │ │ │ │ ├── QUADINT_KRING_DISTANCES.sql │ │ │ │ ├── QUADINT_POLYFILL.sql │ │ │ │ ├── QUADINT_SIBLING.sql │ │ │ │ ├── QUADINT_TOCHILDREN.sql │ │ │ │ ├── QUADINT_TOPARENT.sql │ │ │ │ ├── QUADINT_TOQUADKEY.sql │ │ │ │ ├── QUADINT_TOZXY.sql │ │ │ │ ├── __QUADINT_RESOLUTION.sql │ │ │ │ └── __QUADKEY_BBOX.sql │ │ │ ├── random │ │ │ │ └── ST_GENERATEPOINTS.sql │ │ │ ├── s2 │ │ │ │ ├── S2_BOUNDARY.sql │ │ │ │ ├── S2_FROMGEOGPOINT.sql │ │ │ │ ├── S2_FROMHILBERTQUADKEY.sql │ │ │ │ ├── S2_FROMLONGLAT.sql │ │ │ │ ├── S2_FROMTOKEN.sql │ │ │ │ ├── S2_FROMUINT64REPR.sql │ │ │ │ ├── S2_POLYFILL_BBOX.sql │ │ │ │ ├── S2_RESOLUTION.sql │ │ │ │ ├── S2_TOCHILDREN.sql │ │ │ │ ├── S2_TOHILBERTQUADKEY.sql │ │ │ │ ├── S2_TOPARENT.sql │ │ │ │ ├── S2_TOTOKEN.sql │ │ │ │ └── S2_TOUINT64REPR.sql │ │ │ └── transformations │ │ │ │ ├── ST_CENTERMEAN.sql │ │ │ │ ├── ST_CENTERMEDIAN.sql │ │ │ │ ├── ST_CENTEROFMASS.sql │ │ │ │ ├── ST_CENTROID.sql │ │ │ │ ├── ST_DESTINATION.sql │ │ │ │ └── ST_GREATCIRCLE.sql │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── clustering │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ │ ├── st_clusterkmeans_in.txt │ │ │ │ └── st_clusterkmeans_out.txt │ │ │ ├── test_CREATE_CLUSTERKMEANS.py │ │ │ └── test_ST_CLUSTERKMEANS.py │ │ │ ├── constructors │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ │ ├── st_bezierspline_in.txt │ │ │ │ ├── st_bezierspline_out.txt │ │ │ │ ├── st_makeellipse_out.txt │ │ │ │ └── st_tileenvelope_out.txt │ │ │ ├── test_ST_BEZIERSPLINE.py │ │ │ ├── test_ST_MAKEELLIPSE.py │ │ │ ├── test_ST_MAKEENVELOPE.py │ │ │ └── test_ST_TILEENVELOPE.py │ │ │ ├── placekey │ │ │ ├── __init__.py │ │ │ ├── test_PLACEKEY_ASH3.py │ │ │ ├── test_PLACEKEY_FROMH3.py │ │ │ └── test_PLACEKEY_ISVALID.py │ │ │ ├── processing │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ │ ├── st_delaunay_in.txt │ │ │ │ ├── st_delaunay_lines_out.txt │ │ │ │ ├── st_delaunay_poly_out.txt │ │ │ │ ├── st_polygonize_in.txt │ │ │ │ ├── st_polygonize_out.txt │ │ │ │ ├── st_voronoi_in.txt │ │ │ │ ├── st_voronoi_lines_out.txt │ │ │ │ └── st_voronoi_poly_out.txt │ │ │ ├── test_ST_DELAUNAYLINES.py │ │ │ ├── test_ST_DELAUNAYPOLYGONS.py │ │ │ ├── test_ST_POLYGONIZE.py │ │ │ ├── test_ST_VORONOILINES.py │ │ │ └── test_ST_VORONOIPOLYGONS.py │ │ │ ├── quadbin │ │ │ ├── __init__.py │ │ │ ├── test_QUADBIN_BBOX.py │ │ │ ├── test_QUADBIN_BOUNDARY.py │ │ │ ├── test_QUADBIN_CENTER.py │ │ │ ├── test_QUADBIN_DISTANCE.py │ │ │ ├── test_QUADBIN_FROMGEOGPOINT.py │ │ │ ├── test_QUADBIN_FROMLONGLAT.py │ │ │ ├── test_QUADBIN_FROMQUADKEY.py │ │ │ ├── test_QUADBIN_FROMZXY.py │ │ │ ├── test_QUADBIN_ISVALID.py │ │ │ ├── test_QUADBIN_KRING.py │ │ │ ├── test_QUADBIN_KRING_DISTANCES.py │ │ │ ├── test_QUADBIN_POLYFILL.py │ │ │ ├── test_QUADBIN_RESOLUTION.py │ │ │ ├── test_QUADBIN_SIBLING.py │ │ │ ├── test_QUADBIN_TOCHILDREN.py │ │ │ ├── test_QUADBIN_TOPARENT.py │ │ │ ├── test_QUADBIN_TOQUADKEY.py │ │ │ ├── test_QUADBIN_TOZXY.py │ │ │ ├── test___QUADBIN_FROMQUADINT.py │ │ │ ├── test___QUADBIN_INT_TOSTRING.py │ │ │ └── test___QUADBIN_STRING_TOINT.py │ │ │ ├── quadkey │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ │ ├── quadint_boundary_out.txt │ │ │ │ ├── quadint_fromlonglat_out.txt │ │ │ │ ├── quadint_polyfill_in.txt │ │ │ │ ├── quadint_polyfill_out.txt │ │ │ │ ├── quadint_tochildren_out.txt │ │ │ │ └── quadint_tozxy_out.txt │ │ │ ├── test_QUADINT_BBOX.py │ │ │ ├── test_QUADINT_BOUNDARY.py │ │ │ ├── test_QUADINT_FROMLONGLAT.py │ │ │ ├── test_QUADINT_KRING.py │ │ │ ├── test_QUADINT_KRING_DISTANCES.py │ │ │ ├── test_QUADINT_POLYFILL.py │ │ │ ├── test_QUADINT_TOCHILDREN.py │ │ │ ├── test_QUADINT_TOPARENT.py │ │ │ └── test_QUADINT_TOZXY.py │ │ │ ├── random │ │ │ ├── __init__.py │ │ │ └── test_ST_GENERATEPOINTS.py │ │ │ ├── s2 │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ │ ├── s2_boundary_out.txt │ │ │ │ ├── s2_fromgeogpoint_out.txt │ │ │ │ ├── s2_fromhilbertquadkey_out.txt │ │ │ │ ├── s2_fromlonglat_out.txt │ │ │ │ ├── s2_fromtoken_out.txt │ │ │ │ ├── s2_fromuint64repr_out.txt │ │ │ │ ├── s2_polyfill_bbox_out.txt │ │ │ │ ├── s2_tochildren_out.txt │ │ │ │ ├── s2_tohilbertquadkey_out.txt │ │ │ │ ├── s2_toparent_out.txt │ │ │ │ ├── s2_totoken_out.txt │ │ │ │ └── s2_touint64repr_out.txt │ │ │ ├── test_S2_BOUNDARY.py │ │ │ ├── test_S2_FROMGEOGPOINT.py │ │ │ ├── test_S2_FROMHILBERTQUADKEY.py │ │ │ ├── test_S2_FROMLONGLAT.py │ │ │ ├── test_S2_FROMTOKEN.py │ │ │ ├── test_S2_FROMUINT64REPR.py │ │ │ ├── test_S2_POLYFILL_BBOX.py │ │ │ ├── test_S2_RESOLUTION.py │ │ │ ├── test_S2_TOCHILDREN.py │ │ │ ├── test_S2_TOHILBERTQUADKEY.py │ │ │ ├── test_S2_TOPARENT.py │ │ │ ├── test_S2_TOTOKEN.py │ │ │ └── test_S2_TOUINT64REPR.py │ │ │ └── transformations │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ ├── st_centermean_in.txt │ │ │ ├── st_centermedian_in.txt │ │ │ ├── st_centerofmass_in.txt │ │ │ ├── st_centroid_in.txt │ │ │ ├── st_greatcircle_out.txt │ │ │ └── st_greatcircle_table_out.txt │ │ │ ├── test_ST_CENTERMEAN.py │ │ │ ├── test_ST_CENTERMEDIAN.py │ │ │ ├── test_ST_CENTEROFMASS.py │ │ │ ├── test_ST_CENTROID.py │ │ │ ├── test_ST_DESTINATION.py │ │ │ └── test_ST_GREATCIRCLE.py │ └── version └── snowflake │ ├── .env.template │ ├── CHANGELOG.md │ ├── CHANGELOG.old.md │ ├── Makefile │ ├── README.md │ ├── common │ ├── .sqlfluff │ ├── DROP_FUNCTIONS.sql │ ├── Makefile │ ├── VERSION.sql │ ├── analytics-toolbox-snowflake.png │ ├── build_modules.js │ ├── build_native_app_setup_script.js │ ├── build_share.js │ ├── list_functions.js │ ├── list_libraries.js │ ├── native-app-utils.js │ ├── package.json │ ├── python3_requirements.txt │ ├── rollup.config.js │ ├── run-query.js │ ├── run-script.js │ ├── sql_lint.py │ ├── test-extend.js │ └── test-utils.js │ ├── libraries │ └── javascript │ │ ├── Makefile │ │ ├── libs │ │ ├── accessors.js │ │ ├── clustering.js │ │ ├── constructors.js │ │ ├── h3_boundary.js │ │ ├── h3_compact.js │ │ ├── h3_fromlonglat.js │ │ ├── h3_hexring.js │ │ ├── h3_ispentagon.js │ │ ├── h3_isvalid.js │ │ ├── h3_kring_distances.js │ │ ├── h3_polyfill.js │ │ ├── h3_uncompact.js │ │ ├── measurements.js │ │ ├── placekey.js │ │ ├── processing.js │ │ ├── quadbin.js │ │ ├── quadkey.js │ │ ├── random.js │ │ ├── s2.js │ │ ├── transformations_along.js │ │ ├── transformations_buffer.js │ │ ├── transformations_center.js │ │ ├── transformations_concave.js │ │ ├── transformations_convex.js │ │ ├── transformations_destination.js │ │ └── transformations_greatcircle.js │ │ ├── package.json │ │ ├── src │ │ ├── h3 │ │ │ ├── README.md │ │ │ ├── h3_boundary │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ │ ├── h3_compact │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ │ ├── h3_hexring │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ │ ├── h3_ispentagon │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ │ ├── h3_isvalid │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ │ ├── h3_kring_distances │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ │ ├── h3_polyfill │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ │ └── h3_uncompact │ │ │ │ ├── h3core_custom.js │ │ │ │ └── libh3_custom.js │ │ ├── index.js │ │ ├── quadbin.js │ │ ├── quadkey.js │ │ ├── random.js │ │ └── s2.js │ │ └── test │ │ ├── accessors.test.js │ │ ├── clustering.test.js │ │ ├── constructors.test.js │ │ ├── h3.test.js │ │ ├── measurements.test.js │ │ ├── placekey.test.js │ │ ├── processing.test.js │ │ ├── quadbin.test.js │ │ ├── quadkey.test.js │ │ ├── random.test.js │ │ ├── s2.test.js │ │ ├── transformations.test.js │ │ └── transformations_buffer.test.js │ ├── modules │ ├── Makefile │ ├── doc │ │ ├── accessors │ │ │ ├── ST_ENVELOPE_ARR.md │ │ │ └── _INTRO.md │ │ ├── clustering │ │ │ ├── ST_CLUSTERKMEANS.md │ │ │ └── _INTRO.md │ │ ├── constructors │ │ │ ├── ST_BEZIERSPLINE.md │ │ │ ├── ST_MAKEELLIPSE.md │ │ │ ├── ST_MAKEENVELOPE.md │ │ │ ├── ST_TILEENVELOPE.md │ │ │ └── _INTRO.md │ │ ├── h3 │ │ │ ├── H3_BOUNDARY.md │ │ │ ├── H3_CENTER.md │ │ │ ├── H3_COMPACT.md │ │ │ ├── H3_DISTANCE.md │ │ │ ├── H3_FROMGEOGPOINT.md │ │ │ ├── H3_FROMLONGLAT.md │ │ │ ├── H3_HEXRING.md │ │ │ ├── H3_INT_TOSTRING.md │ │ │ ├── H3_ISPENTAGON.md │ │ │ ├── H3_ISVALID.md │ │ │ ├── H3_KRING.md │ │ │ ├── H3_KRING_DISTANCES.md │ │ │ ├── H3_POLYFILL.md │ │ │ ├── H3_POLYFILL_TABLE.md │ │ │ ├── H3_RESOLUTION.md │ │ │ ├── H3_STRING_TOINT.md │ │ │ ├── H3_TOCHILDREN.md │ │ │ ├── H3_TOPARENT.md │ │ │ ├── H3_UNCOMPACT.md │ │ │ ├── _INTRO.md │ │ │ └── images │ │ │ │ ├── H3_POLYFILL_MODE_center.png │ │ │ │ ├── H3_POLYFILL_MODE_contains.png │ │ │ │ └── H3_POLYFILL_MODE_intersects.png │ │ ├── measurements │ │ │ ├── ST_MINKOWSKIDISTANCE.md │ │ │ └── _INTRO.md │ │ ├── placekey │ │ │ ├── PLACEKEY_FROMH3.md │ │ │ ├── PLACEKEY_ISVALID.md │ │ │ ├── PLACEKEY_TOH3.md │ │ │ └── _INTRO.md │ │ ├── processing │ │ │ ├── ST_DELAUNAYLINES.md │ │ │ ├── ST_DELAUNAYPOLYGONS.md │ │ │ ├── ST_POLYGONIZE.md │ │ │ ├── ST_VORONOILINES.md │ │ │ ├── ST_VORONOIPOLYGONS.md │ │ │ └── _INTRO.md │ │ ├── quadbin │ │ │ ├── QUADBIN_BBOX.md │ │ │ ├── QUADBIN_BOUNDARY.md │ │ │ ├── QUADBIN_CENTER.md │ │ │ ├── QUADBIN_DISTANCE.md │ │ │ ├── QUADBIN_FROMGEOGPOINT.md │ │ │ ├── QUADBIN_FROMLONGLAT.md │ │ │ ├── QUADBIN_FROMQUADKEY.md │ │ │ ├── QUADBIN_FROMZXY.md │ │ │ ├── QUADBIN_ISVALID.md │ │ │ ├── QUADBIN_KRING.md │ │ │ ├── QUADBIN_KRING_DISTANCES.md │ │ │ ├── QUADBIN_POLYFILL.md │ │ │ ├── QUADBIN_RESOLUTION.md │ │ │ ├── QUADBIN_SIBLING.md │ │ │ ├── QUADBIN_TOCHILDREN.md │ │ │ ├── QUADBIN_TOPARENT.md │ │ │ ├── QUADBIN_TOQUADKEY.md │ │ │ ├── QUADBIN_TOZXY.md │ │ │ └── _INTRO.md │ │ ├── random │ │ │ ├── ST_GENERATEPOINTS.md │ │ │ └── _INTRO.md │ │ ├── s2 │ │ │ ├── S2_BOUNDARY.md │ │ │ ├── S2_FROMGEOGPOINT.md │ │ │ ├── S2_FROMHILBERTQUADKEY.md │ │ │ ├── S2_FROMLONGLAT.md │ │ │ ├── S2_TOHILBERTQUADKEY.md │ │ │ └── _INTRO.md │ │ └── transformations │ │ │ ├── ST_BUFFER.md │ │ │ ├── ST_CENTERMEAN.md │ │ │ ├── ST_CENTERMEDIAN.md │ │ │ ├── ST_CENTEROFMASS.md │ │ │ ├── ST_CONCAVEHULL.md │ │ │ ├── ST_CONVEXHULL.md │ │ │ ├── ST_DESTINATION.md │ │ │ ├── ST_GREATCIRCLE.md │ │ │ ├── ST_LINE_INTERPOLATE_POINT.md │ │ │ ├── ST_POINTONSURFACE.md │ │ │ └── _INTRO.md │ ├── sql │ │ ├── accessors │ │ │ └── ST_ENVELOPE_ARR.sql │ │ ├── clustering │ │ │ └── ST_CLUSTERKMEANS.sql │ │ ├── constructors │ │ │ ├── ST_BEZIERSPLINE.sql │ │ │ ├── ST_MAKEELLIPSE.sql │ │ │ ├── ST_MAKEENVELOPE.sql │ │ │ └── ST_TILEENVELOPE.sql │ │ ├── h3 │ │ │ ├── H3_BOUNDARY.sql │ │ │ ├── H3_CENTER.sql │ │ │ ├── H3_COMPACT.sql │ │ │ ├── H3_DISTANCE.sql │ │ │ ├── H3_FROMGEOGPOINT.sql │ │ │ ├── H3_FROMLONGLAT.sql │ │ │ ├── H3_HEXRING.sql │ │ │ ├── H3_INT_TOSTRING.sql │ │ │ ├── H3_ISPENTAGON.sql │ │ │ ├── H3_ISVALID.sql │ │ │ ├── H3_KRING.sql │ │ │ ├── H3_KRING_DISTANCES.sql │ │ │ ├── H3_POLYFILL.sql │ │ │ ├── H3_POLYFILL_TABLE.sql │ │ │ ├── H3_RESOLUTION.sql │ │ │ ├── H3_STRING_TOINT.sql │ │ │ ├── H3_TOCHILDREN.sql │ │ │ ├── H3_TOPARENT.sql │ │ │ └── H3_UNCOMPACT.sql │ │ ├── measurements │ │ │ └── ST_MINKOWSKIDISTANCE.sql │ │ ├── placekey │ │ │ ├── PLACEKEY_FROMH3.sql │ │ │ ├── PLACEKEY_ISVALID.sql │ │ │ └── PLACEKEY_TOH3.sql │ │ ├── processing │ │ │ ├── ST_DELAUNAYLINES.sql │ │ │ ├── ST_DELAUNAYPOLYGONS.sql │ │ │ ├── ST_POLYGONIZE.sql │ │ │ ├── ST_VORONOILINES.sql │ │ │ ├── ST_VORONOIPOLYGONS.sql │ │ │ ├── _DELAUNAYHELPER.sql │ │ │ └── _VORONOIHELPER.sql │ │ ├── quadbin │ │ │ ├── QUADBIN_BBOX.sql │ │ │ ├── QUADBIN_BOUNDARY.sql │ │ │ ├── QUADBIN_CENTER.sql │ │ │ ├── QUADBIN_DISTANCE.sql │ │ │ ├── QUADBIN_FROMGEOGPOINT.sql │ │ │ ├── QUADBIN_FROMLONGLAT.sql │ │ │ ├── QUADBIN_FROMQUADKEY.sql │ │ │ ├── QUADBIN_FROMZXY.sql │ │ │ ├── QUADBIN_ISVALID.sql │ │ │ ├── QUADBIN_KRING.sql │ │ │ ├── QUADBIN_KRING_DISTANCES.sql │ │ │ ├── QUADBIN_POLYFILL.sql │ │ │ ├── QUADBIN_RESOLUTION.sql │ │ │ ├── QUADBIN_SIBLING.sql │ │ │ ├── QUADBIN_TOCHILDREN.sql │ │ │ ├── QUADBIN_TOPARENT.sql │ │ │ ├── QUADBIN_TOQUADKEY.sql │ │ │ ├── QUADBIN_TOZXY.sql │ │ │ ├── _GENERATE_RANGE.sql │ │ │ ├── _QUADBIN_FROMQUADINT.sql │ │ │ ├── _QUADBIN_INT_TOSTRING.sql │ │ │ ├── _QUADBIN_KRING.sql │ │ │ ├── _QUADBIN_SIBLING.sql │ │ │ ├── _QUADBIN_STRING_TOINT.sql │ │ │ ├── _QUADBIN_TOZXY.sql │ │ │ └── _ZXY_QUADBIN_SIBLING.sql │ │ ├── quadkey │ │ │ ├── QUADINT_BBOX.sql │ │ │ ├── QUADINT_BOUNDARY.sql │ │ │ ├── QUADINT_FROMGEOGPOINT.sql │ │ │ ├── QUADINT_FROMLONGLAT.sql │ │ │ ├── QUADINT_FROMQUADKEY.sql │ │ │ ├── QUADINT_FROMZXY.sql │ │ │ ├── QUADINT_KRING.sql │ │ │ ├── QUADINT_KRING_DISTANCES.sql │ │ │ ├── QUADINT_POLYFILL.sql │ │ │ ├── QUADINT_SIBLING.sql │ │ │ ├── QUADINT_TOCHILDREN.sql │ │ │ ├── QUADINT_TOPARENT.sql │ │ │ ├── QUADINT_TOQUADKEY.sql │ │ │ └── QUADINT_TOZXY.sql │ │ ├── random │ │ │ └── ST_GENERATEPOINTS.sql │ │ ├── s2 │ │ │ ├── S2_BOUNDARY.sql │ │ │ ├── S2_FROMGEOGPOINT.sql │ │ │ ├── S2_FROMHILBERTQUADKEY.sql │ │ │ ├── S2_FROMLONGLAT.sql │ │ │ └── S2_TOHILBERTQUADKEY.sql │ │ ├── transformations │ │ │ ├── ST_BUFFER.sql │ │ │ ├── ST_CENTERMEAN.sql │ │ │ ├── ST_CENTERMEDIAN.sql │ │ │ ├── ST_CENTEROFMASS.sql │ │ │ ├── ST_CONCAVEHULL.sql │ │ │ ├── ST_CONVEXHULL.sql │ │ │ ├── ST_DESTINATION.sql │ │ │ ├── ST_GREATCIRCLE.sql │ │ │ ├── ST_LINE_INTERPOLATE_POINT.sql │ │ │ └── ST_POINTONSURFACE.sql │ │ └── utils │ │ │ └── _CARTO_ARRAY_ERROR.sql │ └── test │ │ ├── accessors │ │ ├── ST_ENVELOPE_ARR.test.js │ │ └── fixtures │ │ │ ├── st_envelope_arr_featureCollection_in.js │ │ │ ├── st_envelope_arr_featureCollection_out.js │ │ │ ├── st_envelope_arr_points_in.js │ │ │ └── st_envelope_arr_points_out.js │ │ ├── clustering │ │ ├── ST_CLUSTERKMEANS.test.js │ │ └── fixtures │ │ │ ├── st_clusterkmeans_out_points1.js │ │ │ ├── st_clusterkmeans_out_points2.js │ │ │ └── st_clusterkmeans_out_points3.js │ │ ├── constructors │ │ ├── ST_BEZIERSPLINE.test.js │ │ ├── ST_MAKEELLIPSE.test.js │ │ ├── ST_MAKEENVELOPE.test.js │ │ └── ST_TILEENVELOPE.test.js │ │ ├── h3 │ │ ├── H3_BOUNDARY.test.js │ │ ├── H3_CENTER.test.js │ │ ├── H3_COMPACT.test.js │ │ ├── H3_DISTANCE.test.js │ │ ├── H3_FROMGEOGPOINT.test.js │ │ ├── H3_FROMLONGLAT.test.js │ │ ├── H3_HEXRING.test.js │ │ ├── H3_INT_TOSTRING.test.js │ │ ├── H3_ISPENTAGON.test.js │ │ ├── H3_ISVALID.test.js │ │ ├── H3_KRING.test.js │ │ ├── H3_KRING_DISTANCES.test.js │ │ ├── H3_POLYFILL.test.js │ │ ├── H3_RESOLUTION.test.js │ │ ├── H3_STRING_TOINT.test.js │ │ ├── H3_TOCHILDREN.test.js │ │ └── H3_TOPARENT.test.js │ │ ├── measurements │ │ └── ST_MINKOWSKIDISTANCE.test.js │ │ ├── placekey │ │ ├── PLACEKEY_FROMH3.test.js │ │ ├── PLACEKEY_ISVALID.test.js │ │ └── PLACEKEY_TOH3.test.js │ │ ├── processing │ │ ├── ST_DELAUNAYLINES.test.js │ │ ├── ST_DELAUNAYPOLYGONS.test.js │ │ ├── ST_POLYGONIZE.test.js │ │ ├── ST_VORONOILINES.test.js │ │ ├── ST_VORONOIPOLYGONS.test.js │ │ └── fixtures │ │ │ ├── st_delaunay_in.js │ │ │ ├── st_delaunay_out.js │ │ │ ├── st_polygonize_in.js │ │ │ ├── st_polygonize_out.js │ │ │ ├── st_voronoi_in.js │ │ │ └── st_voronoi_out.js │ │ ├── quadbin │ │ ├── QUADBIN_BBOX.test.js │ │ ├── QUADBIN_BOUNDARY.test.js │ │ ├── QUADBIN_CENTER.test.js │ │ ├── QUADBIN_DISTANCE.test.js │ │ ├── QUADBIN_FROMGEOGPOINT.test.js │ │ ├── QUADBIN_FROMLONGLAT.test.js │ │ ├── QUADBIN_FROMQUADKEY.test.js │ │ ├── QUADBIN_FROMZXY.test.js │ │ ├── QUADBIN_ISVALID.test.js │ │ ├── QUADBIN_KRING.test.js │ │ ├── QUADBIN_KRING_DISTANCES.test.js │ │ ├── QUADBIN_POLYFILL.test.js │ │ ├── QUADBIN_RESOLUTION.test.js │ │ ├── QUADBIN_SIBLING.test.js │ │ ├── QUADBIN_TOCHILDREN.test.js │ │ ├── QUADBIN_TOPARENT.test.js │ │ ├── QUADBIN_TOQUADKEY.test.js │ │ ├── QUADBIN_TOZXY.test.js │ │ ├── _QUADBIN_INT_TOSTRING.test.js │ │ ├── _QUADBIN_STRING_TOINT.test.js │ │ ├── fixtures │ │ │ └── coords_sample.sql │ │ └── global │ │ │ ├── setup.js │ │ │ └── teardown.js │ │ ├── quadkey │ │ ├── QUADINT.test.js │ │ ├── QUADINT_BBOX.test.js │ │ ├── QUADINT_BOUNDARY.test.js │ │ ├── QUADINT_FROMLONGLAT.test.js │ │ ├── QUADINT_KRING.test.js │ │ ├── QUADINT_KRING_DISTANCES.test.js │ │ ├── QUADINT_POLYFILL.test.js │ │ ├── QUADINT_TOCHILDREN.test.js │ │ ├── QUADINT_TOPARENT.test.js │ │ └── fixtures │ │ │ ├── quadint_fromlonglat_out.js │ │ │ └── quadint_polyfill_out.js │ │ ├── random │ │ └── ST_GENERATEPOINTS.test.js │ │ ├── s2 │ │ ├── S2_BOUNDARY.test.js │ │ ├── S2_FROMGEOGPOINT.test.js │ │ ├── S2_FROMHILBERTQUADKEY.test.js │ │ ├── S2_FROMLONGLAT.test.js │ │ └── S2_TOHILBERTQUADKEY.test.js │ │ └── transformations │ │ ├── ST_BUFFER.test.js │ │ ├── ST_CENTERMEAN.test.js │ │ ├── ST_CENTERMEDIAN.test.js │ │ ├── ST_CENTEROFMASS.test.js │ │ ├── ST_CONCAVEHULL.test.js │ │ ├── ST_CONVEXHULL.test.js │ │ ├── ST_DESTINATION.test.js │ │ ├── ST_GREATCIRCLE.test.js │ │ ├── ST_LINE_INTERPOLATE_POINT.test.js │ │ ├── ST_POINTONSURFACE.test.js │ │ └── fixtures │ │ ├── st_buffer_in.js │ │ ├── st_buffer_out.js │ │ ├── st_concavehull_duplicates_in.js │ │ ├── st_concavehull_duplicates_out.js │ │ ├── st_concavehull_fiji_in.js │ │ ├── st_concavehull_fiji_out.js │ │ ├── st_concavehull_hole_in.js │ │ ├── st_concavehull_hole_out.js │ │ ├── st_concavehull_in.js │ │ ├── st_concavehull_out.js │ │ ├── st_concavehull_point_in.js │ │ └── st_concavehull_point_out.js │ ├── native_app │ ├── ADDITIONAL_TABLES.sql │ ├── Makefile │ ├── README.md │ ├── SETUP_SCRIPT.sql │ ├── get_modules_sql_from_stage.py │ └── manifest.yml │ └── version ├── common └── assets │ ├── h3_polyfill_mode_center.png │ ├── h3_polyfill_mode_contains.png │ ├── h3_polyfill_mode_intersects.png │ ├── input_polygon.png │ ├── quadbin_polyfill_mode_center.png │ ├── quadbin_polyfill_mode_contains.png │ └── quadbin_polyfill_mode_intersects.png └── jest.config.js /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | /.github/ @CartoDB/infrastructure-team -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | build/ 3 | *venv*/ 4 | node_modules/ 5 | __pycache__/ 6 | **/common/yarn.lock 7 | .pytest_cache/ 8 | .ipynb_checkpoints/ 9 | .tmp/ 10 | .vscode/ 11 | 12 | 13 | *.log 14 | *.pyc 15 | snowsql_rt.* 16 | .DS_STORE 17 | .env* 18 | !.env.template 19 | dev_env.sh 20 | yarn.lock 21 | package-lock.json 22 | MANIFEST 23 | *.ipynb 24 | .pgpass 25 | .~lock.* 26 | 27 | # IntelliJ 28 | .idea/ 29 | 30 | # Vim 31 | *.swp 32 | -------------------------------------------------------------------------------- /clouds/bigquery/common/VERSION.sql: -------------------------------------------------------------------------------- 1 | 2 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.@@BQ_VERSION_FUNCTION@@` 3 | () 4 | RETURNS STRING 5 | AS ( 6 | '@@BQ_PACKAGE_VERSION@@' 7 | ); -------------------------------------------------------------------------------- /clouds/bigquery/common/analytics-toolbox-bigquery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/common/analytics-toolbox-bigquery.png -------------------------------------------------------------------------------- /clouds/bigquery/common/python3_requirements.txt: -------------------------------------------------------------------------------- 1 | flake8==3.9.2 2 | flake8-quotes==3.2.0 3 | flake8-docstrings==1.6.0 4 | pep8-naming==0.12.1 5 | brunette==0.2.0 6 | sqlfluff==1.3.1 7 | -------------------------------------------------------------------------------- /clouds/bigquery/common/run-query.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const { BigQuery } = require('@google-cloud/bigquery'); 4 | 5 | const BQ_PROJECT = process.env.BQ_PROJECT; 6 | 7 | const client = new BigQuery({ projectId: `${BQ_PROJECT}` }); 8 | 9 | function runQuery (query) { 10 | client.query(query, { timeoutMs : 120000 }); 11 | } 12 | 13 | const query = process.argv[2]; 14 | 15 | runQuery(query); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/libs/accessors.js: -------------------------------------------------------------------------------- 1 | import { featureCollection, feature, envelope } from '@turf/turf'; 2 | 3 | export default { 4 | featureCollection, 5 | feature, 6 | envelope 7 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/libs/constructors.js: -------------------------------------------------------------------------------- 1 | import { bezierSpline, ellipse } from '@turf/turf'; 2 | 3 | export default { 4 | bezierSpline, 5 | ellipse 6 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/libs/measurements.js: -------------------------------------------------------------------------------- 1 | import { angle, bearing, featureCollection, feature, distanceWeight } from '@turf/turf'; 2 | 3 | export default { 4 | angle, 5 | bearing, 6 | featureCollection, 7 | feature, 8 | distanceWeight 9 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/libs/placekey.js: -------------------------------------------------------------------------------- 1 | import { placekeyIsValid, h3ToPlacekey, placekeyToH3 } from '@placekey/placekey/dist/es6/index'; 2 | 3 | export default { 4 | placekeyIsValid, 5 | h3ToPlacekey, 6 | placekeyToH3 7 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/libs/processing.js: -------------------------------------------------------------------------------- 1 | import { featureCollection, feature, voronoi, polygonToLine } from '@turf/turf'; 2 | 3 | export default { 4 | featureCollection, 5 | feature, 6 | voronoi, 7 | polygonToLine 8 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/libs/random.js: -------------------------------------------------------------------------------- 1 | import { 2 | generateRandomPointsInPolygon 3 | 4 | } from '../src/random'; 5 | 6 | export default { 7 | generateRandomPointsInPolygon 8 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/libs/s2.js: -------------------------------------------------------------------------------- 1 | import { S2 } from '../src/s2'; 2 | 3 | export default { 4 | keyToId: S2.keyToId, 5 | idToKey: S2.idToKey, 6 | latLngToKey: S2.latLngToKey, 7 | FromHilbertQuadKey: S2.S2Cell.FromHilbertQuadKey, 8 | idToLatLng: S2.idToLatLng 9 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/src/index.js: -------------------------------------------------------------------------------- 1 | import { version } from '../package.json'; 2 | 3 | export default { 4 | version 5 | }; -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/accessors.test.js: -------------------------------------------------------------------------------- 1 | const accessorsLib = require('../build/accessors'); 2 | 3 | test('accessors library defined', () => { 4 | expect(accessorsLib.featureCollection).toBeDefined(); 5 | expect(accessorsLib.feature).toBeDefined(); 6 | expect(accessorsLib.envelope).toBeDefined(); 7 | }); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/clustering.test.js: -------------------------------------------------------------------------------- 1 | const clusteringLib = require('../build/clustering'); 2 | 3 | test('clustering library defined', () => { 4 | expect(clusteringLib.featureCollection).toBeDefined(); 5 | expect(clusteringLib.feature).toBeDefined(); 6 | expect(clusteringLib.clustersKmeans).toBeDefined(); 7 | expect(clusteringLib.prioritizeDistinctSort).toBeDefined(); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/constructors.test.js: -------------------------------------------------------------------------------- 1 | const constructorsLib = require('../build/constructors'); 2 | 3 | test('constructors library defined', () => { 4 | expect(constructorsLib.bezierSpline).toBeDefined(); 5 | expect(constructorsLib.ellipse).toBeDefined(); 6 | }); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/measurements.test.js: -------------------------------------------------------------------------------- 1 | const measurementsLib = require('../build/measurements'); 2 | 3 | test('measurements library defined', () => { 4 | expect(measurementsLib.angle).toBeDefined(); 5 | expect(measurementsLib.bearing).toBeDefined(); 6 | expect(measurementsLib.featureCollection).toBeDefined(); 7 | expect(measurementsLib.feature).toBeDefined(); 8 | expect(measurementsLib.distanceWeight).toBeDefined(); 9 | }); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/placekey.test.js: -------------------------------------------------------------------------------- 1 | const placekeyLib = require('../build/placekey'); 2 | 3 | test('placekey library defined', () => { 4 | expect(placekeyLib.placekeyIsValid).toBeDefined(); 5 | expect(placekeyLib.h3ToPlacekey).toBeDefined(); 6 | expect(placekeyLib.placekeyToH3).toBeDefined(); 7 | }); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/processing.test.js: -------------------------------------------------------------------------------- 1 | const processingLib = require('../build/processing'); 2 | 3 | test('processing library defined', () => { 4 | expect(processingLib.featureCollection).toBeDefined(); 5 | expect(processingLib.feature).toBeDefined(); 6 | expect(processingLib.voronoi).toBeDefined(); 7 | expect(processingLib.polygonToLine).toBeDefined(); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/random.test.js: -------------------------------------------------------------------------------- 1 | const randomLib = require('../build/random'); 2 | 3 | test('random library defined', () => { 4 | expect(randomLib.generateRandomPointsInPolygon).toBeDefined(); 5 | }); -------------------------------------------------------------------------------- /clouds/bigquery/libraries/javascript/test/s2.test.js: -------------------------------------------------------------------------------- 1 | const s2Lib = require('../build/s2'); 2 | 3 | test('s2 library defined', () => { 4 | expect(s2Lib.keyToId).toBeDefined(); 5 | expect(s2Lib.idToKey).toBeDefined(); 6 | expect(s2Lib.latLngToKey).toBeDefined(); 7 | expect(s2Lib.FromHilbertQuadKey).toBeDefined(); 8 | expect(s2Lib.idToLatLng).toBeDefined(); 9 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/accessors/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # accessors 5 | 6 | This module contains functions that provide information about internal geometries. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/clustering/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # clustering 5 | 6 | This module contains functions that perform clustering on geographies. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/constructors/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # constructors 5 | 6 | This module contains functions that create new geographies from coordinates or already existing geographies. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/geohash/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # geohash 5 | 6 | [Geohash](https://en.wikipedia.org/wiki/Geohash) is a public domain spatial index. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/h3/H3_INT_TOSTRING.md: -------------------------------------------------------------------------------- 1 | ## H3_INT_TOSTRING 2 | 3 | ```sql:signature 4 | H3_INT_TOSTRING(index) 5 | ``` 6 | 7 | **Description** 8 | 9 | Converts the integer representation of the H3 index to the string representation. 10 | 11 | * `index`: `INT64` The H3 cell index. 12 | 13 | **Return type** 14 | 15 | `STRING` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.H3_INT_TOSTRING(595478781590765567); 21 | -- 84390cbffffffff 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/h3/H3_RESOLUTION.md: -------------------------------------------------------------------------------- 1 | ## H3_RESOLUTION 2 | 3 | ```sql:signature 4 | H3_RESOLUTION(index) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the H3 cell resolution as an integer. It will return `null` on error (invalid input). 10 | 11 | * `index`: `STRING` The H3 cell index. 12 | 13 | **Return type** 14 | 15 | `INT64` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.H3_RESOLUTION('84390cbffffffff'); 21 | -- 4 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/h3/H3_STRING_TOINT.md: -------------------------------------------------------------------------------- 1 | ## H3_STRING_TOINT 2 | 3 | ```sql:signature 4 | H3_STRING_TOINT(index) 5 | ``` 6 | 7 | **Description** 8 | 9 | Converts the string representation of the H3 index to the integer representation. 10 | 11 | * `index`: `STRING` The H3 cell index. 12 | 13 | **Return type** 14 | 15 | `INT64` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.H3_STRING_TOINT('84390cbffffffff'); 21 | -- 595478781590765567 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/h3/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # h3 5 | 6 | [H3](https://eng.uber.com/h3/) is Uber’s Hexagonal Hierarchical Spatial Index. Full documentation of the project can be found at [h3geo](https://h3geo.org/docs). You can also learn more about H3 in the [Spatial Indexes section](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery/key-concepts/spatial-indexes#h3) of this documentation. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/h3/images/H3_POLYFILL_MODE_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/modules/doc/h3/images/H3_POLYFILL_MODE_center.png -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/h3/images/H3_POLYFILL_MODE_contains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/modules/doc/h3/images/H3_POLYFILL_MODE_contains.png -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/h3/images/H3_POLYFILL_MODE_intersects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/modules/doc/h3/images/H3_POLYFILL_MODE_intersects.png -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/measurements/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # measurements 5 | 6 | This module contains functions that compute measurements of distance, area and angles. There are also functions to compute geometry values determined by measurements. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/placekey/PLACEKEY_FROMH3.md: -------------------------------------------------------------------------------- 1 | ## PLACEKEY_FROMH3 2 | 3 | ```sql:signature 4 | PLACEKEY_FROMH3(h3index) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the placekey equivalent of the given H3 index. 10 | 11 | * `h3index`: `STRING` H3 identifier. 12 | 13 | **Return type** 14 | 15 | `STRING` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.PLACEKEY_FROMH3('84390cbffffffff'); 21 | -- @7dd-dc3-52k 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/placekey/PLACEKEY_TOH3.md: -------------------------------------------------------------------------------- 1 | ## PLACEKEY_TOH3 2 | 3 | ```sql:signature 4 | PLACEKEY_TOH3(placekey) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the H3 index equivalent of the given placekey. 10 | 11 | * `placekey`: `STRING` Placekey identifier. 12 | 13 | **Return type** 14 | 15 | `STRING` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.PLACEKEY_TOH3('@7dd-dc3-52k'); 21 | -- 8a390cbffffffff 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/processing/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # processing 5 | 6 | This module contains functions that computes new geographies by processing existing geographies. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/QUADBIN_FROMQUADKEY.md: -------------------------------------------------------------------------------- 1 | ## QUADBIN_FROMQUADKEY 2 | 3 | ```sql:signature 4 | QUADBIN_FROMQUADKEY(quadkey) 5 | ``` 6 | 7 | **Description** 8 | 9 | Compute a quadbin index from a quadkey. 10 | 11 | * `quadkey`: `STRING` Quadkey representation of the index. 12 | 13 | **Return type** 14 | 15 | `INT64` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.QUADBIN_FROMQUADKEY('0331110121'); 21 | -- 5234261499580514303 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/QUADBIN_RESOLUTION.md: -------------------------------------------------------------------------------- 1 | ## QUADBIN_RESOLUTION 2 | 3 | ```sql:signature 4 | QUADBIN_RESOLUTION(quadbin) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the resolution of the input Quadbin. 10 | 11 | * `quadbin`: `INT64` Quadbin from which to get the resolution. 12 | 13 | **Return type** 14 | 15 | `INT64` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.QUADBIN_RESOLUTION(5207251884775047167); 21 | -- 4 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/QUADBIN_TOQUADKEY.md: -------------------------------------------------------------------------------- 1 | ## QUADBIN_TOQUADKEY 2 | 3 | ```sql:signature 4 | QUADBIN_TOQUADKEY(quadbin) 5 | ``` 6 | 7 | **Description** 8 | 9 | Compute a quadkey from a quadbin index. 10 | 11 | * `quadbin`: `INT64` Quadbin index. 12 | 13 | **Return type** 14 | 15 | `STRING` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.QUADBIN_TOQUADKEY(5234261499580514303); 21 | -- '0331110121' 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # quadbin 5 | 6 | You can learn more about Quadbins in the [Spatial Indexes section](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery/key-concepts/spatial-indexes#quadbin) of the documentation. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_center.png -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_contains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_contains.png -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_intersects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_intersects.png -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_polygon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/bigquery/modules/doc/quadbin/images/QUADBIN_POLYFILL_MODE_polygon.png -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/random/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # random 5 | 6 | This module contains functions to generate random geographies. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/s2/S2_FROMTOKEN.md: -------------------------------------------------------------------------------- 1 | ## S2_FROMTOKEN 2 | 3 | ```sql:signature 4 | S2_FROMTOKEN(token) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the conversion of a token into a S2 cell ID. 10 | 11 | * `token`: `STRING` S2 cell hexified ID. 12 | 13 | **Return type** 14 | 15 | `INT64` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.S2_FROMTOKEN('0d42300000000000'); 21 | -- 955378847514099712 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/s2/S2_FROMUINT64REPR.md: -------------------------------------------------------------------------------- 1 | ## S2_FROMUINT64REPR 2 | 3 | ```sql:signature 4 | S2_FROMUINT64REPR(uid) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the cell ID from a UINT64 representation. 10 | 11 | * `uid`: `STRING` UINT64 representation of a S2 cell ID. 12 | 13 | **Return type** 14 | 15 | `INT64` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.S2_FROMUINT64REPR('9926595690882924544'); 21 | -- -8520148382826627072 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/s2/S2_RESOLUTION.md: -------------------------------------------------------------------------------- 1 | ## S2_RESOLUTION 2 | 3 | ```sql:signature 4 | S2_RESOLUTION(index) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the S2 cell resolution as an integer. 10 | 11 | * `index`: `STRING` The S2 cell index. 12 | 13 | **Return type** 14 | 15 | `INT64` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.S2_RESOLUTION(955378847514099712); 21 | -- 9 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/s2/S2_TOTOKEN.md: -------------------------------------------------------------------------------- 1 | ## S2_TOTOKEN 2 | 3 | ```sql:signature 4 | S2_TOTOKEN(id) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the conversion of a S2 cell ID into a token (S2 cell hexified ID). 10 | 11 | * `id`: `INT64` S2 cell ID. 12 | 13 | **Return type** 14 | 15 | `STRING` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.S2_TOTOKEN(955378847514099712); 21 | -- 0d42300000000000 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/s2/S2_TOUINT64REPR.md: -------------------------------------------------------------------------------- 1 | ## S2_TOUINT64REPR 2 | 3 | ```sql:signature 4 | S2_TOUINT64REPR(id) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the UINT64 representation of a cell ID. 10 | 11 | * `id`: `INT64` S2 cell ID. 12 | 13 | **Return type** 14 | 15 | `STRING` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.S2_TOUINT64REPR(-8520148382826627072); 21 | -- 9926595690882924544 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/s2/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # s2 5 | 6 | Our S2 module is based on a port of the official S2 geometry library created by Google. For more information about S2 check the [library's website](http://s2geometry.io/) or the [Spatial Indexes section](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery/key-concepts/spatial-indexes#s2) of this documentation. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/doc/transformations/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # transformations 5 | 6 | This module contains functions that compute geometric constructions, or alter geometry size or shape. 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/.sqlfluffignore: -------------------------------------------------------------------------------- 1 | GEOHASH_BOUNDARY.sql 2 | _H3_COVERINGCELLIDS.sql 3 | QUADINT_TOZXY.sql -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/constructors/ST_TILEENVELOPE.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.ST_TILEENVELOPE` 6 | (zoomLevel INT64, xTile INT64, yTile INT64) 7 | RETURNS GEOGRAPHY 8 | AS ( 9 | `@@BQ_DATASET@@.QUADBIN_BOUNDARY`( 10 | `@@BQ_DATASET@@.QUADBIN_FROMZXY`( 11 | zoomlevel, xtile, ytile 12 | ) 13 | ) 14 | ); 15 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/h3/H3_INT_TOSTRING.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.H3_INT_TOSTRING` 2 | ( 3 | h3 INT64 4 | ) 5 | RETURNS STRING 6 | AS ( 7 | FORMAT('%x', h3) 8 | ); 9 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/h3/H3_ISVALID.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.H3_ISVALID` 6 | (index STRING) 7 | RETURNS BOOLEAN 8 | DETERMINISTIC 9 | LANGUAGE js 10 | OPTIONS ( 11 | library = ["@@BQ_LIBRARY_H3_BUCKET@@"] 12 | ) 13 | AS """ 14 | if (!index) { 15 | return false; 16 | } 17 | return h3Lib.h3IsValid(index); 18 | """; 19 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/h3/H3_STRING_TOINT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.H3_STRING_TOINT` 2 | (h3 STRING) 3 | RETURNS INT64 4 | AS ( 5 | CAST(CONCAT('0x', h3) AS INT64) 6 | ); 7 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/placekey/PLACEKEY_ISVALID.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.PLACEKEY_ISVALID` 6 | (placekey STRING) 7 | RETURNS BOOLEAN 8 | DETERMINISTIC 9 | LANGUAGE js 10 | OPTIONS ( 11 | library = ["@@BQ_LIBRARY_PLACEKEY_BUCKET@@"] 12 | ) 13 | AS """ 14 | return placekeyLib.placekeyIsValid(placekey); 15 | """; 16 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/processing/ST_DELAUNAYLINES.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.ST_DELAUNAYLINES` 6 | (points ARRAY) 7 | RETURNS ARRAY 8 | AS (( 9 | SELECT `@@BQ_DATASET@@.__DELAUNAYGENERIC`(points) 10 | )); 11 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/processing/ST_POLYGONIZE.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.ST_POLYGONIZE` 6 | (lines ARRAY) 7 | RETURNS ARRAY 8 | AS (( 9 | SELECT ARRAY(SELECT ST_MAKEPOLYGON(line) FROM UNNEST(lines) AS line) 10 | )); 11 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/processing/ST_VORONOILINES.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.ST_VORONOILINES` 6 | (points ARRAY, bbox ARRAY) 7 | RETURNS ARRAY 8 | AS ( 9 | `@@BQ_DATASET@@.__VORONOIGENERIC`( 10 | points, bbox, 'lines' 11 | ) 12 | ); 13 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/processing/ST_VORONOIPOLYGONS.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.ST_VORONOIPOLYGONS` 6 | (points ARRAY, bbox ARRAY) 7 | RETURNS ARRAY 8 | AS ( 9 | `@@BQ_DATASET@@.__VORONOIGENERIC`( 10 | points, bbox, 'poly' 11 | ) 12 | ); 13 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadbin/QUADBIN_RESOLUTION.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2022 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.QUADBIN_RESOLUTION` 6 | (quadbin INT64) 7 | RETURNS INT64 8 | AS (( 9 | SELECT (quadbin >> 52) & 0x1F 10 | )); 11 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadbin/__QUADBIN_INT_TOSTRING.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2022 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.__QUADBIN_INT_TOSTRING` 6 | (quadbin INT64) 7 | RETURNS STRING 8 | AS (( 9 | SELECT FORMAT('%x', quadbin) 10 | )); 11 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadbin/__QUADBIN_STRING_TOINT.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2022 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.__QUADBIN_STRING_TOINT` 6 | (quadbin STRING) 7 | RETURNS INT64 8 | AS (( 9 | SELECT CAST(CONCAT('0x', quadbin) AS INT64) 10 | )); 11 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadkey/QUADINT_FROMGEOGPOINT.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.QUADINT_FROMGEOGPOINT` 6 | (point GEOGRAPHY, resolution INT64) 7 | RETURNS INT64 8 | AS ( 9 | `@@BQ_DATASET@@.QUADINT_FROMLONGLAT`( 10 | ST_X(point), ST_Y(point), resolution 11 | ) 12 | ); 13 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadkey/QUADINT_FROMQUADKEY.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.QUADINT_FROMQUADKEY` 6 | (quadkey STRING) 7 | RETURNS INT64 8 | DETERMINISTIC 9 | LANGUAGE js 10 | OPTIONS ( 11 | library = ["@@BQ_LIBRARY_QUADKEY_BUCKET@@"] 12 | ) 13 | AS """ 14 | return quadkeyLib.quadintFromQuadkey(quadkey).toString(); 15 | """; 16 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadkey/QUADINT_FROMZXY.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.QUADINT_FROMZXY` 6 | (z INT64, x INT64, y INT64) 7 | RETURNS INT64 8 | AS (( 9 | (z & 0x1F) | (x << 5) | (y << (z + 5)) 10 | )); 11 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadkey/QUADINT_RESOLUTION.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.QUADINT_RESOLUTION` 6 | (quadint INT64) 7 | RETURNS INT64 8 | AS ( 9 | `@@BQ_DATASET@@.QUADINT_TOZXY`( 10 | quadint 11 | ).z 12 | ); 13 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/quadkey/QUADINT_TOZXY.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.QUADINT_TOZXY` 6 | (quadint INT64) 7 | RETURNS STRUCT 8 | AS ( 9 | STRUCT ( 10 | quadint & 0x1F AS z, 11 | (quadint >> 5) & ((1 << (quadint & 0x1F)) - 1) AS x, 12 | (quadint >> (5 + (quadint & 0x1F))) AS y 13 | ) 14 | ); 15 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/s2/S2_FROMGEOGPOINT.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.S2_FROMGEOGPOINT` 6 | (point GEOGRAPHY, resolution INT64) 7 | RETURNS INT64 8 | AS ( 9 | `@@BQ_DATASET@@.S2_FROMLONGLAT`( 10 | ST_X(point), ST_Y(point), resolution 11 | ) 12 | ); 13 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/s2/S2_RESOLUTION.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.S2_RESOLUTION` 6 | (id INT64) AS ( 7 | (SELECT (61 - STRPOS(STRING_AGG(CAST(id >> bit & 0x1 AS STRING), '' ORDER BY bit), '1')) >> 1 8 | FROM UNNEST(GENERATE_ARRAY(0, 63)) AS bit) 9 | ); 10 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/sql/s2/S2_TOTOKEN.sql: -------------------------------------------------------------------------------- 1 | ---------------------------- 2 | -- Copyright (C) 2021 CARTO 3 | ---------------------------- 4 | 5 | -- from https://stackoverflow.com/a/51600210 6 | CREATE OR REPLACE FUNCTION `@@BQ_DATASET@@.S2_TOTOKEN` 7 | (id INT64) 8 | RETURNS STRING 9 | AS (( 10 | SELECT STRING_AGG(FORMAT('%02x', id >> (byte * 8) & 0xff), '' ORDER BY byte DESC) 11 | FROM UNNEST(GENERATE_ARRAY(0, 7)) AS byte 12 | )); 13 | -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/accessors/fixtures/st_envelope_points_out.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | value: 'POLYGON((-75.9221 39.11, -75.704075 39.11, -75.48605 39.11, -75.268025 39.11, -75.05 39.11, -75.05 39.987, -75.268025 39.987, -75.48605 39.987, -75.704075 39.987, -75.9221 39.987, -75.9221 39.11))' 3 | } -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/clustering/fixtures/st_clusterkmeans_points1_out.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | value: '[{"cluster":1,"geom":{"value":"POINT(0 0)"}},{"cluster":1,"geom":{"value":"POINT(0 1)"}},{"cluster":0,"geom":{"value":"POINT(5 0)"}},{"cluster":1,"geom":{"value":"POINT(1 0)"}}]' 3 | } -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/h3/H3_INT_TOSTRING.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('Correctly converts H3 int to H3 string', async () => { 4 | const query = ` 5 | SELECT \`@@BQ_DATASET@@.H3_INT_TOSTRING\`(599686042433355775) as strid 6 | `; 7 | 8 | const rows = await runQuery(query); 9 | expect(rows.length).toEqual(1); 10 | expect(rows[0].strid).toEqual('85283473fffffff'); 11 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/h3/H3_STRING_TOINT.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('Correctly converts H3 string to H3 int', async () => { 4 | const query = ` 5 | SELECT \`@@BQ_DATASET@@.H3_STRING_TOINT\`('85283473fffffff') as intid 6 | `; 7 | 8 | const rows = await runQuery(query); 9 | expect(rows.length).toEqual(1); 10 | expect(rows[0].intid).toEqual(599686042433355775); 11 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/QUADBIN_BBOX.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('QUADBIN_BBOX should work', async () => { 4 | const query = 'SELECT `@@BQ_DATASET@@.QUADBIN_BBOX`(5209574053332910079) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual([22.5, -21.943045533438166, 45.0, 0.0]); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/QUADBIN_CENTER.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('QUADBIN_CENTER should work', async () => { 4 | const query = 'SELECT `@@BQ_DATASET@@.QUADBIN_CENTER`(5209574053332910079) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output.value).toEqual('POINT(33.75 -11.1784018737118)'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/QUADBIN_DISTANCE.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('QUADBIN_DISTANCE should work', async () => { 4 | const query = 'SELECT `@@BQ_DATASET@@.QUADBIN_DISTANCE`(5207251884775047167, 5207128739472736255) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual(1); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/QUADBIN_FROMZXY.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('QUADBIN_FROMZXY should work', async () => { 4 | const query = 'SELECT CAST(`@@BQ_DATASET@@.QUADBIN_FROMZXY`(4, 9, 8) AS STRING) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual('5209574053332910079'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/QUADBIN_RESOLUTION.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('QUADBIN_RESOLUTION should work', async () => { 4 | const query = 'SELECT `@@BQ_DATASET@@.QUADBIN_RESOLUTION`(5209574053332910079) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual(4); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/QUADBIN_TOZXY.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('QUADBIN_TOZXY should work', async () => { 4 | const query = 'SELECT TO_JSON_STRING(`@@BQ_DATASET@@.QUADBIN_TOZXY`(5209574053332910079)) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual('{"z":4,"x":9,"y":8}'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/__QUADBIN_FROMQUADINT.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('__QUADBIN_FROMQUADINT.test should work', async () => { 4 | const query = 'SELECT CAST(`@@BQ_DATASET@@.__QUADBIN_FROMQUADINT`(12521547919) AS STRING) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual('5256684166837174271'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/__QUADBIN_INT_TOSTRING.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('__QUADBIN_INT_TOSTRING should work', async () => { 4 | const query = 'SELECT `@@BQ_DATASET@@.__QUADBIN_INT_TOSTRING`(5209574053332910079) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual('484c1fffffffffff'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/quadbin/__QUADBIN_STRING_TOINT.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('__QUADBIN_STRING_TOINT should work', async () => { 4 | const query = 'SELECT CAST(`@@BQ_DATASET@@.__QUADBIN_STRING_TOINT`(\'484c1fffffffffff\') AS STRING) AS output'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].output).toEqual('5209574053332910079'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/random/ST_GENERATEPOINTS.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('ST_GENERATEPOINTS should work', async () => { 4 | const query = `SELECT 5 | \`@@BQ_DATASET@@.ST_GENERATEPOINTS\`(ST_GEOGFROMTEXT('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'), 10) AS random 6 | `; 7 | const rows = await runQuery(query); 8 | expect(rows.length).toEqual(1); 9 | expect(rows[0].random.length).toEqual(10); 10 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/s2/S2_CENTER.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('S2_CENTER should work', async () => { 4 | const query = 'SELECT ST_ASTEXT(`@@BQ_DATASET@@.S2_CENTER`(1735346007979327488)) as id'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].id.toString()).toEqual('POINT(40.4720004343497 -3.72646193231851)'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/s2/S2_FROMGEOGPOINT.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('S2_FROMGEOGPOINT should work', async () => { 4 | const query = 'SELECT CAST(`@@BQ_DATASET@@.S2_FROMGEOGPOINT`(ST_GEOGPOINT(-74.006, 40.7128), 12) AS STRING) as id'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].id.toString()).toEqual('-8520148382826627072'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/s2/S2_FROMTOKEN.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('S2_FROMTOKEN should work', async () => { 4 | const query = 'SELECT CAST(`@@BQ_DATASET@@.S2_FROMTOKEN`("89c25a3000000000") AS STRING) as id'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].id.toString()).toEqual('-8520148382826627072'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/s2/S2_TOTOKEN.test.js: -------------------------------------------------------------------------------- 1 | const { runQuery } = require('../../../common/test-utils'); 2 | 3 | test('S2_TOTOKEN should work', async () => { 4 | const query = 'SELECT CAST(`@@BQ_DATASET@@.S2_TOTOKEN`(-8520148382826627072) AS STRING) as id'; 5 | const rows = await runQuery(query); 6 | expect(rows.length).toEqual(1); 7 | expect(rows[0].id.toString()).toEqual('89c25a3000000000'); 8 | }); -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/transformations/fixtures/st_buffer_in.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | geom : { 3 | "type": "Feature", 4 | "geometry": { 5 | "type": "Point", 6 | "coordinates": [-100, 50] 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/transformations/fixtures/st_concavehull_duplicates_out.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | value: 'LINESTRING(48.2876586914063 -13.0634257888982, 48.4552001953125 -13.2372719082006)' 3 | } -------------------------------------------------------------------------------- /clouds/bigquery/modules/test/transformations/fixtures/st_concavehull_point_out.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | value: 'POINT(48.2876586914063 -13.0634257888982)' 3 | } -------------------------------------------------------------------------------- /clouds/bigquery/version: -------------------------------------------------------------------------------- 1 | 1.2.6 2 | -------------------------------------------------------------------------------- /clouds/databricks/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | CARTO Analytics Toolbox Core for Databricks. 4 | 5 | All notable commits to this project will be documented in this file. 6 | 7 | ## [0.1.1] 8 | -------------------------------------------------------------------------------- /clouds/databricks/common/README.md: -------------------------------------------------------------------------------- 1 | # Create Integration Test Script 2 | AT databricks support the automatic creation of integration tests from the doc file examples 3 | 4 | `cd clouds/databricks/commons` 5 | 6 | `./createIT.sh` 7 | 8 | After the creation of the tests you may need to adapt the expected result in the test to the real result, boolean, integer, etc -------------------------------------------------------------------------------- /clouds/databricks/common/analytics-toolbox-databricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/databricks/common/analytics-toolbox-databricks.png -------------------------------------------------------------------------------- /clouds/databricks/common/createIT.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Create integration tests from docs" 4 | echo "-------------------------------------" 5 | virtualenv -p python3 itvenv -q 6 | source itvenv/bin/activate 7 | python -m pip install -U pip -q 8 | pip install -r requirements_create_it.txt -q 9 | python test_utils/create_tests_from_doc.py 10 | deactivate -------------------------------------------------------------------------------- /clouds/databricks/common/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "license": "BSD-3-Clause", 3 | "devDependencies": { 4 | "markdownlint-cli": "^0.32.2" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /clouds/databricks/common/python3_requirements.txt: -------------------------------------------------------------------------------- 1 | flake8==3.9.2 2 | flake8-quotes==3.2.0 3 | flake8-docstrings==1.6.0 4 | pep8-naming==0.12.1 5 | brunette==0.2.0 6 | sqlfluff==1.3.1 7 | databricks-sql-connector==2.0.2 8 | pytest==7.1.2 9 | -------------------------------------------------------------------------------- /clouds/databricks/common/python_utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/databricks/common/python_utils/__init__.py -------------------------------------------------------------------------------- /clouds/databricks/common/python_utils/resources/test_modules_init.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/common/python_utils/resources/test_template.py: -------------------------------------------------------------------------------- 1 | import os 2 | from python_utils.run_query import run_query 3 | 4 | def test_{{functionname_lower}}_success(): 5 | query = "{{query}}" 6 | result = run_query(query) 7 | assert result[0][0] == "{{result}}" 8 | -------------------------------------------------------------------------------- /clouds/databricks/common/requirements_create_it.txt: -------------------------------------------------------------------------------- 1 | Jinja2==3.1.5 2 | -------------------------------------------------------------------------------- /clouds/databricks/common/submit-run-template.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "modules", 3 | "existing_cluster_id": "@@DB_CLUSTER_ID@@", 4 | "notebook_task": { 5 | "notebook_path": "@@SQLPath@@" 6 | } 7 | } -------------------------------------------------------------------------------- /clouds/databricks/libraries/scala/core/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | sql/ 2 | -------------------------------------------------------------------------------- /clouds/databricks/libraries/scala/core/src/test/resources/polygons.snappy.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/databricks/libraries/scala/core/src/test/resources/polygons.snappy.parquet -------------------------------------------------------------------------------- /clouds/databricks/libraries/scala/project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version=1.6.2 2 | 3 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/accessors/ST_COORDDIM.md: -------------------------------------------------------------------------------- 1 | ## ST_COORDDIM 2 | 3 | ```sql:signature 4 | ST_COORDDIM(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the number of dimensions of the coordinates of `Geometry` _geom_. 10 | 11 | * `geom`: `Geometry` input geom. 12 | 13 | **Return type** 14 | 15 | `Int` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_COORDDIM(carto.ST_MAKEPOINTM(1, 2, 3)); 21 | -- 3 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/accessors/ST_ISEMPTY.md: -------------------------------------------------------------------------------- 1 | ## ST_ISEMPTY 2 | 3 | ```sql:signature 4 | ST_ISEMPTY(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns `true` if _geom_ is an empty geometry. 10 | 11 | * `geom`: `Geometry` input geom. 12 | 13 | **Return type** 14 | 15 | `Boolean` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_ISEMPTY(carto.ST_GEOMFROMWKT("LINESTRING EMPTY")); 21 | -- true 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/accessors/ST_ISGEOMFIELD.md: -------------------------------------------------------------------------------- 1 | ## ST_ISGEOMFIELD 2 | 3 | ```sql:signature 4 | ST_ISGEOMFIELD(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns `true` if _geom_ is string containing WKT or WKB representation of a geometry. 10 | 11 | * `geom`: `Geometry` input geom. 12 | 13 | **Return type** 14 | 15 | `Boolean` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_ISGEOMFIELD("LINESTRING(1 1, 2 3)"); 21 | -- true 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/accessors/ST_NUMPOINTS.md: -------------------------------------------------------------------------------- 1 | ## ST_NUMPOINTS 2 | 3 | ```sql:signature 4 | ST_NUMPOINTS(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns the number of vertices in `Geometry` _geom_. 10 | 11 | * `geom`: `Geometry` input geom. 12 | 13 | **Return type** 14 | 15 | `Int` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_NUMPOINTS(carto.ST_GEOMFROMWKT("LINESTRING(1 1, 2 3, 4 4)")); 21 | -- 3 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/accessors/ST_X.md: -------------------------------------------------------------------------------- 1 | ## ST_X 2 | 3 | ```sql:signature 4 | ST_X(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | If _geom_ is a `Point`, return the X coordinate of that point. 10 | 11 | * `geom`: `Geometry` input Point. 12 | 13 | **Return type** 14 | 15 | `Double` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_X(carto.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)')); 21 | -- -76.09131 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/accessors/ST_Y.md: -------------------------------------------------------------------------------- 1 | ## ST_Y 2 | 3 | ```sql:signature 4 | ST_Y(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | If _geom_ is a `Point`, return the Y coordinate of that point. 10 | 11 | * `geom`: `Geometry` input Point. 12 | 13 | **Return type** 14 | 15 | `Double` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_Y(carto.ST_POINT(-76.09130, 18.42750)); 21 | -- 18.4275 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/accessors/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # accessors 5 | 6 | This module contains functions that provide information about internal geometries. 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/constructors/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # constructors 5 | 6 | This module contains functions that create new geographies from coordinates or already existing geographies. 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/formatters/ST_ASTEXT.md: -------------------------------------------------------------------------------- 1 | ## ST_ASTEXT 2 | 3 | ```sql:signature 4 | ST_ASTEXT(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns `Geometry` _geom_ in WKT representation. 10 | 11 | * `geom`: `Geometry` input geom. 12 | 13 | **Return type** 14 | 15 | `String` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_ASTEXT(carto.ST_POINT(-76.09130, 18.42750)); 21 | -- POINT (-76.0913 18.4275) 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/formatters/ST_ASTWKB.md: -------------------------------------------------------------------------------- 1 | ## ST_ASTWKB 2 | 3 | ```sql:signature 4 | ST_ASTWKB(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | Returns `Geometry` _geom_ in TWKB representation. 10 | 11 | * `geom`: `Geometry` input geom. 12 | 13 | **Return type** 14 | 15 | `Array[Byte]` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_ASTWKB(carto.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)')); 21 | -- 4QgBz/HU1QXwwN6vAQA= 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/formatters/ST_CASTTOPOINT.md: -------------------------------------------------------------------------------- 1 | ## ST_CASTTOPOINT 2 | 3 | ```sql:signature 4 | ST_CASTTOPOINT(geom) 5 | ``` 6 | 7 | **Description** 8 | 9 | Casts `Geometry` _g_ to a `Point`. 10 | 11 | * `geom`: `Geometry` input geom. 12 | 13 | **Return type** 14 | 15 | `Point` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_CASTTOPOINT(carto.ST_GEOMFROMWKT('POINT(75 29)')); 21 | -- 4QgBgN6gywWAssiUAgA= 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/formatters/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # formatters 5 | 6 | This module contains functions that export geometries to an external format like WKT. 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/indexing/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # indexing 5 | 6 | This module contains functions used for indexing 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/measurements/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # measurements 5 | 6 | This module contains functions that compute measurements of distance, area and angles. There are also functions to compute geometry values determined by measurements. 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/parsers/ST_GEOMFROMTEXT.md: -------------------------------------------------------------------------------- 1 | ## ST_GEOMFROMTEXT 2 | 3 | ```sql:signature 4 | ST_GEOMFROMTEXT(wkt) 5 | ``` 6 | 7 | **Description** 8 | 9 | Alias of st_geomFromWKT. 10 | 11 | * `wkt`: `String` WKT text. 12 | 13 | **Return type** 14 | 15 | `Geometry` 16 | 17 | **Example** 18 | 19 | ```sql 20 | SELECT carto.ST_ASGEOJSON(carto.ST_GEOMFROMTEXT('POINT(-76.09130 18.42750)')); 21 | -- {"type":"Point","coordinates":[-76.0913,18.4275,0.0]} 22 | ``` 23 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/parsers/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # parsers 5 | 6 | This module contains functions that create different geometry types from an external format like WKT. 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/predicates/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # predicates 5 | 6 | This module contains functions that return a boolean based on the relation between 2 geometries or its properties. 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/doc/transformations/_INTRO.md: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | --- 4 | # transformations 5 | 6 | This module contains functions that compute geometric constructions, or alter geometry size or shape. 7 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/.sqlfluffignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/analytics-toolbox-core/7f0ffd1d6bfe9e7a63824be6de7927610c9d9cfd/clouds/databricks/modules/sql/.sqlfluffignore -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_COORDDIM.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_COORDDIM AS 'com.carto.analyticstoolbox.modules.accessors.ST_CoordDim'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_DIMENSION.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_DIMENSION AS 'com.carto.analyticstoolbox.modules.accessors.ST_Dimension'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ENVELOPE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ENVELOPE AS 'com.carto.analyticstoolbox.modules.accessors.ST_Envelope'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_GEOMETRYN.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMETRYN AS 'com.carto.analyticstoolbox.modules.accessors.ST_GeometryN'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ISCLOSED.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ISCLOSED AS 'com.carto.analyticstoolbox.modules.accessors.ST_IsClosed'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ISCOLLECTION.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ISCOLLECTION AS 'com.carto.analyticstoolbox.modules.accessors.ST_IsCollection'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ISEMPTY.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ISEMPTY AS 'com.carto.analyticstoolbox.modules.accessors.ST_IsEmpty'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ISGEOMFIELD.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ISGEOMFIELD AS 'com.carto.analyticstoolbox.modules.accessors.ST_IsGeomField'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ISRING.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ISRING AS 'com.carto.analyticstoolbox.modules.accessors.ST_IsRing'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ISSIMPLE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ISSIMPLE AS 'com.carto.analyticstoolbox.modules.accessors.ST_IsSimple'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_ISVALID.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ISVALID AS 'com.carto.analyticstoolbox.modules.accessors.ST_IsValid'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_NUMGEOMETRIES.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_NUMGEOMETRIES AS 'com.carto.analyticstoolbox.modules.accessors.ST_NumGeometries'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_NUMPOINTS.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_NUMPOINTS AS 'com.carto.analyticstoolbox.modules.accessors.ST_NumPoints'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_POINTN.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_POINTN AS 'com.carto.analyticstoolbox.modules.accessors.ST_PointN'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_X.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_X AS 'com.carto.analyticstoolbox.modules.accessors.ST_X'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/accessors/ST_Y.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_Y AS 'com.carto.analyticstoolbox.modules.accessors.ST_Y'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/constructors/ST_MAKEBBOX.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MAKEBBOX AS 'com.carto.analyticstoolbox.modules.constructors.ST_MakeBBOX'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/constructors/ST_MAKEBOX2D.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MAKEBOX2D AS 'com.carto.analyticstoolbox.modules.constructors.ST_MakeBox2D'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/constructors/ST_MAKELINE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MAKELINE AS 'com.carto.analyticstoolbox.modules.constructors.ST_MakeLine'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/constructors/ST_MAKEPOINT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MAKEPOINT AS 'com.carto.analyticstoolbox.modules.constructors.ST_MakePoint'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/constructors/ST_MAKEPOINTM.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MAKEPOINTM AS 'com.carto.analyticstoolbox.modules.constructors.ST_MakePointM'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/constructors/ST_MAKEPOLYGON.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MAKEPOLYGON AS 'com.carto.analyticstoolbox.modules.constructors.ST_MakePolygon'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/constructors/ST_POINT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_POINT AS 'com.carto.analyticstoolbox.modules.constructors.ST_MakePoint'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_ASBINARY.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ASBINARY AS 'com.carto.analyticstoolbox.modules.formatters.ST_AsBinary'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_ASGEOJSON.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ASGEOJSON AS 'com.carto.analyticstoolbox.modules.formatters.ST_AsGeoJson'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_ASLATLONTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ASLATLONTEXT AS 'com.carto.analyticstoolbox.modules.formatters.ST_AsLatLonText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_ASTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ASTEXT AS 'com.carto.analyticstoolbox.modules.formatters.ST_AsText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_ASTWKB.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ASTWKB AS 'com.carto.analyticstoolbox.modules.formatters.ST_AsTWKB'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_BYTEARRAY.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_BYTEARRAY AS 'com.carto.analyticstoolbox.modules.formatters.ST_ByteArray'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_CASTTOGEOMETRY.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CASTTOGEOMETRY AS 'com.carto.analyticstoolbox.modules.formatters.ST_CastToGeometry'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_CASTTOLINESTRING.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CASTTOLINESTRING AS 'com.carto.analyticstoolbox.modules.formatters.ST_CastToLineString'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_CASTTOPOINT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CASTTOPOINT AS 'com.carto.analyticstoolbox.modules.formatters.ST_CastToPoint'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_CASTTOPOLYGON.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CASTTOPOLYGON AS 'com.carto.analyticstoolbox.modules.formatters.ST_CastToPolygon'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/formatters/ST_GEOHASH.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOHASH AS 'com.carto.analyticstoolbox.modules.formatters.ST_AsGeoHash'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/indexing/ST_CRSFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CRSFROMTEXT AS 'com.carto.analyticstoolbox.modules.index.ST_CrsFromText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/indexing/ST_EXTENTFROMGEOM.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_EXTENTFROMGEOM AS 'com.carto.analyticstoolbox.modules.index.ST_ExtentFromGeom'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/indexing/ST_EXTENTTOGEOM.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_EXTENTTOGEOM AS 'com.carto.analyticstoolbox.modules.index.ST_ExtentToGeom'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/indexing/ST_GEOMREPROJECT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMREPROJECT AS 'com.carto.analyticstoolbox.modules.index.ST_GeomReproject'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/indexing/ST_MAKEEXTENT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MAKEEXTENT AS 'com.carto.analyticstoolbox.modules.index.ST_MakeExtent'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/indexing/ST_PARTITIONCENTROID.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_PARTITIONCENTROID AS 'com.carto.analyticstoolbox.modules.index.ST_PartitionCentroid'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/indexing/ST_Z2LATLON.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_Z2LATLON AS 'com.carto.analyticstoolbox.modules.index.ST_Z2LatLon'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/measurements/ST_AREA.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_AREA AS 'com.carto.analyticstoolbox.modules.measurements.ST_Area'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/measurements/ST_DISTANCE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_DISTANCE AS 'com.carto.analyticstoolbox.modules.measurements.ST_Distance'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/measurements/ST_DISTANCESPHERE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_DISTANCESPHERE AS 'com.carto.analyticstoolbox.modules.measurements.ST_DistanceSphere'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/measurements/ST_LENGTH.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_LENGTH AS 'com.carto.analyticstoolbox.modules.measurements.ST_Length'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/measurements/ST_LENGTHSPHERE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_LENGTHSPHERE AS 'com.carto.analyticstoolbox.modules.measurements.ST_LengthSphere'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_BOX2DFROMGEOHASH.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_BOX2DFROMGEOHASH AS 'com.carto.analyticstoolbox.modules.parsers.ST_GeomFromGeoHash'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_GEOMFROMGEOHASH.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMFROMGEOHASH AS 'com.carto.analyticstoolbox.modules.parsers.ST_GeomFromGeoHash'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_GEOMFROMGEOJSON.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMFROMGEOJSON AS 'com.carto.analyticstoolbox.modules.parsers.ST_GeomFromGeoJson'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_GEOMFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMFROMTEXT AS 'com.carto.analyticstoolbox.modules.parsers.ST_GeomFromWKT'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_GEOMFROMTWKB.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMFROMTWKB AS 'com.carto.analyticstoolbox.modules.parsers.ST_GeomFromTWKB'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_GEOMFROMWKB.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMFROMWKB AS 'com.carto.analyticstoolbox.modules.parsers.ST_GeomFromWKB'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_GEOMFROMWKT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_GEOMFROMWKT AS 'com.carto.analyticstoolbox.modules.parsers.ST_GeomFromWKT'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_LINEFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_LINEFROMTEXT AS 'com.carto.analyticstoolbox.modules.parsers.ST_LineFromText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_MLINEFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MLINEFROMTEXT AS 'com.carto.analyticstoolbox.modules.parsers.ST_MLineFromText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_MPOINTFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MPOINTFROMTEXT AS 'com.carto.analyticstoolbox.modules.parsers.ST_MPointFromText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_MPOLYFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_MPOLYFROMTEXT AS 'com.carto.analyticstoolbox.modules.parsers.ST_MPolyFromText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_POINTFROMGEOHASH.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_POINTFROMGEOHASH AS 'com.carto.analyticstoolbox.modules.parsers.ST_PointFromGeoHash'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_POINTFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_POINTFROMTEXT AS 'com.carto.analyticstoolbox.modules.parsers.ST_PointFromText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_POINTFROMWKB.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_POINTFROMWKB AS 'com.carto.analyticstoolbox.modules.parsers.ST_PointFromWKB'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/parsers/ST_POLYGONFROMTEXT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_POLYGONFROMTEXT AS 'com.carto.analyticstoolbox.modules.parsers.ST_PolygonFromText'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_CONTAINS.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CONTAINS AS 'com.carto.analyticstoolbox.modules.predicates.ST_Contains'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_COVERS.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_COVERS AS 'com.carto.analyticstoolbox.modules.predicates.ST_Covers'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_CROSSES.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CROSSES AS 'com.carto.analyticstoolbox.modules.predicates.ST_Crosses'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_DISJOINT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_DISJOINT AS 'com.carto.analyticstoolbox.modules.predicates.ST_Disjoint'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_EQUALS.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_EQUALS AS 'com.carto.analyticstoolbox.modules.predicates.ST_Equals'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_INTERSECTS.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_INTERSECTS AS 'com.carto.analyticstoolbox.modules.predicates.ST_Intersects'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_OVERLAPS.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_OVERLAPS AS 'com.carto.analyticstoolbox.modules.predicates.ST_Overlaps'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_RELATE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_RELATE AS 'com.carto.analyticstoolbox.modules.predicates.ST_Relate'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_RELATEBOOL.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_RELATEBOOL AS 'com.carto.analyticstoolbox.modules.predicates.ST_RelateBool'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_TOUCHES.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_TOUCHES AS 'com.carto.analyticstoolbox.modules.predicates.ST_Touches'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/predicates/ST_WITHIN.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_WITHIN AS 'com.carto.analyticstoolbox.modules.predicates.ST_Within'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/product/VERSION.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.@@DB_VERSION_FUNCTION@@ 2 | AS 'com.carto.analyticstoolbox.modules.product.@@DB_VERSION_CLASS@@'; 3 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_ANTIMERIDIANSAFEGEOM.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_ANTIMERIDIANSAFEGEOM AS 'com.carto.analyticstoolbox.modules.transformations.ST_AntimeridianSafeGeom'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_BOUNDARY.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_BOUNDARY AS 'com.carto.analyticstoolbox.modules.transformations.ST_Boundary'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_BUFFERPOINT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_BUFFERPOINT AS 'com.carto.analyticstoolbox.modules.transformations.ST_BufferPoint'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_CENTROID.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CENTROID AS 'com.carto.analyticstoolbox.modules.transformations.ST_Centroid'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_CLOSESTPOINT.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CLOSESTPOINT AS 'com.carto.analyticstoolbox.modules.transformations.ST_ClosestPoint'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_CONVEXHULL.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_CONVEXHULL AS 'com.carto.analyticstoolbox.modules.transformations.ST_ConvexHull'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_DIFFERENCE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_DIFFERENCE AS 'com.carto.analyticstoolbox.modules.transformations.ST_Difference'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_EXTERIORRING.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_EXTERIORRING AS 'com.carto.analyticstoolbox.modules.transformations.ST_ExteriorRing'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_IDLSAFEGEOM.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_IDLSAFEGEOM AS 'com.carto.analyticstoolbox.modules.transformations.ST_AntimeridianSafeGeom'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_INTERIORRINGN.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_INTERIORRINGN AS 'com.carto.analyticstoolbox.modules.transformations.ST_InteriorRingN'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_INTERSECTION.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_INTERSECTION AS 'com.carto.analyticstoolbox.modules.transformations.ST_Intersection'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_SIMPLIFY.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_SIMPLIFY AS 'com.carto.analyticstoolbox.modules.transformations.ST_Simplify'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_SIMPLIFYPRESERVETOPOLOGY.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_SIMPLIFYPRESERVETOPOLOGY AS 'com.carto.analyticstoolbox.modules.transformations.ST_SimplifyPreserveTopology'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/sql/transformations/ST_TRANSLATE.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE FUNCTION @@DB_SCHEMA@@.ST_TRANSLATE AS 'com.carto.analyticstoolbox.modules.transformations.ST_Translate'; 2 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_DIMENSION.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_dimension_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_DIMENSION(@@DB_SCHEMA@@.ST_GEOMFROMWKT("LINESTRING(0 0, 1 1, 2 1)"));' 6 | result = run_query(query) 7 | assert result[0][0] == 1 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ENVELOPE.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_envelope_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_ENVELOPE(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(1 1, 2 3)')));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POLYGON ((1 1, 1 3, 2 3, 2 1, 1 1))' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_GEOMETRYN.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_geometryn_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_GEOMETRYN(@@DB_SCHEMA@@.ST_GEOMFROMWKT('GEOMETRYCOLLECTION(LINESTRING(1 1, 2 3), POINT(0 4), LINESTRING EMPTY)'), 2));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (0 4)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ISCLOSED.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_isclosed_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ISCLOSED(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(1 1, 2 3, 4 3, 1 1)'));" 6 | result = run_query(query) 7 | assert result[0][0] is True 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ISCOLLECTION.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_iscollection_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ISCOLLECTION(@@DB_SCHEMA@@.ST_GEOMFROMWKT('GEOMETRYCOLLECTION(LINESTRING(1 1, 2 3), POINT(0 4)), LINESTRING EMPTY'));" 6 | result = run_query(query) 7 | assert result[0][0] is True 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ISEMPTY.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_isempty_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ISEMPTY(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING EMPTY'));" 6 | result = run_query(query) 7 | assert result[0][0] is True 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ISGEOMFIELD.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_isgeomfield_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ISGEOMFIELD('LINESTRING(1 1, 2 3)');" 6 | result = run_query(query) 7 | assert result[0][0] is True 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ISRING.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_isring_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ISRING(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(1 1, 2 3, 4 3, 1 1)'));" 6 | result = run_query(query) 7 | assert result[0][0] is True 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ISSIMPLE.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_issimple_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ISSIMPLE(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(1 1, 2 3, 4 3, 2 3)'));" 6 | result = run_query(query) 7 | assert result[0][0] is False 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_ISVALID.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_isvalid_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ISVALID(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))'));" 6 | result = run_query(query) 7 | assert result[0][0] is False 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_NUMGEOMETRIES.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_numgeometries_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_NUMGEOMETRIES(@@DB_SCHEMA@@.ST_GEOMFROMWKT('GEOMETRYCOLLECTION(LINESTRING(1 1, 2 3), POINT(0 4), LINESTRING EMPTY)'));" 6 | result = run_query(query) 7 | assert result[0][0] == 3 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_NUMPOINTS.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_numpoints_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_NUMPOINTS(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(1 1, 2 3, 4 4)'));" 6 | result = run_query(query) 7 | assert result[0][0] == 3 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_POINTN.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_pointn_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_POINTN(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(1 1, 2 3, 4 4, 3 4)'), 3));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (4 4)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_X.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_x_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_X(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)'));" 6 | result = run_query(query) 7 | # The result is rounded because it adds small decimal numbers 8 | assert round(result[0][0], 5) == -76.09130 9 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/accessors/test_ST_Y.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_y_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_Y(@@DB_SCHEMA@@.ST_POINT(-76.09130, 18.42750));' 6 | result = run_query(query) 7 | assert round(result[0][0], 4) == 18.4275 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/constructors/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/constructors/test_ST_MAKEPOINT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_makepoint_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_MAKEPOINT(-91.85548, 29.50603));' 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (-91.85548 29.50603)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/constructors/test_ST_MAKEPOINTM.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_makepointm_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_MAKEPOINTM(-91.85548, 29.50603, 5));' 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (-91.85548 29.50603)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/constructors/test_ST_MAKEPOLYGON.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_makepolygon_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_MAKEPOLYGON(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(75 29,77 29,77 27, 75 29)')));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POLYGON ((75 29, 77 29, 77 27, 75 29))' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/constructors/test_ST_POINT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_point_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_POINT(-91.85548, 29.50603));' 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (-91.85548 29.50603)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_ASBINARY.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_asbinary_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_GEOMFROMWKB(@@DB_SCHEMA@@.ST_ASBINARY(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)'))));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_ASGEOJSON.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_asgeojson_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASGEOJSON(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)'));" 6 | result = run_query(query) 7 | assert result[0][0] == '{"type":"Point","coordinates":[-76.0913,18.4275]}' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_ASLATLONTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_aslatlontext_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASLATLONTEXT(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)'));" 6 | result = run_query(query) 7 | assert result[0][0] == '18°25\'39.000"N 77°54\'31.320"W' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_ASTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_astext_success(): 5 | query = ( 6 | 'SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_POINT(-76.09130, 18.42750));' 7 | ) 8 | result = run_query(query) 9 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 10 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_ASTWKB.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_astwkb_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_ASTWKB(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)')));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_BYTEARRAY.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_bytearray_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_BYTEARRAY('POINT (-76.0913 18.4275)');" 6 | result = run_query(query) 7 | assert result[0][0] == b'POINT (-76.0913 18.4275)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_CASTTOGEOMETRY.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_casttogeometry_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_CASTTOGEOMETRY(@@DB_SCHEMA@@.ST_POINT(-76.09130, 18.42750)));' 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_CASTTOLINESTRING.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_casttolinestring_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_CASTTOLINESTRING(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(75 29,77 29,77 27, 75 29)')));" 6 | result = run_query(query) 7 | assert result[0][0] == 'LINESTRING (75 29, 77 29, 77 27, 75 29)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_CASTTOPOINT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_casttopoint_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_CASTTOPOINT(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(75 29)')));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (75 29)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_CASTTOPOLYGON.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_casttopolygon_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_CASTTOPOLYGON(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POLYGON((75 29, 77 29, 77 27, 75 29))')));" 6 | result = run_query(query) 7 | assert result[0][0] == 'POLYGON ((75 29, 77 29, 77 27, 75 29))' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/formatters/test_ST_GEOHASH.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_geohash_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_GEOHASH(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)'), 8);" 6 | result = run_query(query) 7 | assert result[0][0] == 'd4' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/indexing/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/indexing/test_ST_CRSFROMTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_crsfromtext_success(): 5 | query = ( 6 | "SELECT @@DB_SCHEMA@@.ST_CRSFROMTEXT('+proj=merc +lat_ts=56.5 +ellps=GRS80');" 7 | ) 8 | result = run_query(query) 9 | assert result[0][0].strip() == '+proj=merc +lat_ts=56.5 +ellps=GRS80' 10 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/indexing/test_ST_EXTENTFROMGEOM.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_extentfromgeom_success(): 5 | query = ( 6 | 'SELECT @@DB_SCHEMA@@.ST_EXTENTFROMGEOM(@@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 1, 1))' 7 | ) 8 | result = run_query(query) 9 | assert result[0][0] == {'xmin': 0, 'ymin': 0, 'xmax': 1, 'ymax': 1} 10 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/indexing/test_ST_MAKEEXTENT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_makeextent_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_MAKEEXTENT(0, 0, 1, 1)' 6 | result = run_query(query) 7 | assert result[0][0] == {'xmin': 0, 'ymin': 0, 'xmax': 1, 'ymax': 1} 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/indexing/test_ST_Z2LATLON.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_z2latlon_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_Z2LATLON(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (0 0, 1 2)'))" 6 | result = run_query(query) 7 | assert result[0][0] == {'min': 864691128455135232, 'max': 864847779880401216} 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/measurements/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/measurements/test_ST_AREA.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_area_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_AREA(@@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2));' 6 | result = run_query(query) 7 | assert result[0][0] == 4 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/measurements/test_ST_DISTANCE.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_distance_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_DISTANCE(@@DB_SCHEMA@@.ST_POINT(0, 0), @@DB_SCHEMA@@.ST_POINT(0, 5));' 6 | result = run_query(query) 7 | assert result[0][0] == 5 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/measurements/test_ST_DISTANCESPHERE.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_distancesphere_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_DISTANCESPHERE(@@DB_SCHEMA@@.ST_POINT(0, 0), @@DB_SCHEMA@@.ST_POINT(0, 5)) / 1000;' 6 | result = run_query(query) 7 | assert result[0][0] == 555.9753986718438 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/measurements/test_ST_LENGTH.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_length_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_LENGTH(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(0 0, 0 3, 5 3)'));" 6 | result = run_query(query) 7 | assert result[0][0] == 8 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/measurements/test_ST_LENGTHSPHERE.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_lengthsphere_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_LENGTHSPHERE(@@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING(0 0, 0 3, 5 3)')) / 1000;" 6 | result = run_query(query) 7 | assert result[0][0] == 888.7982099954688 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_GEOMFROMGEOJSON.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_geomfromgeojson_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_GEOMFROMGEOJSON(\'{"type":"Point","coordinates":[-76.0913,18.4275,0.0]}\'));' 6 | result = run_query(query) 7 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_GEOMFROMTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_geomfromtext_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASGEOJSON(@@DB_SCHEMA@@.ST_GEOMFROMTEXT('POINT(-76.09130 18.42750)'));" 6 | result = run_query(query) 7 | assert result[0][0] == '{"type":"Point","coordinates":[-76.0913,18.4275]}' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_GEOMFROMTWKB.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_geomfromtwkb_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_ASTWKB(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)')) AS twkb 7 | ) 8 | SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_GEOMFROMTWKB(twkb)) FROM t;""" 9 | result = run_query(query) 10 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_GEOMFROMWKB.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_geomfromwkb_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_ASBINARY(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)')) AS wkb 7 | ) 8 | SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_GEOMFROMWKB(wkb)) FROM t;""" 9 | result = run_query(query) 10 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_GEOMFROMWKT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_geomfromwkt_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASGEOJSON(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)'));" 6 | result = run_query(query) 7 | assert result[0][0] == '{"type":"Point","coordinates":[-76.0913,18.4275]}' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_LINEFROMTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_linefromtext_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASGEOJSON(@@DB_SCHEMA@@.ST_LINEFROMTEXT('LINESTRING(0 0, 0 3, 5 3)'));" 6 | result = run_query(query) 7 | assert ( 8 | result[0][0] 9 | == '{"type":"LineString","coordinates":[[0.0,0.0],[0.0,3],[5,3]]}' 10 | ) 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_MLINEFROMTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_mlinefromtext_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASGEOJSON(@@DB_SCHEMA@@.ST_MLINEFROMTEXT('MULTILINESTRING((1 1, 3 5), (-5 3, -8 -2))'));" 6 | result = run_query(query) 7 | assert ( 8 | result[0][0] 9 | == '{"type":"MultiLineString","coordinates":[[[1,1],[3,5]],[[-5,3],[-8,-2]]]}' 10 | ) 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_MPOINTFROMTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_mpointfromtext_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASGEOJSON(@@DB_SCHEMA@@.ST_MPOINTFROMTEXT('MULTIPOINT (10 40, 40 30, 20 20, 30 10)'));" 6 | result = run_query(query) 7 | assert ( 8 | result[0][0] 9 | == '{"type":"MultiPoint","coordinates":[[10,40],[40,30],[20,20],[30,10]]}' 10 | ) 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_POINTFROMTEXT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_pointfromtext_success(): 5 | query = "SELECT @@DB_SCHEMA@@.ST_ASGEOJSON(@@DB_SCHEMA@@.ST_POINTFROMTEXT('POINT(-76.09130 18.42750)'));" 6 | result = run_query(query) 7 | assert result[0][0] == '{"type":"Point","coordinates":[-76.0913,18.4275]}' 8 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/parsers/test_ST_POINTFROMWKB.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_pointfromwkb_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_ASBINARY(@@DB_SCHEMA@@.ST_GEOMFROMWKT('POINT(-76.09130 18.42750)')) AS wkb 7 | ) 8 | SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_POINTFROMWKB(wkb)) FROM t;""" 9 | result = run_query(query) 10 | assert result[0][0] == 'POINT (-76.0913 18.4275)' 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_CONTAINS.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_contains_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geom, 7 | @@DB_SCHEMA@@.ST_MAKEPOINT(1, 1) as Point 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_CONTAINS(geom, point) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_COVERS.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_covers_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 3, 3) AS geomA, 7 | @@DB_SCHEMA@@.ST_MAKEBBOX(1, 1, 2, 2) as geomB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_COVERS(geomA, geomB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_CROSSES.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_crosses_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (1 0, 1 2)') AS lineA, 7 | @@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (0 1, 2 1)') AS lineB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_CROSSES(lineA, lineB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_EQUALS.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_equals_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (0 0, 2 2)') AS lineA, 7 | @@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (0 0, 1 1, 2 2)') AS lineB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_EQUALS(lineA, lineB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_INTERSECTS.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_intersects_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (1 0, 1 2)') AS lineA, 7 | @@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (0 1, 2 1)') AS lineB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_INTERSECTS(lineA, lineB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_OVERLAPS.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_overlaps_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geomA, 7 | @@DB_SCHEMA@@.ST_MAKEBBOX(1, 1, 3, 3) AS geomB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_OVERLAPS(geomA, geomB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_RELATE.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_relate_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geomA, 7 | @@DB_SCHEMA@@.ST_MAKEBBOX(1, 1, 3, 3) AS geomB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_RELATE(geomA, geomB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] == '212101212' 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_RELATEBOOL.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_relatebool_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geomA, 7 | @@DB_SCHEMA@@.ST_MAKEBBOX(1, 1, 3, 3) AS geomB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_RELATEBOOL(geomA, geomB, '212101212') FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_TOUCHES.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_touches_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geomA, 7 | @@DB_SCHEMA@@.ST_GEOMFROMWKT('LINESTRING (3 1, 1 3)') AS geomB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_TOUCHES(geomA, geomB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/predicates/test_ST_WITHIN.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_within_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_POINT(1, 1) AS geomA, 7 | @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geomB 8 | ) 9 | SELECT @@DB_SCHEMA@@.ST_WITHIN(geomA, geomB) FROM t;""" 10 | result = run_query(query) 11 | assert result[0][0] is True 12 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/transformations/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # Include this to allow importing utils functions 5 | sys.path.insert( 6 | 1, 7 | os.path.join( 8 | os.path.dirname(os.path.realpath(__file__)), 9 | '..', 10 | '..', 11 | '..', 12 | 'common', 13 | ), 14 | ) 15 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/transformations/test_ST_BOUNDARY.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_boundary_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geom 7 | ) 8 | SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_BOUNDARY(geom)) FROM t;""" 9 | result = run_query(query) 10 | assert result[0][0] == 'LINESTRING (0 0, 0 2, 2 2, 2 0, 0 0)' 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/transformations/test_ST_BUFFERPOINT.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_bufferpoint_success(): 5 | query = 'SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_BUFFERPOINT(@@DB_SCHEMA@@.ST_POINT(0, 0), 1));;' 6 | result = run_query(query) 7 | assert result[0][0].startswith( 8 | 'POLYGON ((0.00001 0, 0.00001 0.00001, 0 0.00001, -0.00001 0.00001, -0.00001 0,' 9 | ) 10 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/transformations/test_ST_CENTROID.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_centroid_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 2, 2) AS geom 7 | ) 8 | SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_CENTROID(geom)) FROM t;""" 9 | result = run_query(query) 10 | assert result[0][0] == 'POINT (1 1)' 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/transformations/test_ST_EXTERIORRING.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_exteriorring_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_MAKEBBOX(0, 0, 1, 1) AS geom 7 | ) 8 | SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_EXTERIORRING(geom)) FROM t;""" 9 | result = run_query(query) 10 | assert result[0][0] == 'LINESTRING (0 0, 0 1, 1 1, 1 0, 0 0)' 11 | -------------------------------------------------------------------------------- /clouds/databricks/modules/test/transformations/test_ST_TRANSLATE.py: -------------------------------------------------------------------------------- 1 | from python_utils.run_query import run_query 2 | 3 | 4 | def test_st_translate_success(): 5 | query = """WITH t AS ( 6 | SELECT @@DB_SCHEMA@@.ST_POINT(0, 0) AS point 7 | ) 8 | SELECT @@DB_SCHEMA@@.ST_ASTEXT(@@DB_SCHEMA@@.ST_TRANSLATE(point, 1, 2)) FROM t;""" 9 | result = run_query(query) 10 | assert result[0][0] == 'POINT (1 2)' 11 | -------------------------------------------------------------------------------- /clouds/databricks/version: -------------------------------------------------------------------------------- 1 | 0.1.1 2 | -------------------------------------------------------------------------------- /clouds/postgres/.env.template: -------------------------------------------------------------------------------- 1 | # This is a sample .env file for use in local development. 2 | # Duplicate this file as .env in the root of the project 3 | # and update the environment variables to match your desired 4 | # config. Replace each