From d24f97f1005948e074b54b217889e4aa6d5b85c6 Mon Sep 17 00:00:00 2001 From: vincentsarago Date: Wed, 23 Jul 2025 10:38:09 +0200 Subject: [PATCH 1/2] extract pool/connection creation within FastAPI endpoint --- CHANGES.md | 18 +- examples/non_app_usage.ipynb | 1269 ++++++++++++++++++++++++++++++++++ tipg/collections.py | 222 +++--- tipg/factory.py | 93 +-- 4 files changed, 1440 insertions(+), 162 deletions(-) create mode 100644 examples/non_app_usage.ipynb diff --git a/CHANGES.md b/CHANGES.md index d4f1c35..29d2bbf 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,14 @@ Note: Minor version `0.X.0` update might break the API, It's recommended to pin ## [unreleased] +## [1.2.0] - 2025-07-23 + +* remove `request: Request` in `Collection.features` and `Collection.get_tile` abstract methods + +* pass a `asyncpg.Connection` to `PgCollection.features` and `PgCollection.get_tile` instead of a `Request` object + +* switch `pg_get_collection_index` input from `asyncpg.BuildPgPool` to `asyncpg.Connection` object + ## [1.1.2] - 2025-07-02 * fix `rel` values for tiling scheme links @@ -402,11 +410,13 @@ Note: Minor version `0.X.0` update might break the API, It's recommended to pin - Initial release -[unreleased]: https://github.com/developmentseed/tipg/compare/1.1.1...HEAD -[1.1.1]: https://github.com/developmentseed/tipg/compare/1.1.1...1.1.1 +[unreleased]: https://github.com/developmentseed/tipg/compare/1.2.0...HEAD +[1.1.2]: https://github.com/developmentseed/tipg/compare/1.1.2...1.2.0 +[1.1.2]: https://github.com/developmentseed/tipg/compare/1.1.1...1.1.2 +[1.1.1]: https://github.com/developmentseed/tipg/compare/1.1.0...1.1.1 [1.1.0]: https://github.com/developmentseed/tipg/compare/1.0.1...1.1.0 [1.0.1]: https://github.com/developmentseed/tipg/compare/1.0.0...1.0.1 -[1.0.0]: https://github.com/developmentseed/tipg/compare/0.10.0...1.0.0 +[1.0.0]: https://github.com/developmentseed/tipg/compare/0.10.1...1.0.0 [0.10.1]: https://github.com/developmentseed/tipg/compare/0.10.0...0.10.1 [0.10.0]: https://github.com/developmentseed/tipg/compare/0.9.0...0.10.0 [0.9.0]: https://github.com/developmentseed/tipg/compare/0.8.0...0.9.0 @@ -418,7 +428,7 @@ Note: Minor version `0.X.0` update might break the API, It's recommended to pin [0.6.3]: https://github.com/developmentseed/tipg/compare/0.6.2...0.6.3 [0.6.2]: https://github.com/developmentseed/tipg/compare/0.6.1...0.6.2 [0.6.1]: https://github.com/developmentseed/tipg/compare/0.6.0...0.6.1 -[0.6.0]: https://github.com/developmentseed/tipg/compare/0.5.7...0.6.0 +[0.6.0]: https://github.com/developmentseed/tipg/compare/0.5.8...0.6.0 [0.5.8]: https://github.com/developmentseed/tipg/compare/0.5.7...0.5.8 [0.5.7]: https://github.com/developmentseed/tipg/compare/0.5.6...0.5.7 [0.5.6]: https://github.com/developmentseed/tipg/compare/0.5.5...0.5.6 diff --git a/examples/non_app_usage.ipynb b/examples/non_app_usage.ipynb new file mode 100644 index 0000000..748968b --- /dev/null +++ b/examples/non_app_usage.ipynb @@ -0,0 +1,1269 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6d4231b4", + "metadata": {}, + "source": [ + "## How To Use `TiPg` Outside FastAPI application\n", + "\n", + "You can use `TiPg` package to create OGC Features/Tiles API but also to access your geospatial data stored in Postgres directly.\n", + "\n", + "In the notebook, we show how to use `TiPg` classes/methods to extract the list of `Collections` from a Postgres Db and to get `Features`." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "b29d637a", + "metadata": {}, + "outputs": [], + "source": [ + "from buildpg import asyncpg\n", + "\n", + "from tipg.settings import PostgresSettings, DatabaseSettings\n", + "from tipg.database import connection_factory\n", + "\n", + "from tipg.collections import pg_get_collection_index\n", + "\n", + "from folium import Map, GeoJson" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db5cc9e9", + "metadata": {}, + "outputs": [], + "source": [ + "db_settings = DatabaseSettings()\n", + "\n", + "# The connection factory will register custom TiPg SQL code\n", + "# on `pg_temp` schema on each connection\n", + "con_init = connection_factory(\n", + " db_settings.schemas,\n", + " db_settings.tipg_schema,\n", + ")\n", + "\n", + "settings = PostgresSettings(\n", + " database_url=\"postgresql://username:password@0.0.0.0:5439/postgis\"\n", + ")\n", + "\n", + "# Create Connection Pool\n", + "pool = await asyncpg.create_pool_b(\n", + " str(settings.database_url),\n", + " min_size=settings.db_min_conn_size,\n", + " max_size=settings.db_max_conn_size,\n", + " max_queries=settings.db_max_queries,\n", + " max_inactive_connection_lifetime=settings.db_max_inactive_conn_lifetime,\n", + " init=con_init,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "e038de3e", + "metadata": {}, + "source": [ + "### Fetch available Collections (Table/Function)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "16ab8db4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[PgCollection(type='Table', id='public.my_data_geo', table='my_data_geo', title=None, description=None, table_columns=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geography', description=None, geometry_type='Polygon', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], properties=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geography', description=None, geometry_type='Polygon', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], id_column=Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geography', description=None, geometry_type='Polygon', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), datetime_column=Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), parameters=[], dbschema='public'),\n", + " PgCollection(type='Table', id='public.my_data_date', table='my_data_date', title=None, description=None, table_columns=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], properties=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], id_column=Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), datetime_column=Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), parameters=[], dbschema='public'),\n", + " PgCollection(type='Table', id='public.my_data_alt', table='my_data_alt', title=None, description=None, table_columns=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], properties=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], id_column=Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), datetime_column=Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), parameters=[], dbschema='public'),\n", + " PgCollection(type='Table', id='public.my_data', table='my_data', title=None, description=None, table_columns=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], properties=[Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), Column(name='datetime', type='timestamp', description=None, geometry_type=None, srid=None, bounds=None, mindt='2004-10-19T10:23:54+00:00', maxdt='2004-10-24T10:23:54+00:00'), Column(name='decimal', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='numeric', type='numeric', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='otherdt', type='timestamptz', description=None, geometry_type=None, srid=None, bounds=None, mindt='2005-10-19T10:23:54+00:00', maxdt='2005-10-24T10:23:54+00:00'), Column(name='othergeom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-42.90204220817502, 75.87688933851058, -15.566077494603507, 80.75962748726592], mindt=None, maxdt=None)], id_column=Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-47.5356, 74.8049, -8.97407, 81.8555], mindt=None, maxdt=None), datetime_column=Column(name='datedt', type='date', description=None, geometry_type=None, srid=None, bounds=None, mindt='2007-10-19T00:00:00+00:00', maxdt='2007-10-24T00:00:00+00:00'), parameters=[], dbschema='public'),\n", + " PgCollection(type='Table', id='public.sentinel_mgrs', table='sentinel_mgrs', title=None, description=None, table_columns=[Column(name='geom', type='geometry', description=None, geometry_type='Polygon', srid=4326, bounds=[-180.0, -83.8359514208, 180.0, 83.7483453546], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], properties=[Column(name='geom', type='geometry', description=None, geometry_type='Polygon', srid=4326, bounds=[-180.0, -83.8359514208, 180.0, 83.7483453546], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], id_column=Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Polygon', srid=4326, bounds=[-180.0, -83.8359514208, 180.0, 83.7483453546], mindt=None, maxdt=None), datetime_column=None, parameters=[], dbschema='public'),\n", + " PgCollection(type='Table', id='public.landsat_wrs', table='landsat_wrs', title=None, description=None, table_columns=[Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -82.6401, 180.0, 82.6401], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='path', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='row', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], properties=[Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -82.6401, 180.0, 82.6401], mindt=None, maxdt=None), Column(name='id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='path', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='row', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], id_column=Column(name='ogc_fid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -82.6401, 180.0, 82.6401], mindt=None, maxdt=None), datetime_column=None, parameters=[], dbschema='public'),\n", + " PgCollection(type='Table', id='public.gg_gemeindegrenze_mv', table='gg_gemeindegrenze_mv', title=None, description=None, table_columns=[Column(name='fid', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gemeinde_bfsnr', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gemeinde_name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Polygon', srid=2056, bounds=[8.661115396174294, 47.367809019968455, 9.4846396724923, 47.69564287160094], mindt=None, maxdt=None), Column(name='id', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='objectid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], properties=[Column(name='fid', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gemeinde_bfsnr', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gemeinde_name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='Polygon', srid=2056, bounds=[8.661115396174294, 47.367809019968455, 9.4846396724923, 47.69564287160094], mindt=None, maxdt=None), Column(name='id', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='objectid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], id_column=Column(name='id', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Polygon', srid=2056, bounds=[8.661115396174294, 47.367809019968455, 9.4846396724923, 47.69564287160094], mindt=None, maxdt=None), datetime_column=None, parameters=[], dbschema='public'),\n", + " PgCollection(type='Table', id='public.countries', table='countries', title=None, description=None, table_columns=[Column(name='abbrev', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='abbrev_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_is', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_un', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_us', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_wb', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='admin', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_diff', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_group', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='continent', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='economy', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='featurecla', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='fips_10_', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_md_est', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='MultiPolygon', srid=4326, bounds=[-180.0, -89.99892578125002, 180.0, 83.599609375], mindt=None, maxdt=None), Column(name='geou_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geounit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gu_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='homepart', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='income_grp', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3_eh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_n3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='labelrank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='lastcensus', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='level', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='long_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor13', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor7', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor8', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor9', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='max_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_zoom', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_alt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ar', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_bn', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ciawf', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_de', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_el', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_es', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hu', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_it', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ja', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ko', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_long', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_nl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ru', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sort', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sv', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_tr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_vi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_zh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ne_id', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_adm0', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_brk', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_est', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_rank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='postal', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_un', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_wb', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='scalerank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sov_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sovereignt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subregion', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subunit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='tiny', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='type', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='un_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikidataid', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikipedia', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id_eh', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_note', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], properties=[Column(name='abbrev', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='abbrev_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_is', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_un', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_us', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_wb', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='admin', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_diff', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_group', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='continent', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='economy', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='featurecla', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='fips_10_', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_md_est', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='MultiPolygon', srid=4326, bounds=[-180.0, -89.99892578125002, 180.0, 83.599609375], mindt=None, maxdt=None), Column(name='geou_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geounit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gu_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='homepart', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='income_grp', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3_eh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_n3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='labelrank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='lastcensus', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='level', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='long_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor13', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor7', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor8', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor9', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='max_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_zoom', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_alt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ar', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_bn', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ciawf', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_de', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_el', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_es', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hu', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_it', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ja', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ko', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_long', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_nl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ru', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sort', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sv', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_tr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_vi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_zh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ne_id', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_adm0', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_brk', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_est', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_rank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='postal', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_un', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_wb', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='scalerank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sov_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sovereignt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subregion', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subunit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='tiny', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='type', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='un_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikidataid', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikipedia', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id_eh', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_note', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], id_column=Column(name='gid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='MultiPolygon', srid=4326, bounds=[-180.0, -89.99892578125002, 180.0, 83.599609375], mindt=None, maxdt=None), datetime_column=None, parameters=[], dbschema='public'),\n", + " PgCollection(type='Function', id='public.st_subdivide', table='st_subdivide', title=None, description=None, table_columns=[Column(name='st_subdivide', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None)], properties=[Column(name='st_subdivide', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None)], id_column=None, geometry_column=Column(name='st_subdivide', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None), datetime_column=None, parameters=[Parameter(name='geom', type='geometry', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None, default=None), Parameter(name='maxvertices', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None, default='256'), Parameter(name='gridsize', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None, default='-1.0')], dbschema='public'),\n", + " PgCollection(type='Function', id='public.st_hexagongrid', table='st_hexagongrid', title=None, description=None, table_columns=[Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None), Column(name='i', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='j', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], properties=[Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None), Column(name='i', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='j', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], id_column=None, geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None), datetime_column=None, parameters=[Parameter(name='size', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None, default=None), Parameter(name='bounds', type='geometry', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None, default=None)], dbschema='public'),\n", + " PgCollection(type='Function', id='public.st_squaregrid', table='st_squaregrid', title=None, description=None, table_columns=[Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None), Column(name='i', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='j', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], properties=[Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None), Column(name='i', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='j', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], id_column=None, geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='Geometry', srid=4326, bounds=[-180.0, -90.0, 180.0, 90.0], mindt=None, maxdt=None), datetime_column=None, parameters=[Parameter(name='size', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None, default=None), Parameter(name='bounds', type='geometry', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None, default=None)], dbschema='public')]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "async with pool.acquire() as conn:\n", + " db_collections = await pg_get_collection_index(conn, settings=db_settings)\n", + "\n", + "db_collections" + ] + }, + { + "cell_type": "markdown", + "id": "bb52ca30", + "metadata": {}, + "source": [ + "### Get Features from `public.countries`" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f99747f5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "PgCollection(type='Table', id='public.countries', table='countries', title=None, description=None, table_columns=[Column(name='abbrev', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='abbrev_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_is', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_un', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_us', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_wb', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='admin', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_diff', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_group', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='continent', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='economy', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='featurecla', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='fips_10_', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_md_est', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='MultiPolygon', srid=4326, bounds=[-180.0, -89.99892578125002, 180.0, 83.599609375], mindt=None, maxdt=None), Column(name='geou_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geounit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gu_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='homepart', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='income_grp', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3_eh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_n3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='labelrank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='lastcensus', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='level', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='long_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor13', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor7', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor8', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor9', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='max_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_zoom', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_alt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ar', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_bn', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ciawf', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_de', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_el', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_es', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hu', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_it', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ja', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ko', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_long', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_nl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ru', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sort', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sv', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_tr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_vi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_zh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ne_id', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_adm0', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_brk', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_est', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_rank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='postal', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_un', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_wb', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='scalerank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sov_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sovereignt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subregion', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subunit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='tiny', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='type', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='un_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikidataid', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikipedia', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id_eh', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_note', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], properties=[Column(name='abbrev', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='abbrev_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_is', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_un', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_us', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_a3_wb', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='adm0_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='admin', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_diff', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_group', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='brk_name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='continent', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='economy', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='featurecla', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='fips_10_', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='formal_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_md_est', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gdp_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geom', type='geometry', description=None, geometry_type='MultiPolygon', srid=4326, bounds=[-180.0, -89.99892578125002, 180.0, 83.599609375], mindt=None, maxdt=None), Column(name='geou_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='geounit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='gu_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='homepart', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='income_grp', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_a3_eh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='iso_n3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='labelrank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='lastcensus', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='level', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='long_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor13', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor7', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor8', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='mapcolor9', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='max_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_label', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='min_zoom', type='float8', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_alt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ar', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_bn', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ciawf', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_de', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_el', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_en', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_es', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_fr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_hu', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_id', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_it', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ja', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ko', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_len', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_long', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_nl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pl', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_pt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_ru', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sort', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_sv', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_tr', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_vi', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='name_zh', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='ne_id', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_adm0', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='note_brk', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_est', type='bigint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_rank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='pop_year', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='postal', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_un', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='region_wb', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='scalerank', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sov_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='sovereignt', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='su_dif', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subregion', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='subunit', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='tiny', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='type', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='un_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a2', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wb_a3', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikidataid', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='wikipedia', type='smallint', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_id_eh', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), Column(name='woe_note', type='text', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None)], id_column=Column(name='gid', type='integer', description=None, geometry_type=None, srid=None, bounds=None, mindt=None, maxdt=None), geometry_column=Column(name='geom', type='geometry', description=None, geometry_type='MultiPolygon', srid=4326, bounds=[-180.0, -89.99892578125002, 180.0, 83.599609375], mindt=None, maxdt=None), datetime_column=None, parameters=[], dbschema='public')" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "collection = next(filter(lambda col: col.id == \"public.countries\", db_collections))\n", + "collection" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "a364e156", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "async with pool.acquire() as conn:\n", + " res = await collection.features(conn, limit=100)\n", + "\n", + "data = {\"type\": \"FeatureCollection\", \"features\": res[\"items\"]}\n", + "\n", + "m = Map(\n", + " tiles=\"OpenStreetMap\",\n", + " location=(0, 0),\n", + " zoom_start=1,\n", + ")\n", + "\n", + "geo_json = GeoJson(data=data)\n", + "geo_json.add_to(m)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "id": "b5b67f71", + "metadata": {}, + "source": [ + "##### Let's use a CQL query to filter items based on a specific property" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f83744fe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'items': [{'type': 'Feature',\n", + " 'geometry': {'type': 'MultiPolygon',\n", + " 'coordinates': [[[[9.480371094, 42.805419922],\n", + " [9.454199219, 42.65859375],\n", + " [9.473242188, 42.615576172],\n", + " [9.509375, 42.585595703],\n", + " [9.526171875, 42.552636719],\n", + " [9.556445313, 42.1609375],\n", + " [9.550683594, 42.129736328],\n", + " [9.428417969, 41.972412109],\n", + " [9.400878906, 41.926220703],\n", + " [9.394824219, 41.731201172],\n", + " [9.37421875, 41.678808594],\n", + " [9.330859375, 41.627148438],\n", + " [9.253417969, 41.460058594],\n", + " [9.186132813, 41.384912109],\n", + " [9.003027344, 41.4765625],\n", + " [8.895019531, 41.516162109],\n", + " [8.842089844, 41.558886719],\n", + " [8.807519531, 41.588378906],\n", + " [8.829785156, 41.627685547],\n", + " [8.879003906, 41.668554688],\n", + " [8.886816406, 41.700683594],\n", + " [8.770996094, 41.737109375],\n", + " [8.71796875, 41.761425781],\n", + " [8.718652344, 41.804003906],\n", + " [8.758691406, 41.870410156],\n", + " [8.740429688, 41.925146484],\n", + " [8.673632813, 41.922363281],\n", + " [8.621875, 41.930712891],\n", + " [8.615136719, 41.959130859],\n", + " [8.653417969, 41.995556641],\n", + " [8.702539063, 42.043115234],\n", + " [8.700976563, 42.095605469],\n", + " [8.641601562, 42.118212891],\n", + " [8.587792969, 42.160839844],\n", + " [8.566210938, 42.218798828],\n", + " [8.607910156, 42.258447266],\n", + " [8.675488281, 42.284033203],\n", + " [8.625878906, 42.343408203],\n", + " [8.592382813, 42.344726562],\n", + " [8.565625, 42.357714844],\n", + " [8.5875, 42.385302734],\n", + " [8.640039063, 42.4265625],\n", + " [8.713085938, 42.549755859],\n", + " [8.81484375, 42.607910156],\n", + " [8.994921875, 42.6453125],\n", + " [9.043652344, 42.661669922],\n", + " [9.088378906, 42.704980469],\n", + " [9.137890625, 42.732910156],\n", + " [9.198046875, 42.729199219],\n", + " [9.253515625, 42.712451172],\n", + " [9.287695313, 42.694628906],\n", + " [9.313378906, 42.713183594],\n", + " [9.338378906, 42.766894531],\n", + " [9.323046875, 42.8140625],\n", + " [9.330957031, 42.943798828],\n", + " [9.363183594, 43.017382812],\n", + " [9.415234375, 43.021484375],\n", + " [9.46328125, 42.981005859],\n", + " [9.460839844, 42.945214844],\n", + " [9.478613281, 42.860498047],\n", + " [9.480371094, 42.805419922]]],\n", + " [[[7.615625, 47.592724609],\n", + " [7.494921875, 47.547363281],\n", + " [7.467382813, 47.507666016],\n", + " [7.420019531, 47.455175781],\n", + " [7.343164063, 47.433105469],\n", + " [7.265722656, 47.42578125],\n", + " [7.203125, 47.432714844],\n", + " [7.167480469, 47.453710938],\n", + " [7.169238281, 47.473242188],\n", + " [7.136035156, 47.48984375],\n", + " [7.053417969, 47.489355469],\n", + " [6.968359375, 47.453222656],\n", + " [6.900390625, 47.394238281],\n", + " [6.921484375, 47.361230469],\n", + " [6.984082031, 47.352539062],\n", + " [7.000585938, 47.339453125],\n", + " [7.000585938, 47.322509766],\n", + " [6.978515625, 47.302050781],\n", + " [6.952050781, 47.2671875],\n", + " [6.820703125, 47.163183594],\n", + " [6.688085938, 47.058251953],\n", + " [6.666894531, 47.026513672],\n", + " [6.624804688, 47.004345703],\n", + " [6.45625, 46.948339844],\n", + " [6.438574219, 46.925878906],\n", + " [6.429003906, 46.832275391],\n", + " [6.41015625, 46.755419922],\n", + " [6.28515625, 46.683056641],\n", + " [6.160742188, 46.611035156],\n", + " [6.1296875, 46.566992188],\n", + " [6.10703125, 46.516064453],\n", + " [6.06796875, 46.458544922],\n", + " [6.060253906, 46.428173828],\n", + " [6.123242188, 46.378613281],\n", + " [6.115917969, 46.337646484],\n", + " [6.095898438, 46.279394531],\n", + " [6.036132812, 46.238085937],\n", + " [5.970019531, 46.214697266],\n", + " [5.971484375, 46.151220703],\n", + " [6.006640625, 46.142333984],\n", + " [6.086621094, 46.147021484],\n", + " [6.199414063, 46.193066406],\n", + " [6.272949219, 46.252246094],\n", + " [6.229589844, 46.308447266],\n", + " [6.22421875, 46.319433594],\n", + " [6.234667969, 46.332617188],\n", + " [6.321875, 46.393701172],\n", + " [6.42890625, 46.430517578],\n", + " [6.578222656, 46.437353516],\n", + " [6.758105469, 46.415771484],\n", + " [6.776074219, 46.406640625],\n", + " [6.767382813, 46.369189453],\n", + " [6.784179688, 46.313964844],\n", + " [6.816796875, 46.275195312],\n", + " [6.772070313, 46.165136719],\n", + " [6.805664062, 46.130664062],\n", + " [6.858007813, 46.089404297],\n", + " [6.897265625, 46.051757812],\n", + " [6.953710938, 46.017138672],\n", + " [7.00390625, 45.958837891],\n", + " [7.02109375, 45.92578125],\n", + " [6.940820313, 45.868359375],\n", + " [6.804492188, 45.814550781],\n", + " [6.789160156, 45.780078125],\n", + " [6.790917969, 45.740869141],\n", + " [6.80625, 45.710009766],\n", + " [6.881445313, 45.670361328],\n", + " [6.962402344, 45.580566406],\n", + " [7.013671875, 45.500488281],\n", + " [7.126074219, 45.423681641],\n", + " [7.153417969, 45.400927734],\n", + " [7.146386719, 45.381738281],\n", + " [7.116796875, 45.349023437],\n", + " [7.078320313, 45.239941406],\n", + " [7.032421875, 45.222607422],\n", + " [6.98125, 45.215576172],\n", + " [6.842285156, 45.135644531],\n", + " [6.780371094, 45.1453125],\n", + " [6.692285156, 45.144287109],\n", + " [6.627734375, 45.11796875],\n", + " [6.634765625, 45.068164062],\n", + " [6.69140625, 45.022607422],\n", + " [6.724707031, 44.972998047],\n", + " [6.738183594, 44.921386719],\n", + " [6.801074219, 44.883154297],\n", + " [6.889355469, 44.860302734],\n", + " [6.93984375, 44.858740234],\n", + " [6.972851563, 44.845019531],\n", + " [6.992675781, 44.827294922],\n", + " [7.030664063, 44.716699219],\n", + " [7.007910156, 44.688964844],\n", + " [6.960351563, 44.677148437],\n", + " [6.931933594, 44.631640625],\n", + " [6.875195313, 44.564550781],\n", + " [6.84296875, 44.510693359],\n", + " [6.878613281, 44.46328125],\n", + " [6.893847656, 44.428173828],\n", + " [6.874804688, 44.392041016],\n", + " [6.900195313, 44.335742187],\n", + " [6.967285156, 44.280029297],\n", + " [7.149414062, 44.201708984],\n", + " [7.318554688, 44.137988281],\n", + " [7.370898438, 44.127392578],\n", + " [7.599414063, 44.168359375],\n", + " [7.637207031, 44.16484375],\n", + " [7.665039062, 44.116015625],\n", + " [7.677148438, 44.083154297],\n", + " [7.651464844, 44.033642578],\n", + " [7.589648438, 43.965429688],\n", + " [7.52265625, 43.911083984],\n", + " [7.48203125, 43.864892578],\n", + " [7.490527344, 43.822949219],\n", + " [7.493164062, 43.767138672],\n", + " [7.438671875, 43.750439453],\n", + " [7.436914063, 43.761474609],\n", + " [7.414453125, 43.770898437],\n", + " [7.395019531, 43.765332031],\n", + " [7.380078125, 43.753222656],\n", + " [7.377734375, 43.731738281],\n", + " [7.261523438, 43.69609375],\n", + " [7.181445313, 43.659130859],\n", + " [6.864746094, 43.438330078],\n", + " [6.716601563, 43.373583984],\n", + " [6.687402344, 43.334570312],\n", + " [6.657226562, 43.261669922],\n", + " [6.570214844, 43.199072266],\n", + " [6.494042969, 43.169287109],\n", + " [6.305371094, 43.138720703],\n", + " [6.115917969, 43.072363281],\n", + " [6.030566406, 43.100976562],\n", + " [5.809472656, 43.097900391],\n", + " [5.671582031, 43.177832031],\n", + " [5.406542969, 43.228515625],\n", + " [5.320214844, 43.344921875],\n", + " [5.199511719, 43.352490234],\n", + " [5.120410156, 43.348974609],\n", + " [5.073144531, 43.366601562],\n", + " [5.060839844, 43.406298828],\n", + " [5.059765625, 43.44453125],\n", + " [4.975976563, 43.426953125],\n", + " [4.911914063, 43.426953125],\n", + " [4.873730469, 43.411621094],\n", + " [4.843554688, 43.393945312],\n", + " [4.807910156, 43.405224609],\n", + " [4.787207031, 43.401416016],\n", + " [4.7890625, 43.37890625],\n", + " [4.712109375, 43.373291016],\n", + " [4.628710938, 43.387109375],\n", + " [4.409765625, 43.447216797],\n", + " [4.376171875, 43.456396484],\n", + " [4.22421875, 43.479638672],\n", + " [4.162792969, 43.503662109],\n", + " [4.113085938, 43.563037109],\n", + " [4.075097656, 43.581835937],\n", + " [4.052636719, 43.593066406],\n", + " [3.910839844, 43.563085938],\n", + " [3.861621094, 43.516357422],\n", + " [3.784765625, 43.461621094],\n", + " [3.258886719, 43.193212891],\n", + " [3.162890625, 43.080761719],\n", + " [3.051757812, 42.915136719],\n", + " [3.043066406, 42.837890625],\n", + " [3.090917969, 42.590869141],\n", + " [3.197851563, 42.461181641],\n", + " [3.211425781, 42.431152344],\n", + " [3.152148438, 42.431005859],\n", + " [3.052636719, 42.447216797],\n", + " [2.970019531, 42.467236328],\n", + " [2.89140625, 42.456054688],\n", + " [2.815625, 42.429248047],\n", + " [2.749414063, 42.413037109],\n", + " [2.701855469, 42.408496094],\n", + " [2.670019531, 42.393017578],\n", + " [2.654785156, 42.362109375],\n", + " [2.651660156, 42.340478516],\n", + " [2.56796875, 42.345800781],\n", + " [2.374414063, 42.390283203],\n", + " [2.200390625, 42.420947266],\n", + " [2.098339844, 42.386083984],\n", + " [2.032714844, 42.353515625],\n", + " [1.986523438, 42.358496094],\n", + " [1.951464844, 42.392773438],\n", + " [1.927929688, 42.426318359],\n", + " [1.859765625, 42.457080078],\n", + " [1.706054688, 42.503320312],\n", + " [1.713964844, 42.525634766],\n", + " [1.740234375, 42.556738281],\n", + " [1.739453125, 42.575927734],\n", + " [1.709863281, 42.604443359],\n", + " [1.568164063, 42.635009766],\n", + " [1.501367188, 42.642724609],\n", + " [1.458886719, 42.621679688],\n", + " [1.428320313, 42.595898438],\n", + " [1.349414063, 42.690673828],\n", + " [1.293261719, 42.709960938],\n", + " [1.208300781, 42.713134766],\n", + " [1.111132813, 42.742041016],\n", + " [1.010058594, 42.778955078],\n", + " [0.764453125, 42.838037109],\n", + " [0.696875, 42.845117187],\n", + " [0.669824219, 42.835742187],\n", + " [0.651757813, 42.800439453],\n", + " [0.641992188, 42.700634766],\n", + " [0.631640625, 42.689599609],\n", + " [0.517675781, 42.686279297],\n", + " [0.377246094, 42.700146484],\n", + " [0.312890625, 42.693261719],\n", + " [0.25546875, 42.692919922],\n", + " [0.201367188, 42.719335938],\n", + " [-0.041162109, 42.689111328],\n", + " [-0.081494141, 42.703857422],\n", + " [-0.140039062, 42.748925781],\n", + " [-0.205322266, 42.785302734],\n", + " [-0.256054687, 42.803955078],\n", + " [-0.299316406, 42.825341797],\n", + " [-0.338574219, 42.828808594],\n", + " [-0.3984375, 42.808105469],\n", + " [-0.481152344, 42.799316406],\n", + " [-0.549804688, 42.802001953],\n", + " [-0.586425781, 42.798974609],\n", + " [-0.740185547, 42.909521484],\n", + " [-0.762646484, 42.939794922],\n", + " [-0.839208984, 42.948193359],\n", + " [-0.933837891, 42.949511719],\n", + " [-1.175439453, 43.021142578],\n", + " [-1.285449219, 43.059619141],\n", + " [-1.3015625, 43.082470703],\n", + " [-1.300048828, 43.100976562],\n", + " [-1.318847656, 43.096972656],\n", + " [-1.352734375, 43.064257812],\n", + " [-1.370507812, 43.037597656],\n", + " [-1.394042969, 43.032617187],\n", + " [-1.428759766, 43.036767578],\n", + " [-1.460839844, 43.051757812],\n", + " [-1.48046875, 43.071142578],\n", + " [-1.459423828, 43.104980469],\n", + " [-1.422607422, 43.149121094],\n", + " [-1.407324219, 43.197119141],\n", + " [-1.410693359, 43.240087891],\n", + " [-1.471728516, 43.267675781],\n", + " [-1.561474609, 43.279199219],\n", + " [-1.627148437, 43.282470703],\n", + " [-1.712841797, 43.30703125],\n", + " [-1.753271484, 43.324707031],\n", + " [-1.792724609, 43.372558594],\n", + " [-1.794042969, 43.407324219],\n", + " [-1.631445312, 43.438037109],\n", + " [-1.484863281, 43.563769531],\n", + " [-1.345996094, 44.020214844],\n", + " [-1.245507812, 44.559863281],\n", + " [-1.170800781, 44.661816406],\n", + " [-1.076953125, 44.68984375],\n", + " [-1.152880859, 44.764013672],\n", + " [-1.200390625, 44.726464844],\n", + " [-1.2203125, 44.686621094],\n", + " [-1.245214844, 44.666699219],\n", + " [-1.1890625, 45.161474609],\n", + " [-1.149072266, 45.342626953],\n", + " [-1.081005859, 45.532421875],\n", + " [-0.941748047, 45.457080078],\n", + " [-0.826318359, 45.380664062],\n", + " [-0.766650391, 45.314355469],\n", + " [-0.691113281, 45.093457031],\n", + " [-0.633984375, 45.047119141],\n", + " [-0.548486328, 45.000585938],\n", + " [-0.582275391, 45.051367188],\n", + " [-0.641113281, 45.090185547],\n", + " [-0.733105469, 45.384619141],\n", + " [-0.790771484, 45.468017578],\n", + " [-0.880664062, 45.538183594],\n", + " [-1.169970703, 45.6859375],\n", + " [-1.195996094, 45.714453125],\n", + " [-1.209960938, 45.770898437],\n", + " [-1.114355469, 45.768505859],\n", + " [-1.031738281, 45.741064453],\n", + " [-1.041503906, 45.77265625],\n", + " [-1.066015625, 45.805664062],\n", + " [-1.104394531, 45.925341797],\n", + " [-1.136376953, 46.204833984],\n", + " [-1.13203125, 46.252685547],\n", + " [-1.146289062, 46.311376953],\n", + " [-1.238818359, 46.324511719],\n", + " [-1.312792969, 46.326904297],\n", + " [-1.392480469, 46.350097656],\n", + " [-1.786523437, 46.51484375],\n", + " [-1.921435547, 46.684814453],\n", + " [-2.059375, 46.810302734],\n", + " [-2.092480469, 46.865039062],\n", + " [-2.090283203, 46.920507812],\n", + " [-2.018896484, 47.037646484],\n", + " [-2.081933594, 47.111621094],\n", + " [-2.143554688, 47.126318359],\n", + " [-2.197070312, 47.162939453],\n", + " [-2.148583984, 47.223925781],\n", + " [-2.108300781, 47.262939453],\n", + " [-2.027587891, 47.273583984],\n", + " [-1.921728516, 47.260644531],\n", + " [-1.821289062, 47.225341797],\n", + " [-1.742529297, 47.215966797],\n", + " [-1.975390625, 47.310693359],\n", + " [-2.353027344, 47.278759766],\n", + " [-2.434423828, 47.290966797],\n", + " [-2.503125, 47.312060547],\n", + " [-2.530029297, 47.381591797],\n", + " [-2.476318359, 47.412939453],\n", + " [-2.427685547, 47.470898438],\n", + " [-2.482714844, 47.511621094],\n", + " [-2.554052734, 47.527050781],\n", + " [-2.665917969, 47.526171875],\n", + " [-2.7703125, 47.513867188],\n", + " [-2.796777344, 47.537255859],\n", + " [-2.733105469, 47.601806641],\n", + " [-2.787207031, 47.625537109],\n", + " [-2.859375, 47.614453125],\n", + " [-2.9640625, 47.601074219],\n", + " [-3.064208984, 47.621337891],\n", + " [-3.158837891, 47.694677734],\n", + " [-3.221582031, 47.694140625],\n", + " [-3.264697266, 47.685107422],\n", + " [-3.328613281, 47.713330078],\n", + " [-3.395898437, 47.720410156],\n", + " [-3.443945312, 47.711035156],\n", + " [-3.5078125, 47.753125],\n", + " [-3.900927734, 47.837548828],\n", + " [-4.070703125, 47.847851562],\n", + " [-4.226416016, 47.809619141],\n", + " [-4.312109375, 47.822900391],\n", + " [-4.375097656, 47.877441406],\n", + " [-4.427978516, 47.968945312],\n", + " [-4.678808594, 48.039501953],\n", + " [-4.629199219, 48.085791016],\n", + " [-4.512402344, 48.096728516],\n", + " [-4.377832031, 48.128808594],\n", + " [-4.329443359, 48.169970703],\n", + " [-4.434619141, 48.21796875],\n", + " [-4.512207031, 48.229736328],\n", + " [-4.544335937, 48.246972656],\n", + " [-4.577148438, 48.290039062],\n", + " [-4.530664062, 48.309716797],\n", + " [-4.497900391, 48.299267578],\n", + " [-4.403320312, 48.293066406],\n", + " [-4.24140625, 48.303662109],\n", + " [-4.301757812, 48.347070312],\n", + " [-4.364404297, 48.356738281],\n", + " [-4.393164062, 48.367626953],\n", + " [-4.524804687, 48.372314453],\n", + " [-4.584716797, 48.357519531],\n", + " [-4.719384766, 48.363134766],\n", + " [-4.748535156, 48.410009766],\n", + " [-4.7625, 48.450244141],\n", + " [-4.720751953, 48.539892578],\n", + " [-4.531201172, 48.619970703],\n", + " [-4.058886719, 48.707519531],\n", + " [-3.855664062, 48.694726562],\n", + " [-3.714794922, 48.710498047],\n", + " [-3.545996094, 48.765673828],\n", + " [-3.471484375, 48.812939453],\n", + " [-3.231445312, 48.840820312],\n", + " [-3.003222656, 48.790673828],\n", + " [-2.792871094, 48.601074219],\n", + " [-2.692333984, 48.536816406],\n", + " [-2.446191406, 48.648291016],\n", + " [-2.079443359, 48.645019531],\n", + " [-2.003710937, 48.582080078],\n", + " [-1.973144531, 48.635107422],\n", + " [-1.905712891, 48.697119141],\n", + " [-1.851953125, 48.668847656],\n", + " [-1.824707031, 48.630517578],\n", + " [-1.437646484, 48.64140625],\n", + " [-1.376464844, 48.652587891],\n", + " [-1.48046875, 48.697607422],\n", + " [-1.565478516, 48.805517578],\n", + " [-1.583105469, 49.202392578],\n", + " [-1.690332031, 49.313183594],\n", + " [-1.813427734, 49.490136719],\n", + " [-1.870068359, 49.595117187],\n", + " [-1.875390625, 49.631396484],\n", + " [-1.856445312, 49.683789062],\n", + " [-1.705126953, 49.680957031],\n", + " [-1.588232422, 49.667675781],\n", + " [-1.365722656, 49.707275391],\n", + " [-1.258642578, 49.680175781],\n", + " [-1.264941406, 49.598242188],\n", + " [-1.232275391, 49.494873047],\n", + " [-1.194970703, 49.444824219],\n", + " [-1.138525391, 49.387890625],\n", + " [-0.959130859, 49.393164062],\n", + " [-0.765527344, 49.359716797],\n", + " [-0.520898437, 49.354541016],\n", + " [-0.163476562, 49.296777344],\n", + " [-0.011181641, 49.330224609],\n", + " [0.136132813, 49.401513672],\n", + " [0.416894531, 49.448388672],\n", + " [0.439257813, 49.473193359],\n", + " [0.277636719, 49.46328125],\n", + " [0.129394531, 49.508447266],\n", + " [0.109375, 49.557519531],\n", + " [0.1265625, 49.6015625],\n", + " [0.18671875, 49.703027344],\n", + " [0.616210938, 49.862939453],\n", + " [0.924121094, 49.910205078],\n", + " [1.245507813, 49.998242188],\n", + " [1.407226562, 50.088525391],\n", + " [1.5140625, 50.205078125],\n", + " [1.5484375, 50.230712891],\n", + " [1.592773438, 50.252197266],\n", + " [1.5515625, 50.293945312],\n", + " [1.579492188, 50.739257812],\n", + " [1.609570313, 50.819482422],\n", + " [1.672265625, 50.885009766],\n", + " [1.767675781, 50.935693359],\n", + " [1.9125, 50.990625],\n", + " [2.445703125, 51.066503906],\n", + " [2.524902344, 51.097119141],\n", + " [2.536035156, 51.049511719],\n", + " [2.574804688, 50.988574219],\n", + " [2.601464844, 50.955273438],\n", + " [2.579296875, 50.911767578],\n", + " [2.596777344, 50.875927734],\n", + " [2.669140625, 50.811425781],\n", + " [2.759375, 50.750634766],\n", + " [2.839746094, 50.711767578],\n", + " [2.862402344, 50.716015625],\n", + " [2.921972656, 50.727050781],\n", + " [3.022851563, 50.766894531],\n", + " [3.106835938, 50.779443359],\n", + " [3.154882813, 50.748925781],\n", + " [3.18203125, 50.731689453],\n", + " [3.234960938, 50.662939453],\n", + " [3.249804688, 50.591162109],\n", + " [3.273339844, 50.531542969],\n", + " [3.316210938, 50.507373047],\n", + " [3.476953125, 50.499462891],\n", + " [3.595410156, 50.47734375],\n", + " [3.626757813, 50.457324219],\n", + " [3.667285156, 50.324804688],\n", + " [3.689355469, 50.306054687],\n", + " [3.718847656, 50.321679687],\n", + " [3.748046875, 50.343505859],\n", + " [3.788574219, 50.346972656],\n", + " [3.858105469, 50.338574219],\n", + " [3.949707031, 50.3359375],\n", + " [4.044140625, 50.321337891],\n", + " [4.174609375, 50.246484375],\n", + " [4.169628906, 50.221777344],\n", + " [4.144140625, 50.178417969],\n", + " [4.135253906, 50.143798828],\n", + " [4.157714844, 50.129882812],\n", + " [4.1921875, 50.094140625],\n", + " [4.183886719, 50.052832031],\n", + " [4.150292969, 50.023876953],\n", + " [4.136816406, 50],\n", + " [4.137011719, 49.984472656],\n", + " [4.149316406, 49.971582031],\n", + " [4.176074219, 49.960253906],\n", + " [4.36875, 49.944970703],\n", + " [4.545019531, 49.960253906],\n", + " [4.656152344, 50.002441406],\n", + " [4.675097656, 50.046875],\n", + " [4.706640625, 50.097070312],\n", + " [4.772851563, 50.1390625],\n", + " [4.818652344, 50.153173828],\n", + " [4.860546875, 50.135888672],\n", + " [4.790039062, 49.959570312],\n", + " [4.841503906, 49.914501953],\n", + " [4.849121094, 49.847119141],\n", + " [4.867578125, 49.788134766],\n", + " [4.930566406, 49.789257812],\n", + " [5.006933594, 49.778369141],\n", + " [5.061035156, 49.756542969],\n", + " [5.124121094, 49.721484375],\n", + " [5.215039063, 49.689257812],\n", + " [5.278808594, 49.677929688],\n", + " [5.301953125, 49.650976562],\n", + " [5.353515625, 49.619824219],\n", + " [5.434667969, 49.554492187],\n", + " [5.507324219, 49.510888672],\n", + " [5.542382813, 49.511035156],\n", + " [5.610058594, 49.528222656],\n", + " [5.710449219, 49.539208984],\n", + " [5.789746094, 49.53828125],\n", + " [5.8234375, 49.505078125],\n", + " [5.901367188, 49.489746094],\n", + " [5.92890625, 49.477539062],\n", + " [5.959472656, 49.454638672],\n", + " [6.011425781, 49.445458984],\n", + " [6.074121094, 49.454638672],\n", + " [6.119921875, 49.485205078],\n", + " [6.181054688, 49.498925781],\n", + " [6.2421875, 49.494335938],\n", + " [6.27734375, 49.477539062],\n", + " [6.344335938, 49.452734375],\n", + " [6.382226563, 49.458154297],\n", + " [6.458105469, 49.442871094],\n", + " [6.534277344, 49.394677734],\n", + " [6.566308594, 49.346191406],\n", + " [6.574707031, 49.319677734],\n", + " [6.607617188, 49.290869141],\n", + " [6.735449219, 49.160595703],\n", + " [6.776269531, 49.154150391],\n", + " [6.820703125, 49.173925781],\n", + " [6.849511719, 49.201953125],\n", + " [6.891210938, 49.207519531],\n", + " [6.958300781, 49.194628906],\n", + " [7.001464844, 49.179882812],\n", + " [7.022167969, 49.1234375],\n", + " [7.03671875, 49.112695312],\n", + " [7.065722656, 49.124853516],\n", + " [7.117382813, 49.127539062],\n", + " [7.199902344, 49.113623047],\n", + " [7.313378906, 49.129541016],\n", + " [7.404199219, 49.153076172],\n", + " [7.450585938, 49.152197266],\n", + " [7.525488281, 49.086376953],\n", + " [7.6109375, 49.061767578],\n", + " [7.79921875, 49.041894531],\n", + " [8.001269531, 49.0109375],\n", + " [8.080664063, 48.985888672],\n", + " [8.134863281, 48.973583984],\n", + " [8.140332031, 48.886425781],\n", + " [8.124023438, 48.873291016],\n", + " [7.922753906, 48.698535156],\n", + " [7.837988281, 48.636035156],\n", + " [7.794824219, 48.546826172],\n", + " [7.765136719, 48.410009766],\n", + " [7.705664063, 48.280029297],\n", + " [7.616601563, 48.156787109],\n", + " [7.584179688, 48.064306641],\n", + " [7.608496094, 48.002587891],\n", + " [7.593261719, 47.905664062],\n", + " [7.538574219, 47.773632812],\n", + " [7.529394531, 47.673876953],\n", + " [7.565429688, 47.606542969],\n", + " [7.615625, 47.592724609]]],\n", + " [[[-1.178320312, 45.904052734],\n", + " [-1.213574219, 45.816601562],\n", + " [-1.280273438, 45.897119141],\n", + " [-1.368701172, 45.967675781],\n", + " [-1.388867187, 46.032958984],\n", + " [-1.388671875, 46.050390625],\n", + " [-1.285058594, 46.002685547],\n", + " [-1.178320312, 45.904052734]]],\n", + " [[[45.180273438, -12.976757813],\n", + " [45.117578125, -12.984960938],\n", + " [45.087695313, -12.958496094],\n", + " [45.069433594, -12.895605469],\n", + " [45.08828125, -12.835058594],\n", + " [45.093554688, -12.786132812],\n", + " [45.042578125, -12.701269531],\n", + " [45.092382813, -12.653027344],\n", + " [45.134765625, -12.709179688],\n", + " [45.158789063, -12.712988281],\n", + " [45.223144531, -12.752148438],\n", + " [45.204296875, -12.824316406],\n", + " [45.20859375, -12.847949219],\n", + " [45.179394531, -12.920214844],\n", + " [45.180273438, -12.976757813]]],\n", + " [[[55.797363281, -21.339355469],\n", + " [55.656152344, -21.369042969],\n", + " [55.557617188, -21.358300781],\n", + " [55.362695313, -21.273632813],\n", + " [55.310351563, -21.217382813],\n", + " [55.2328125, -21.058398438],\n", + " [55.25, -21.002441406],\n", + " [55.311328125, -20.904101563],\n", + " [55.450488281, -20.865136719],\n", + " [55.596484375, -20.879589844],\n", + " [55.661914063, -20.90625],\n", + " [55.739160156, -21.021484375],\n", + " [55.8390625, -21.138574219],\n", + " [55.822460938, -21.277832031],\n", + " [55.797363281, -21.339355469]]],\n", + " [[[-60.826269531, 14.494482422],\n", + " [-60.836621094, 14.437402344],\n", + " [-60.862109375, 14.426269531],\n", + " [-60.899414062, 14.473779297],\n", + " [-61.063720703, 14.467089844],\n", + " [-61.088867188, 14.509570313],\n", + " [-61.090332031, 14.5296875],\n", + " [-61.011328125, 14.601904297],\n", + " [-61.104296875, 14.621240234],\n", + " [-61.141113281, 14.652392578],\n", + " [-61.219726562, 14.804394531],\n", + " [-61.213330078, 14.848583984],\n", + " [-61.180810547, 14.871923828],\n", + " [-61.127392578, 14.875292969],\n", + " [-61.027099609, 14.826171875],\n", + " [-60.952539062, 14.75625],\n", + " [-60.927148437, 14.755175781],\n", + " [-60.918652344, 14.735351562],\n", + " [-60.933691406, 14.686181641],\n", + " [-60.889160156, 14.64453125],\n", + " [-60.869970703, 14.613720703],\n", + " [-60.826269531, 14.494482422]]],\n", + " [[[-61.327148438, 16.230419922],\n", + " [-61.444824219, 16.219287109],\n", + " [-61.522167969, 16.228027344],\n", + " [-61.539990234, 16.299609375],\n", + " [-61.500585937, 16.360205078],\n", + " [-61.52890625, 16.433789062],\n", + " [-61.510644531, 16.477685547],\n", + " [-61.471191406, 16.506640625],\n", + " [-61.406445312, 16.468310547],\n", + " [-61.396142578, 16.413427734],\n", + " [-61.35546875, 16.363183594],\n", + " [-61.172607422, 16.256103516],\n", + " [-61.327148438, 16.230419922]]],\n", + " [[[-61.589550781, 16.006933594],\n", + " [-61.670458984, 15.962060547],\n", + " [-61.710253906, 15.975927734],\n", + " [-61.759423828, 16.062060547],\n", + " [-61.794091797, 16.300976562],\n", + " [-61.767138672, 16.340478516],\n", + " [-61.748046875, 16.355273438],\n", + " [-61.641503906, 16.325976563],\n", + " [-61.597021484, 16.2921875],\n", + " [-61.55234375, 16.270898437],\n", + " [-61.575048828, 16.227148437],\n", + " [-61.563867187, 16.047753906],\n", + " [-61.589550781, 16.006933594]]],\n", + " [[[-61.23046875, 15.889941406],\n", + " [-61.286230469, 15.886035156],\n", + " [-61.310742188, 15.894677734],\n", + " [-61.318408203, 15.954882813],\n", + " [-61.275292969, 15.996240234],\n", + " [-61.25, 16.006298828],\n", + " [-61.212353516, 15.959912109],\n", + " [-61.203417969, 15.921240234],\n", + " [-61.23046875, 15.889941406]]],\n", + " [[[-54.616259766, 2.326757812],\n", + " [-54.604736328, 2.335791016],\n", + " [-54.568408203, 2.342578125],\n", + " [-54.5359375, 2.343310547],\n", + " [-54.485546875, 2.416113281],\n", + " [-54.402001953, 2.461523437],\n", + " [-54.256738281, 2.713720703],\n", + " [-54.195507812, 2.817871094],\n", + " [-54.188085937, 2.874853516],\n", + " [-54.170703125, 2.993603516],\n", + " [-54.203125, 3.138183594],\n", + " [-54.188037109, 3.178759766],\n", + " [-54.063183594, 3.353320312],\n", + " [-54.009570312, 3.448535156],\n", + " [-54.005957031, 3.530517578],\n", + " [-53.990478516, 3.589550781],\n", + " [-54.005908203, 3.620410156],\n", + " [-54.034228516, 3.629394531],\n", + " [-54.081982422, 3.705957031],\n", + " [-54.112792969, 3.769433594],\n", + " [-54.197460938, 3.834423828],\n", + " [-54.255517578, 3.901074219],\n", + " [-54.350732422, 4.054101562],\n", + " [-54.342138672, 4.140039062],\n", + " [-54.369140625, 4.170947266],\n", + " [-54.398388672, 4.202490234],\n", + " [-54.396240234, 4.24140625],\n", + " [-54.416015625, 4.337646484],\n", + " [-54.440673828, 4.428027344],\n", + " [-54.449609375, 4.485009766],\n", + " [-54.426074219, 4.583007812],\n", + " [-54.440234375, 4.691992187],\n", + " [-54.471142578, 4.749316406],\n", + " [-54.4796875, 4.836523437],\n", + " [-54.473339844, 4.914697266],\n", + " [-54.446875, 4.958789062],\n", + " [-54.452197266, 5.013476562],\n", + " [-54.331640625, 5.187402344],\n", + " [-54.240185547, 5.288232422],\n", + " [-54.155957031, 5.358984375],\n", + " [-54.085302734, 5.411816406],\n", + " [-53.989599609, 5.676025391],\n", + " [-53.919921875, 5.768994141],\n", + " [-53.847167969, 5.782226562],\n", + " [-53.454443359, 5.563476562],\n", + " [-53.270361328, 5.543261719],\n", + " [-52.899316406, 5.425048828],\n", + " [-52.764990234, 5.273486328],\n", + " [-52.453955078, 5.021337891],\n", + " [-52.290527344, 4.9421875],\n", + " [-52.288916016, 4.876123047],\n", + " [-52.324609375, 4.770898437],\n", + " [-52.219970703, 4.862792969],\n", + " [-52.058105469, 4.717382812],\n", + " [-52.012304687, 4.645996094],\n", + " [-51.961914062, 4.514404297],\n", + " [-51.979345703, 4.429882812],\n", + " [-52.001708984, 4.386230469],\n", + " [-52.002929688, 4.352294922],\n", + " [-51.954785156, 4.399072266],\n", + " [-51.927685547, 4.436132812],\n", + " [-51.919580078, 4.524316406],\n", + " [-51.880273437, 4.633740234],\n", + " [-51.827539062, 4.635693359],\n", + " [-51.785644531, 4.570507812],\n", + " [-51.698632812, 4.286816406],\n", + " [-51.665820312, 4.228808594],\n", + " [-51.653271484, 4.138769531],\n", + " [-51.658105469, 4.098486328],\n", + " [-51.652539062, 4.061279297],\n", + " [-51.683447266, 4.039697266],\n", + " [-51.767089844, 3.992675781],\n", + " [-51.805273438, 3.929931641],\n", + " [-51.827490234, 3.869580078],\n", + " [-51.879492188, 3.828564453],\n", + " [-51.92890625, 3.776953125],\n", + " [-51.944335938, 3.735107422],\n", + " [-51.990625, 3.702001953],\n", + " [-51.999511719, 3.646875],\n", + " [-52.116113281, 3.452294922],\n", + " [-52.162597656, 3.364697266],\n", + " [-52.229443359, 3.271679687],\n", + " [-52.271240234, 3.237109375],\n", + " [-52.327880859, 3.181738281],\n", + " [-52.356640625, 3.117724609],\n", + " [-52.356640625, 3.0515625],\n", + " [-52.396386719, 2.972216797],\n", + " [-52.418408203, 2.903857422],\n", + " [-52.455859375, 2.864160156],\n", + " [-52.5546875, 2.64765625],\n", + " [-52.559472656, 2.573144531],\n", + " [-52.583007812, 2.52890625],\n", + " [-52.653173828, 2.425732422],\n", + " [-52.700634766, 2.363671875],\n", + " [-52.783398438, 2.3171875],\n", + " [-52.870410156, 2.266650391],\n", + " [-52.903466797, 2.211523437],\n", + " [-52.96484375, 2.183544922],\n", + " [-53.009716797, 2.181738281],\n", + " [-53.082275391, 2.201708984],\n", + " [-53.180078125, 2.211328125],\n", + " [-53.229785156, 2.204882812],\n", + " [-53.252197266, 2.232275391],\n", + " [-53.285498047, 2.295214844],\n", + " [-53.334423828, 2.339746094],\n", + " [-53.366015625, 2.32421875],\n", + " [-53.431835938, 2.279443359],\n", + " [-53.508984375, 2.253125],\n", + " [-53.563964844, 2.261914062],\n", + " [-53.683691406, 2.292919922],\n", + " [-53.734716797, 2.308544922],\n", + " [-53.750146484, 2.335009766],\n", + " [-53.767773438, 2.354833984],\n", + " [-53.794238281, 2.345996094],\n", + " [-53.829541016, 2.312939453],\n", + " [-53.876611328, 2.278271484],\n", + " [-53.946435547, 2.232568359],\n", + " [-54.089746094, 2.150488281],\n", + " [-54.130078125, 2.121044922],\n", + " [-54.167382812, 2.137060547],\n", + " [-54.227978516, 2.153320312],\n", + " [-54.293066406, 2.154248047],\n", + " [-54.433105469, 2.207519531],\n", + " [-54.515087891, 2.245458984],\n", + " [-54.550488281, 2.293066406],\n", + " [-54.591943359, 2.313769531],\n", + " [-54.616259766, 2.326757812]]]]},\n", + " 'id': 161,\n", + " 'properties': {'abbrev': 'Fr.',\n", + " 'abbrev_len': 3,\n", + " 'adm0_a3': 'FRA',\n", + " 'adm0_a3_is': 'FRA',\n", + " 'adm0_a3_un': -99,\n", + " 'adm0_a3_us': 'FRA',\n", + " 'adm0_a3_wb': -99,\n", + " 'adm0_dif': 1,\n", + " 'admin': 'France',\n", + " 'brk_a3': 'FRA',\n", + " 'brk_diff': 0,\n", + " 'brk_group': None,\n", + " 'brk_name': 'France',\n", + " 'continent': 'Europe',\n", + " 'economy': '1. Developed region: G7',\n", + " 'featurecla': 'Admin-0 country',\n", + " 'fips_10_': 'FR',\n", + " 'formal_en': 'French Republic',\n", + " 'formal_fr': None,\n", + " 'gdp_md_est': 2699000.0,\n", + " 'gdp_year': 2016,\n", + " 'geou_dif': 0,\n", + " 'geounit': 'France',\n", + " 'gid': 161,\n", + " 'gu_a3': 'FRA',\n", + " 'homepart': 1,\n", + " 'income_grp': '1. High income: OECD',\n", + " 'iso_a2': '-99',\n", + " 'iso_a3': '-99',\n", + " 'iso_a3_eh': 'FRA',\n", + " 'iso_n3': '250',\n", + " 'labelrank': 2,\n", + " 'lastcensus': -99,\n", + " 'level': 2,\n", + " 'long_len': 6,\n", + " 'mapcolor13': 11,\n", + " 'mapcolor7': 7,\n", + " 'mapcolor8': 5,\n", + " 'mapcolor9': 9,\n", + " 'max_label': 6.7,\n", + " 'min_label': 1.7,\n", + " 'min_zoom': 0.0,\n", + " 'name': 'France',\n", + " 'name_alt': None,\n", + " 'name_ar': 'فرنسا',\n", + " 'name_bn': 'ফ্রান্স',\n", + " 'name_ciawf': 'France',\n", + " 'name_de': 'Frankreich',\n", + " 'name_el': 'Γαλλία',\n", + " 'name_en': 'France',\n", + " 'name_es': 'Francia',\n", + " 'name_fr': 'France',\n", + " 'name_hi': 'फ़्रान्स',\n", + " 'name_hu': 'Franciaország',\n", + " 'name_id': 'Perancis',\n", + " 'name_it': 'Francia',\n", + " 'name_ja': 'フランス',\n", + " 'name_ko': '프랑스',\n", + " 'name_len': 6,\n", + " 'name_long': 'France',\n", + " 'name_nl': 'Frankrijk',\n", + " 'name_pl': 'Francja',\n", + " 'name_pt': 'França',\n", + " 'name_ru': 'Франция',\n", + " 'name_sort': 'France',\n", + " 'name_sv': 'Frankrike',\n", + " 'name_tr': 'Fransa',\n", + " 'name_vi': 'Pháp',\n", + " 'name_zh': '法国',\n", + " 'ne_id': 1159320637,\n", + " 'note_adm0': None,\n", + " 'note_brk': None,\n", + " 'pop_est': 67106161,\n", + " 'pop_rank': 16,\n", + " 'pop_year': 2017,\n", + " 'postal': 'F',\n", + " 'region_un': 'Europe',\n", + " 'region_wb': 'Europe & Central Asia',\n", + " 'scalerank': 1,\n", + " 'sov_a3': 'FR1',\n", + " 'sovereignt': 'France',\n", + " 'su_a3': 'FRA',\n", + " 'su_dif': 0,\n", + " 'subregion': 'Western Europe',\n", + " 'subunit': 'France',\n", + " 'tiny': -99,\n", + " 'type': 'Country',\n", + " 'un_a3': '250',\n", + " 'wb_a2': 'FR',\n", + " 'wb_a3': 'FRA',\n", + " 'wikidataid': 'Q142',\n", + " 'wikipedia': -99,\n", + " 'woe_id': -90,\n", + " 'woe_id_eh': 23424819,\n", + " 'woe_note': 'Includes only Metropolitan France (including Corsica)'}}],\n", + " 'matched': 1,\n", + " 'next': None,\n", + " 'prev': None}" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pygeofilter.parsers.cql2_json import parse as cql2_json_parser\n", + "\n", + "cql = cql2_json_parser(\n", + " {\n", + " \"op\": \"=\",\n", + " \"args\": [{\"property\": \"admin\"}, \"France\"],\n", + " }\n", + ")\n", + "\n", + "async with pool.acquire() as conn:\n", + " features = await collection.features(conn, cql_filter=cql)\n", + "\n", + "features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "288e9c77", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tipg/collections.py b/tipg/collections.py index 7e90ab4..82d6116 100644 --- a/tipg/collections.py +++ b/tipg/collections.py @@ -38,8 +38,6 @@ from fastapi import FastAPI -from starlette.requests import Request - mvt_settings = MVTSettings() features_settings = FeaturesSettings() @@ -326,12 +324,12 @@ def queryables(self) -> Dict: return {**geoms, **props} @abc.abstractmethod - async def features(self, request: Request, *args, **kwargs) -> ItemList: + async def features(self, *args, **kwargs) -> ItemList: """Get Items.""" ... @abc.abstractmethod - async def get_tile(self, request: Request, *args, **kwargs) -> bytes: + async def get_tile(self, *args, **kwargs) -> bytes: """Get MVT Tile.""" ... @@ -777,7 +775,7 @@ async def _features_count_query( async def features( self, - request: Request, + conn: asyncpg.Connection, *, ids_filter: Optional[List[str]] = None, bbox_filter: Optional[List[float]] = None, @@ -809,41 +807,40 @@ async def features( f"Limit can not be set higher than the `tipg_max_features_per_query` setting of {features_settings.max_features_per_query}" ) - async with request.app.state.pool.acquire() as conn: - matched = await self._features_count_query( + matched = await self._features_count_query( + conn, + ids_filter=ids_filter, + datetime_filter=datetime_filter, + bbox_filter=bbox_filter, + properties_filter=properties_filter, + function_parameters=function_parameters, + cql_filter=cql_filter, + geom=geom, + dt=dt, + ) + + features = [ + f + async for f in self._features_query( conn, ids_filter=ids_filter, datetime_filter=datetime_filter, bbox_filter=bbox_filter, properties_filter=properties_filter, - function_parameters=function_parameters, cql_filter=cql_filter, + sortby=sortby, + properties=properties, geom=geom, dt=dt, + limit=limit, + offset=offset, + bbox_only=bbox_only, + simplify=simplify, + geom_as_wkt=geom_as_wkt, + function_parameters=function_parameters, ) - - features = [ - f - async for f in self._features_query( - conn, - ids_filter=ids_filter, - datetime_filter=datetime_filter, - bbox_filter=bbox_filter, - properties_filter=properties_filter, - cql_filter=cql_filter, - sortby=sortby, - properties=properties, - geom=geom, - dt=dt, - limit=limit, - offset=offset, - bbox_only=bbox_only, - simplify=simplify, - geom_as_wkt=geom_as_wkt, - function_parameters=function_parameters, - ) - ] - returned = len(features) + ] + returned = len(features) return ItemList( items=features, @@ -854,7 +851,7 @@ async def features( async def get_tile( self, - request: Request, + conn: asyncpg.Connection, *, tms: TileMatrixSet, tile: Tile, @@ -915,14 +912,13 @@ async def get_tile( ) debug_query(q, *p) - async with request.app.state.pool.acquire() as conn: - tile = await conn.fetchval(q, *p) + tile = await conn.fetchval(q, *p) return bytes(tile) async def pg_get_collection_index( # noqa: C901 - db_pool: asyncpg.BuildPgPool, + conn: asyncpg.Connection, settings: Optional[DatabaseSettings] = None, ) -> List[Collection]: """Fetch Table and Functions index.""" @@ -946,86 +942,85 @@ async def pg_get_collection_index( # noqa: C901 ); """ # noqa: W605 - async with db_pool.acquire() as conn: - rows = await conn.fetch_b( - query, - schemas=schemas, - tables=settings.tables, - exclude_tables=settings.exclude_tables, - exclude_table_schemas=settings.exclude_table_schemas, - functions=settings.functions, - exclude_functions=settings.exclude_functions, - exclude_function_schemas=settings.exclude_function_schemas, - spatial=settings.only_spatial_tables, - spatial_extent=settings.spatial_extent, - datetime_extent=settings.datetime_extent, - ) + rows = await conn.fetch_b( + query, + schemas=schemas, + tables=settings.tables, + exclude_tables=settings.exclude_tables, + exclude_table_schemas=settings.exclude_table_schemas, + functions=settings.functions, + exclude_functions=settings.exclude_functions, + exclude_function_schemas=settings.exclude_function_schemas, + spatial=settings.only_spatial_tables, + spatial_extent=settings.spatial_extent, + datetime_extent=settings.datetime_extent, + ) - collections: List[Collection] = [] - table_settings = TableSettings() - table_confs = table_settings.table_config - fallback_key_names = table_settings.fallback_key_names - - for row in rows: - table = row[0] - table_id = table["schema"] + "." + table["name"] - confid = table["schema"] + "_" + table["name"] - - if table_id == f"{settings.tipg_schema}.tipg_catalog": - continue - - table_conf = table_confs.get(confid, TableConfig()) - - # Make sure that any properties set in conf exist in table - columns = table.get("properties", []) - if table_settings.sort_columns: - columns = sorted(columns, key=lambda d: d["name"]) - - properties_setting = table_conf.properties or [c["name"] for c in columns] - - # ID Column - id_column = None - if id_name := table_conf.pk or table.get("pk"): - for p in columns: - if id_name == p["name"]: - id_column = p - break - - if id_column is None and fallback_key_names: - for p in columns: - if p["name"] in fallback_key_names: - id_column = p - break - - datetime_column = None - geometry_column = None - - for c in columns: - if c.get("type") in ("timestamp", "timestamptz", "date"): - if table_conf.datetimecol == c["name"] or datetime_column is None: - datetime_column = c - - if c.get("type") in ("geometry", "geography"): - if table_conf.geomcol == c["name"] or geometry_column is None: - geometry_column = c - - collections.append( - PgCollection( - type=table["entity"], - id=table_id, - table=table["name"], - schema=table["schema"], - description=table.get("description", None), - table_columns=columns, - properties=[p for p in columns if p["name"] in properties_setting], - id_column=id_column, - datetime_column=datetime_column, - geometry_column=geometry_column, - parameters=table.get("parameters") or [], - ) + collections: List[Collection] = [] + table_settings = TableSettings() + table_confs = table_settings.table_config + fallback_key_names = table_settings.fallback_key_names + + for row in rows: + table = row[0] + table_id = table["schema"] + "." + table["name"] + confid = table["schema"] + "_" + table["name"] + + if table_id == f"{settings.tipg_schema}.tipg_catalog": + continue + + table_conf = table_confs.get(confid, TableConfig()) + + # Make sure that any properties set in conf exist in table + columns = table.get("properties", []) + if table_settings.sort_columns: + columns = sorted(columns, key=lambda d: d["name"]) + + properties_setting = table_conf.properties or [c["name"] for c in columns] + + # ID Column + id_column = None + if id_name := table_conf.pk or table.get("pk"): + for p in columns: + if id_name == p["name"]: + id_column = p + break + + if id_column is None and fallback_key_names: + for p in columns: + if p["name"] in fallback_key_names: + id_column = p + break + + datetime_column = None + geometry_column = None + + for c in columns: + if c.get("type") in ("timestamp", "timestamptz", "date"): + if table_conf.datetimecol == c["name"] or datetime_column is None: + datetime_column = c + + if c.get("type") in ("geometry", "geography"): + if table_conf.geomcol == c["name"] or geometry_column is None: + geometry_column = c + + collections.append( + PgCollection( + type=table["entity"], + id=table_id, + table=table["name"], + schema=table["schema"], + description=table.get("description", None), + table_columns=columns, + properties=[p for p in columns if p["name"] in properties_setting], + id_column=id_column, + datetime_column=datetime_column, + geometry_column=geometry_column, + parameters=table.get("parameters") or [], ) + ) - return collections + return collections async def register_collection_catalog( @@ -1033,7 +1028,8 @@ async def register_collection_catalog( db_settings: Optional[DatabaseSettings] = None, ) -> None: """Register Table catalog.""" - db_collections = await pg_get_collection_index(app.state.pool, settings=db_settings) + async with app.state.pool.acquire() as conn: + db_collections = await pg_get_collection_index(conn, settings=db_settings) app.state.collection_catalog = Catalog( collections={col.id: col for col in [*db_collections]}, diff --git a/tipg/factory.py b/tipg/factory.py index fcbbc3c..cf07281 100644 --- a/tipg/factory.py +++ b/tipg/factory.py @@ -832,24 +832,25 @@ async def items( # noqa: C901 MediaType.html, ] - item_list = await collection.features( - request, - ids_filter=ids_filter, - bbox_filter=bbox_filter, - datetime_filter=datetime_filter, - properties_filter=properties_filter_query(request, collection), - function_parameters=function_parameters_query(request, collection), - cql_filter=cql_filter, - sortby=sortby, - properties=properties, - limit=limit, - offset=offset, - geom=geom_column, - dt=datetime_column, - bbox_only=bbox_only, - simplify=simplify, - geom_as_wkt=geom_as_wkt, - ) + async with request.app.state.pool.acquire() as conn: + item_list = await collection.features( + conn, + ids_filter=ids_filter, + bbox_filter=bbox_filter, + datetime_filter=datetime_filter, + properties_filter=properties_filter_query(request, collection), + function_parameters=function_parameters_query(request, collection), + cql_filter=cql_filter, + sortby=sortby, + properties=properties, + limit=limit, + offset=offset, + geom=geom_column, + dt=datetime_column, + bbox_only=bbox_only, + simplify=simplify, + geom_as_wkt=geom_as_wkt, + ) if output_type in ( MediaType.csv, @@ -1082,17 +1083,18 @@ async def item( MediaType.html, ] - item_list = await collection.features( - request, - bbox_only=bbox_only, - simplify=simplify, - ids_filter=[itemId], - properties=properties, - function_parameters=function_parameters_query(request, collection), - geom=geom_column, - dt=datetime_column, - geom_as_wkt=geom_as_wkt, - ) + async with request.app.state.pool.acquire() as conn: + item_list = await collection.features( + conn, + bbox_only=bbox_only, + simplify=simplify, + ids_filter=[itemId], + properties=properties, + function_parameters=function_parameters_query(request, collection), + geom=geom_column, + dt=datetime_column, + geom_as_wkt=geom_as_wkt, + ) if not item_list["items"]: raise NotFound( @@ -1653,22 +1655,23 @@ async def collection_get_tile( """Return Vector Tile.""" tms = self.supported_tms.get(tileMatrixSetId) - tile = await collection.get_tile( - request, - tms=tms, - tile=tile, - ids_filter=ids_filter, - bbox_filter=bbox_filter, - datetime_filter=datetime_filter, - properties_filter=properties_filter_query(request, collection), - function_parameters=function_parameters_query(request, collection), - cql_filter=cql_filter, - sortby=sortby, - properties=properties, - limit=limit, - geom=geom_column, - dt=datetime_column, - ) + async with request.app.state.pool.acquire() as conn: + tile = await collection.get_tile( + conn, + tms=tms, + tile=tile, + ids_filter=ids_filter, + bbox_filter=bbox_filter, + datetime_filter=datetime_filter, + properties_filter=properties_filter_query(request, collection), + function_parameters=function_parameters_query(request, collection), + cql_filter=cql_filter, + sortby=sortby, + properties=properties, + limit=limit, + geom=geom_column, + dt=datetime_column, + ) return Response(tile, media_type=MediaType.mvt.value) From 0157ec12026855a9f2b65620d4f992cee1361580 Mon Sep 17 00:00:00 2001 From: vincentsarago Date: Wed, 23 Jul 2025 10:46:28 +0200 Subject: [PATCH 2/2] fix changelog link --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 29d2bbf..6bb08ec 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -411,7 +411,7 @@ Note: Minor version `0.X.0` update might break the API, It's recommended to pin - Initial release [unreleased]: https://github.com/developmentseed/tipg/compare/1.2.0...HEAD -[1.1.2]: https://github.com/developmentseed/tipg/compare/1.1.2...1.2.0 +[1.2.0]: https://github.com/developmentseed/tipg/compare/1.1.2...1.2.0 [1.1.2]: https://github.com/developmentseed/tipg/compare/1.1.1...1.1.2 [1.1.1]: https://github.com/developmentseed/tipg/compare/1.1.0...1.1.1 [1.1.0]: https://github.com/developmentseed/tipg/compare/1.0.1...1.1.0