{ "info": { "author": "Andrey Sorokin", "author_email": "andreysrkn@eosda.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: Public Domain", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Database" ], "description": "## EOS vision tile query library \n\nvision_tile_query is a library for creating SQL with PostGIS As_MVT by XYZ.\nIt can be used for constructing vector servers\n## Architecture\nVision tile query library provides PostGIS MVT SQL query with special \nabilities. Polygon simplification and geometries count simplification \naccording to zoom level are the main features. Read more about postgis+MVT \nhttps://postgis.net/docs/ST_AsMVT.html\n### Installing\nSimple run\n```text\npip install vision-tile-query\n\n``` \n### Usage examples\nTile query library requires SQLalchemy table model for constructing SQL query \n#### Flask\nExample for flask framework with sqlalchemy DB engine\n```python\nfrom flask import Flask, render_template\nfrom sqlalchemy import create_engine\nfrom vision_tile_query import VisionBaseTileProcessor\nfrom vision_tile_query import TableManager\n\napp = Flask(__name__)\n# Connect to DB\napp.engine = create_engine('postgresql://postgres@localhost:5432/vision_db')\ntable_manager = TableManager(app.engine)\n\n\n@app.route('/')\ndef map_page():\n return render_template('main.html')\n\n\n@app.route('/tile////.pbf')\ndef get_tile(table, x_tile, y_tile, zoom):\n tile = {'x': x_tile, 'y': y_tile, 'z': zoom}\n\n # Define model\n model = table_manager.get_table_model(\n table, 'public')\n\n tile_query = VisionBaseTileProcessor().get_tile(\n tile, model=model.__table__)\n\n # Exec query and get data\n conn = app.engine.connect()\n query = conn.execute(tile_query)\n tile = query.fetchone()\n conn.close()\n\n # Make response object\n response = app.make_response(bytes(tile[0]))\n response.headers['Content-Type'] = 'application/x-protobuf'\n response.headers['Access-Control-Allow-Origin'] = \"*\"\n return response\n\n\nif __name__ == '__main__':\n app.run()\n```\n\n#### Aiohttp\nSimple aiohttp example for MVT tile server with async table manager\n```python\nimport asyncio\nimport aiohttp_jinja2\nimport jinja2\nimport aiopg.sa\nfrom sqlalchemy.engine.url import URL\nfrom aiohttp import web\n\nfrom vision_tile_query import VisionBaseTileProcessor, AsyncTableManager\n\nDNS = str(URL(\n database='vision_db',\n host='localhost',\n username='postgres',\n drivername='postgres',\n))\n\n\nasync def init_pg(app):\n app['db'] = await aiopg.sa.create_engine(DNS)\n app['table_manager'] = AsyncTableManager(app['db'])\n\n\nasync def close_pg_connection(app):\n app['db'].close()\n await app['db'].wait_closed()\n\n\nasync def get_tile(request):\n params = dict(request.match_info)\n\n tile = {'x': int(params.get('x')),\n 'y': int(params.get('y')),\n 'z': int(params.get('z'))}\n\n # Define model\n model = await app['table_manager'].get_table_model(\n params.get('table'), 'public')\n\n tile_query = VisionBaseTileProcessor().get_tile(\n tile, model=model.__table__)\n\n async with app['db'].acquire() as conn:\n data = await conn.scalar(tile_query)\n\n response = web.Response(\n body=bytes(data),\n headers={\n 'Content-Type': \"application/x-protobuf\",\n }\n )\n return response\n\n\n@aiohttp_jinja2.template('main.html')\nasync def handle(request):\n return {'KEY': 'YOUR MAPBOX TOKEN'}\n\n\nloop = asyncio.get_event_loop()\napp = web.Application(loop=loop)\napp.add_routes([web.get(\"/\", handle),\n web.get(\"/tile/{table}/{z}/{x}/{y}.pbf\", get_tile)\n ])\naiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader('templates'))\n\napp.update(name='vision-tile-query')\n\n# signal on app start\napp.on_startup.append(init_pg)\n# signal on app end\napp.on_cleanup.append(close_pg_connection)\n\nweb.run_app(app)\n```\n\n### Settings\nMain module settings are:\n - use_simplification - simplify geometry of polygons and lines. \n By default False\n - use_lod - use LOD for points objects, don't select all object on \n world(1-7) zoom levels. By default False\n - use_clip_by_tile - usefull for multipolygons, this attribute enables \n postgis `ST_ClipByBox2D`. By default True\nAlso you can configure additional settings such as:\n - percentage - number value from 0 to 100. How much percent library have \n to use in postgres TABLESAMPLE function\n - simplify - library uses postgis function ST_Simplify. Simplify provide \n square size depending to you coordinate system\n\n### Tests\n For run test on your machine use `python pytest -v`\n\n### Requirements\n - mercantile>=0.10.0\n - SQLAlchemy>=1.1.11\n - geoalchemy2>=0.4.0\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/eos-vision/vision_tile_query", "keywords": "", "license": "Unlicense", "maintainer": "", "maintainer_email": "", "name": "vision-tile-query", "package_url": "https://pypi.org/project/vision-tile-query/", "platform": "", "project_url": "https://pypi.org/project/vision-tile-query/", "project_urls": { "Homepage": "https://github.com/eos-vision/vision_tile_query" }, "release_url": "https://pypi.org/project/vision-tile-query/0.0.5/", "requires_dist": [ "SQLAlchemy", "mercantile", "geoalchemy2" ], "requires_python": "", "summary": "Library for creating MVT SQL query", "version": "0.0.5" }, "last_serial": 5182060, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "d762f4b067fa66210218677862eda685", "sha256": "1f44ce36e4c5df842e3f2f7e1fcdcf483c8fec046f2fbc06842a86fccade967c" }, "downloads": -1, "filename": "vision_tile_query-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d762f4b067fa66210218677862eda685", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9724, "upload_time": "2019-04-03T13:12:59", "url": "https://files.pythonhosted.org/packages/34/26/49900a36ca292c9ad22e5899b71387dc0da077f3815f369bc5832d3d7feb/vision_tile_query-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44da45733c54ad58f99947531619771d", "sha256": "86c81866b1a427751e209ca42ea605646f0ec2b96d8cf55d965e0a10ab5de636" }, "downloads": -1, "filename": "vision_tile_query-0.0.2.tar.gz", "has_sig": false, "md5_digest": "44da45733c54ad58f99947531619771d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5575, "upload_time": "2019-04-03T13:13:01", "url": "https://files.pythonhosted.org/packages/03/ea/cdeb590e021d2e98502e74c5b56e5e673da1242949145af88fe613932968/vision_tile_query-0.0.2.tar.gz" } ], "0.0.2.1": [ { "comment_text": "", "digests": { "md5": "43d113c840ed4a71aa8315c4aa9f1feb", "sha256": "5306cf67959ff172affee8a92474afa3b639d9f1fb2ee49c7a75c15c547a824e" }, "downloads": -1, "filename": "vision_tile_query-0.0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "43d113c840ed4a71aa8315c4aa9f1feb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9777, "upload_time": "2019-04-03T13:31:56", "url": "https://files.pythonhosted.org/packages/01/69/b0054e95c85ff9a6b749f7024651e187e8241dfbd95988401173a7141ecc/vision_tile_query-0.0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c9b8b786cb0516293817f13d208de7a3", "sha256": "6e5e629894ecd4a581637515b89d1428cd7f000fa2affc31897e10efef73544b" }, "downloads": -1, "filename": "vision_tile_query-0.0.2.1.tar.gz", "has_sig": false, "md5_digest": "c9b8b786cb0516293817f13d208de7a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5603, "upload_time": "2019-04-03T13:32:24", "url": "https://files.pythonhosted.org/packages/e3/ad/cdd0078eaa29b5f7fb44840714865e15fdf99c3485f000a2155ecb03445f/vision_tile_query-0.0.2.1.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "aa6c3e5ae9dea899c62605a0c2679a7e", "sha256": "5017c164932d608e162cad774f9a1cad72efe4407a5690f2662dc7091917bb0f" }, "downloads": -1, "filename": "vision_tile_query-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "aa6c3e5ae9dea899c62605a0c2679a7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9903, "upload_time": "2019-04-04T12:00:16", "url": "https://files.pythonhosted.org/packages/57/d8/0d3f37c603e845c60efc637174c8e19cc97980b2c5ef6da5a1e97db7f519/vision_tile_query-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1972a4765df4f6499ff143de090c62cd", "sha256": "e88c2c697b0b5984c0be5671b41e1e1b137a78431de1feeb17f6c4c0e3331eef" }, "downloads": -1, "filename": "vision_tile_query-0.0.3.tar.gz", "has_sig": false, "md5_digest": "1972a4765df4f6499ff143de090c62cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5729, "upload_time": "2019-04-04T12:00:17", "url": "https://files.pythonhosted.org/packages/cc/ce/c66f74b5a9df4493eaa47df8d1a07f9bbcb31fdec9b354b6574124993dbb/vision_tile_query-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "4d8b6795c1e216237dba165d7e046a34", "sha256": "291b8d2992413f5d53da8b7f958f855ede617af7ab1558260f2f0211d510e5ce" }, "downloads": -1, "filename": "vision_tile_query-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "4d8b6795c1e216237dba165d7e046a34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11171, "upload_time": "2019-04-19T06:20:23", "url": "https://files.pythonhosted.org/packages/00/d4/65b045c2b092c908deb9760ef63ab7e3db0454ba7aada9905b5ede1fa7a5/vision_tile_query-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4fd7f215f6cfa994fbe1b17f6d417097", "sha256": "faac9c1a0c782763744660e75a06ea0f080bb7395b769ff52e7acd064b7f9ffa" }, "downloads": -1, "filename": "vision_tile_query-0.0.4.tar.gz", "has_sig": false, "md5_digest": "4fd7f215f6cfa994fbe1b17f6d417097", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6410, "upload_time": "2019-04-19T06:20:24", "url": "https://files.pythonhosted.org/packages/7f/31/9b53148a4f60745ff0083a329510b6a8d6eff29ac02d1e407bb628aa30b7/vision_tile_query-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "cd7c6d449d82e3ab3f68b4c5219e76ad", "sha256": "0fe9f83a4a00713608b0f21a5ef8bd1c9746fd5461795271ca5489e9e891d0a4" }, "downloads": -1, "filename": "vision_tile_query-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "cd7c6d449d82e3ab3f68b4c5219e76ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12154, "upload_time": "2019-04-24T12:36:02", "url": "https://files.pythonhosted.org/packages/60/89/126123c4576221d26542d7087e2adb3a10b340a95ea9e150edddc2c4036c/vision_tile_query-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66e71d33efd3a20e4fd5b9333f046110", "sha256": "bcb79c29e860e73158c129afd56058ab4fd7706a8597429a25ef20c1169c19ad" }, "downloads": -1, "filename": "vision_tile_query-0.0.5.tar.gz", "has_sig": false, "md5_digest": "66e71d33efd3a20e4fd5b9333f046110", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6961, "upload_time": "2019-04-24T12:36:04", "url": "https://files.pythonhosted.org/packages/da/c6/66e7fa9100aa92c2eba01f76e7c786b4094c9c0b2273933c47e92760ca51/vision_tile_query-0.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cd7c6d449d82e3ab3f68b4c5219e76ad", "sha256": "0fe9f83a4a00713608b0f21a5ef8bd1c9746fd5461795271ca5489e9e891d0a4" }, "downloads": -1, "filename": "vision_tile_query-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "cd7c6d449d82e3ab3f68b4c5219e76ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12154, "upload_time": "2019-04-24T12:36:02", "url": "https://files.pythonhosted.org/packages/60/89/126123c4576221d26542d7087e2adb3a10b340a95ea9e150edddc2c4036c/vision_tile_query-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66e71d33efd3a20e4fd5b9333f046110", "sha256": "bcb79c29e860e73158c129afd56058ab4fd7706a8597429a25ef20c1169c19ad" }, "downloads": -1, "filename": "vision_tile_query-0.0.5.tar.gz", "has_sig": false, "md5_digest": "66e71d33efd3a20e4fd5b9333f046110", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6961, "upload_time": "2019-04-24T12:36:04", "url": "https://files.pythonhosted.org/packages/da/c6/66e7fa9100aa92c2eba01f76e7c786b4094c9c0b2273933c47e92760ca51/vision_tile_query-0.0.5.tar.gz" } ] }