{ "info": { "author": "Pavel Podkorytov", "author_email": "pod.pavel@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3" ], "description": "pyosmkit: library for building OSM tools\n========================================\n\nThis package contains helpers for building tools around OSM tiles.\n\n**Since 0.11** package name was changed from **pyosm** to **pyosmkit** to avoid pypi conflicts.\n\nInstallation\n------------\n\n```bash\n# from pypi\npip install --user pyosmkit\n\n# or from github where ${TAG} is the git version tag, eg v0.6\npip install --user git+https://github.com/tierpod/pyosmkit.git@${TAG}#egg=pyosmkit\n```\n\nDeveloping\n----------\n\n```bash\ngit clone https://github.com/tierpod/pyosmkit.git && cd pyosmkit\nmake venv\nsource ./venv/bin/activate\nmake init-dev\n```\n\npyosmkit.point\n--------------\n\nCreate points, convert coordinates.\n\n* **zxy_to_latlong(z, x, y)** -> LatLong\n* **latlong_to_zxy(lat, lng, zoom)** -> ZXY\n\n```python\n>>> import pyosmkit.point\n>>> p = pyosmkit.point.ZXY(z=10, x=697, y=321)\n>>> pyosmkit.point.zxy_to_latlong(p.z, p.x, p.y)\nLatLong(lat=55.5783, long=65.0391)\n\n```\n\npyosmkit.tile\n-------------\n\nCreate [osm][2] tile, get filename.\n\n* **Tile.from_url(url)** -> Tile\n* **Tile.from_metatile(mt)** -> Tile\n* **Tile.filepath(url)** -> str\n\n```python\n>>> from pyosmkit.tile import Tile\n>>> t = Tile.from_url(\"/style/1/1/1.png\")\n>>> print(t)\nTile(z:1, x:1, y:1, style:style, ext:.png)\n>>> t.filepath(\"/cache\")\n'/cache/style/1/1/1.png'\n\n```\n\npyosmkit.polygon\n----------------\n\nList of tiles can be grouped to the *closed* polygon. You can check if LatLong point inside this\npolygon or not (using [ray-casting][3] algorithm):\n\n```python\n>>> from pyosmkit.point import LatLong\n>>> from pyosmkit.polygon import Polygon\n>>> polygon = Polygon([LatLong(0, 0), LatLong(10, 0), LatLong(10, 10),\n... LatLong(0, 10), LatLong(0, 0)])\n>>> LatLong(1, 2) in polygon\nTrue\n>>> LatLong(11, 12) in polygon\nFalse\n\n```\n\nAlso, a list of polygons can be grouped to Region (support *in* statement).\n\npyosmkit.metatile\n-----------------\n\n### Metatile\n\nCreate metatile coordinates, get filename:\n\n* **Metatile.from_url(url)** -> Metatile\n* **Metatile.from_tile(Tile)** -> Metatile\n* **Metatile.filepath(basedir)** -> str\n\n```python\n>>> from pyosmkit.tile import Tile\n>>> from pyosmkit.metatile import Metatile\n>>> tile = Tile(z=10, x=697, y=321, style=\"mapname\", ext=\".png\")\n>>> mt = Metatile.from_tile(tile)\n>>> print(mt)\nMetatile(z:10, x:696-703, y:320-327, style:mapname)\n>>> mt.filepath(\"/cache\")\n'/cache/mapname/10/0/0/33/180/128.meta'\n\n```\n\n### MetatileFile\n\nTry to implement metatile file encoder/decoder in pythonic way (inspired by Raymond Hettinger\nvideos).\n\n* **pyosmkit.metatile.open(filename, mode)** -> MetatileFile: opens file for reading (\"rb\" mode) or\n writing (\"wb\"). Returns file-like object.\n\nSupport *with* statement, *in* statement, *iterating* over points:\n\n```python\n>>> import pyosmkit.metatile\n>>> mt = pyosmkit.metatile.open(\"tests/data/0.meta\", \"rb\")\n>>> # check if tile (1, 2) contains in metatile\n>>> (1, 2) in mt\nTrue\n>>> (10, 10) in mt\nFalse\n>>> # iterate over Points and print only points with x == 7\n>>> for point in mt:\n... if point.x == 7:\n... print(point)\nPoint(x=7, y=0)\nPoint(x=7, y=1)\nPoint(x=7, y=2)\nPoint(x=7, y=3)\nPoint(x=7, y=4)\nPoint(x=7, y=5)\nPoint(x=7, y=6)\nPoint(x=7, y=7)\n>>> # read all tiles data, iterate over Points and print only none-empty data:\n>>> tiles_data = mt.readtiles()\n>>> for point, data in tiles_data.items():\n... if data:\n... # do something with point(z, x, y) or data (bytes)\n... pass\n>>> mt.close()\n\n```\n\n* **MetatileFile.readtile(x, y)** -> bytes\n* **MetatileFile.readtiles()** -> dict {Point(x, y): bytes, ...}\n* **MetatileFile.write(x, y, z, data)**, where z is the metatile zoom level, x, y is the lowest\n values, data is the dict {Point(x, y): bytes, ...}\n\nmetatile format description\n---------------------------\n\nCan be found in [mod_tile][1] project:\n\npyosmkit.mbtile\n---------------\n\nDecode mbtiles file, read tile from mbtiles file. Support *with*, *in* statements.\n\n```python\n>>> import pyosmkit.mbtile\n>>> from pyosmkit.point import ZXY\n>>> point = ZXY(z=1, x=1, y=0)\n>>> with pyosmkit.mbtile.open(\"tests/data/0.mbtiles\") as mb:\n... print(point in mb)\n... print(len(mb.readtile(point.z, point.x, point.y)))\nTrue\n26298\n\n```\n\n* **pyosmkit.mbtile.open(file, mode, flip_y)** -> MBTileFile: open file for reading. Returns\n file-like object.\n\n* **MBTileFile.readtile(z, x, y)** -> buffer\n\n[1]: https://github.com/openstreetmap/mod_tile/blob/master/includes/metatile.h\n[2]: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Python\n[3]: http://rosettacode.org/wiki/Ray-casting_algorithm\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/tierpod/pyosmkit", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pyosmkit", "package_url": "https://pypi.org/project/pyosmkit/", "platform": "", "project_url": "https://pypi.org/project/pyosmkit/", "project_urls": { "Homepage": "https://github.com/tierpod/pyosmkit" }, "release_url": "https://pypi.org/project/pyosmkit/0.11/", "requires_dist": null, "requires_python": "", "summary": "Library for building OSM tools", "version": "0.11" }, "last_serial": 4971790, "releases": { "0.11": [ { "comment_text": "", "digests": { "md5": "8a6ee00ad305c6b434c997c316e34a4e", "sha256": "6aeae3a81dab47a94156d9da38f9c0e70f1293988b651a4d79ea72ba2f871252" }, "downloads": -1, "filename": "pyosmkit-0.11-py2-none-any.whl", "has_sig": false, "md5_digest": "8a6ee00ad305c6b434c997c316e34a4e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 18943, "upload_time": "2019-03-22T08:18:57", "url": "https://files.pythonhosted.org/packages/25/ef/d8b00723144f6ac92ac02d9c34b6288934b7ebba9f242363574f60f217d9/pyosmkit-0.11-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2626c2b41466b67ce76b62c8f3c957f2", "sha256": "0d888cf3a177eccb6f7e5a4d8d8db224518bf392851fc26bcf674a4ae427471f" }, "downloads": -1, "filename": "pyosmkit-0.11.tar.gz", "has_sig": false, "md5_digest": "2626c2b41466b67ce76b62c8f3c957f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12601, "upload_time": "2019-03-22T08:19:00", "url": "https://files.pythonhosted.org/packages/44/e7/41596bd47c5e90ec6cd2f465496c9a7f92922f0461c0cca8d4527ecc6407/pyosmkit-0.11.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8a6ee00ad305c6b434c997c316e34a4e", "sha256": "6aeae3a81dab47a94156d9da38f9c0e70f1293988b651a4d79ea72ba2f871252" }, "downloads": -1, "filename": "pyosmkit-0.11-py2-none-any.whl", "has_sig": false, "md5_digest": "8a6ee00ad305c6b434c997c316e34a4e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 18943, "upload_time": "2019-03-22T08:18:57", "url": "https://files.pythonhosted.org/packages/25/ef/d8b00723144f6ac92ac02d9c34b6288934b7ebba9f242363574f60f217d9/pyosmkit-0.11-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2626c2b41466b67ce76b62c8f3c957f2", "sha256": "0d888cf3a177eccb6f7e5a4d8d8db224518bf392851fc26bcf674a4ae427471f" }, "downloads": -1, "filename": "pyosmkit-0.11.tar.gz", "has_sig": false, "md5_digest": "2626c2b41466b67ce76b62c8f3c957f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12601, "upload_time": "2019-03-22T08:19:00", "url": "https://files.pythonhosted.org/packages/44/e7/41596bd47c5e90ec6cd2f465496c9a7f92922f0461c0cca8d4527ecc6407/pyosmkit-0.11.tar.gz" } ] }