{ "info": { "author": "Roy Hyunjin Han", "author_email": "rhh@crosscompute.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "GeoTable\n========\nRead and write spatial vectors in the following formats thanks to `GDAL `_ and `pandas `_.\n\n- GeoJSON\n- KMZ\n- SHP\n- CSV\n\n\nInstall\n-------\n::\n\n sudo dnf -y install gdal-python3 libkml\n # sudo apt-get -y install python3-gdal libkml\n virtualenv -p $(which python3) --system-site-packages \\\n ~/.virtualenvs/crosscompute\n source ~/.virtualenvs/crosscompute/bin/activate\n pip install -U geotable\n\n\nUse\n---\nIf you cloned or downloaded the repository, you can run these examples in the ``tests`` folder. ::\n\n $ cd tests\n\nLoad URLs. ::\n\n In [1]: import geotable\n\n In [2]: t = geotable.load(\n 'https://data.cityofnewyork.us/api/geospatial/tqmj-j8zm'\n '?method=export&format=Original')\n\nLoad KMZ files. ::\n\n In [1]: import geotable\n\n In [2]: t = geotable.load('xyz.kmz')\n\nLoad shapefiles. ::\n\n In [1]: import geotable\n\n In [2]: t = geotable.load('shp.zip')\n\n In [3]: t.iloc[0]\n Out[3]:\n name b\n quantity 2\n cost 0.66\n date 1990-01-01 00:00:00\n geometry_object POINT (-91.5305465 14.8520705)\n geometry_layer b\n geometry_proj4 +proj=longlat +datum=WGS84 +no_defs\n Name: 0, dtype: object\n\nLoad CSVs containing spatial information. ::\n\n geotable.load('csv/wkt.csv') # Load single CSV\n geotable.load('csv.zip') # Load archive of multiple CSVs\n geotable.load('csv.zip', parse_dates=['date']) # Configure pandas.read_csv\n\nHandle CSVs with different geometry columns. ::\n\n $ cat csv/latitude_longitude.csv\n name,quantity,cost,date,latitude,longitude\n b,2,0.66,1990-01-01,14.8520705,-91.5305465\n\n $ cat csv/lat_lon.csv\n name,quantity,cost,date,lat,lon\n c,3,0.99,2000-01-01,42.2808256,-83.7430378\n\n $ cat csv/latitude_longitude_wkt.csv\n name,quantity,cost,date,latitude_longitude_wkt\n a,1,0.33,1980-01-01,POINT(42.3736158 -71.10973349999999)\n\n $ cat csv/longitude_latitude_wkt.csv\n name,quantity,cost,date,longitude_latitude_wkt\n a,1,0.33,1980-01-01,POINT(-71.10973349999999 42.3736158)\n\n $ cat csv/wkt.csv\n name,quantity,cost,date,wkt\n aaa,1,0.33,1980-01-01,\"POINT(-71.10973349999999 42.3736158)\"\n bbb,1,0.33,1980-01-01,\"LINESTRING(-122.1374637 37.3796627,-92.5807231 37.1067189)\"\n ccc,1,0.33,1980-01-01,\"POLYGON ((-83.10973350093332 42.37361082304877, -103.5305394806998 14.85206885307358, -95.7430260175515 42.28082607112266, -83.10973350093332 42.37361082304877))\"\n\nHandle CSVs with different spatial references. ::\n\n $ cat proj4_from_file.csv\n name,wkt\n aaa,\"POLYGON((326299 4693415,-1980130 1771892,-716771 4787516,326299 4693415))\"\n\n $ cat proj4_from_file.proj4\n +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\n\n $ cat proj4_from_row.csv\n name,wkt,geometry_layer,geometry_proj4\n aaa,\"LINESTRING(-122.1374637 37.3796627,-92.5807231 37.1067189)\",l1,+proj=longlat +datum=WGS84 +no_defs\n aaa,\"POLYGON((326299 4693415,-1980130 1771892,-716771 4787516,326299 4693415))\",l2,+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\n\nLoad and save in `different spatial references `_. ::\n\n from geotable.projections import SPHERICAL_MERCATOR_PROJ4\n t = geotable.load('shp.zip', target_proj4=SPHERICAL_MERCATOR_PROJ4)\n\n from geotable.projections import LONGITUDE_LATITUDE_PROJ4\n t.save_shp('/tmp/shp.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4)\n\nUse LONGITUDE_LATITUDE_PROJ4 for compatibility with algorithms that use geodesic distance such as those found in `geopy `_ and `pysal `_. Geodesic distance is also known as arc distance and is the distance between two points as measured using the curvature of the Earth. If your locations are spread over a large geographic extent, geodesic longitude and latitude coordinates provide greater accuracy than Euclidean XY coordinates. ::\n\n from geotable.projections import LONGITUDE_LATITUDE_PROJ4\n t = geotable.load('shp.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4)\n t.save_csv('/tmp/csv.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4)\n t.save_shp('/tmp/shp.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4)\n t.save_kmz('/tmp/xyz.kmz', target_proj4=LONGITUDE_LATITUDE_PROJ4)\n\nUse the `Universal Transverse Mercator (UTM) `_ projection for compatibility with algorithms that use Euclidean distance on XY coordinates such as those found in `scipy.spatial `_. If you know that your locations are confined to a small region, you can use the projected XY coordinates with standard Euclidean based algorithms, which tend to be significantly faster than their geodesic variants. ::\n\n utm_proj4 = geotable.load_utm_proj4('shp.zip')\n t = geotable.load('csv.zip', target_proj4=utm_proj4)\n t.save_csv('/tmp/csv.zip', target_proj4=utm_proj4)\n t.save_shp('/tmp/shp.zip', target_proj4=utm_proj4)\n t.save_kmz('/tmp/xyz.kmz', target_proj4=utm_proj4)\n\nUse the `Spherical Mercator `_ projection when visualization is more important than accuracy. Do not use this projection for algorithms where spatial accuracy is important. ::\n\n from geotable.projections import SPHERICAL_MERCATOR_PROJ4\n t = geotable.load('csv/wkt.csv', target_proj4=SPHERICAL_MERCATOR_PROJ4)\n t.save_csv('/tmp/csv.zip', target_proj4=SPHERICAL_MERCATOR_PROJ4)\n t.save_shp('/tmp/shp.zip', target_proj4=SPHERICAL_MERCATOR_PROJ4)\n t.save_kmz('/tmp/xyz.kmz', target_proj4=SPHERICAL_MERCATOR_PROJ4)\n\nYou can render your spatial vectors in Jupyter Notebook with the ``draw`` function. Each geometry layer will appear in a different color. ::\n\n t = geotable.load('csv/wkt.csv')\n t.draw() # Render the geometries in Jupyter Notebook\n\nYou can also use ``ColorfulGeometryCollection`` in Jupyter Notebook directly. ::\n\n from geotable import ColorfulGeometryCollection\n from shapely.geometry import Point\n ColorfulGeometryCollection([Point(0, 0), Point(1, 1)])\n\nHere are some other convenience functions. ::\n\n import geotable\n\n # Show WKT for first geometry\n geotable.load('xyz.kmz').geometries[0].wkt\n\n # Load without z coordinates\n geotable.load('xyz.kmz', drop_z=True).geometries[0].wkt\n\n # Restrict geometries to bounding box\n geotable.load('xyz.kmz', bounding_box=(-71.2, 42.37, -71.1, 42.38))\n\n # Restrict geometries to bounding polygon\n from shapely.geometry import Polygon\n polygon = Polygon([\n (-71.2, 42.37),\n (-71.1, 42.37), \n (-71.1, 42.38),\n (-71.2, 42.38)])\n geotable.load('xyz.kmz', bounding_polygon=polygon)\n\n # Load files according to a reference file's UTM projection\n reference_path = 'xyz.kmz'\n load = geotable.define_load_with_utm_proj4(reference_path)\n load('csv/wkt.csv')\n\n\nTest\n----\n::\n\n pip install pytest pytest-cov\n py.test --cov-report term-missing --cov=geotable tests\n\n0.4\n---\n- Add GeoTable.save_geojson\n- Add GeoTable.save_kmz\n- Exclude redundant geometry columns when saving\n- Support initialization from GeoTable class\n- Support geotable.load(url)\n\n0.3\n---\n- Add GeoTable.from_records\n- Add GeoTable.save_csv\n- Add GeoTable.save_shp\n- Reduce CSV size by omitting geometry_layer and geometry_proj4 unless needed\n- Support SOPHISTICATED_LONGITUDE and INSPIRING_LATITUDE\n\n0.2\n---\n- Add GeoTable.load\n- Add GeoTable.to_csv\n- Add GeoTable.to_shp\n- Add GeoTable.draw\n- Support LONGITUDE_LATITUDE_WKT, LATITUDE_LONGITUDE_WKT\n\n0.1\n---\n- Add ColorfulGeometryCollection\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/invisibleroads/geotable", "keywords": "gdal geos proj4 shapely", "license": "", "maintainer": "", "maintainer_email": "", "name": "geotable", "package_url": "https://pypi.org/project/geotable/", "platform": "", "project_url": "https://pypi.org/project/geotable/", "project_urls": { "Homepage": "https://github.com/invisibleroads/geotable" }, "release_url": "https://pypi.org/project/geotable/0.4.2.1/", "requires_dist": [ "invisibleroads-macros (>=0.9.5.1)", "pandas (>=0.20)", "shapely[vectorized]", "utm" ], "requires_python": "", "summary": "Read and write spatial vectors", "version": "0.4.2.1" }, "last_serial": 4831703, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "27cf6809526769b25931ffc702eef472", "sha256": "ce0db92ba29b7caa930ff56f42e620fe67fc9d62ef610eb39006ee390c14f7c2" }, "downloads": -1, "filename": "geotable-0.2.tar.gz", "has_sig": false, "md5_digest": "27cf6809526769b25931ffc702eef472", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6008, "upload_time": "2018-02-13T21:43:41", "url": "https://files.pythonhosted.org/packages/db/f8/cbdab97f3df57f49212b2e293e9074572d9f4a30d02ff30a621fe9ac0749/geotable-0.2.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "5d001bebb4585877787c9b4267885203", "sha256": "d2d818dd2a3cdeb02dc874f8ba239019335649fb65df937c63b376a6767bf441" }, "downloads": -1, "filename": "geotable-0.3.2.tar.gz", "has_sig": false, "md5_digest": "5d001bebb4585877787c9b4267885203", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9661, "upload_time": "2018-02-17T20:21:50", "url": "https://files.pythonhosted.org/packages/13/51/f60d2e372bba5eb52381687030c030c6265184b0439a224bf01fd841d1b4/geotable-0.3.2.tar.gz" } ], "0.3.3.1": [ { "comment_text": "", "digests": { "md5": "2d11ff5d6992486c59f3c3430a3bcf2b", "sha256": "7d1ff9baa19ba8a104c7304fb35b5c1edd094203e97b3720d2d2bfb93da3159d" }, "downloads": -1, "filename": "geotable-0.3.3.1.tar.gz", "has_sig": false, "md5_digest": "2d11ff5d6992486c59f3c3430a3bcf2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10348, "upload_time": "2018-02-21T18:22:01", "url": "https://files.pythonhosted.org/packages/93/59/292d043491933f717d441106366710743b56b3f217568f9f57b4617e9fdb/geotable-0.3.3.1.tar.gz" } ], "0.3.3.2": [ { "comment_text": "", "digests": { "md5": "1cca8b59f3f1cd0b63e30d2157cced74", "sha256": "637bc2b5363b7985011a6d55787b0a390cc758ea58adab03ae1b0e0c121fe2e2" }, "downloads": -1, "filename": "geotable-0.3.3.2.tar.gz", "has_sig": false, "md5_digest": "1cca8b59f3f1cd0b63e30d2157cced74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11078, "upload_time": "2018-02-23T21:25:03", "url": "https://files.pythonhosted.org/packages/fb/91/c44ef0400a43e7b351e1e5e34ad4991e8519dc852f608a423c475edbf1c6/geotable-0.3.3.2.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "4c0744b98512ec4a65aaa66f2140efc8", "sha256": "a27f8dbd3a2142dcad37461fe1640960cbe0561dc347aadaf6c4c1ed92a21e1b" }, "downloads": -1, "filename": "geotable-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "4c0744b98512ec4a65aaa66f2140efc8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15771, "upload_time": "2018-12-25T19:15:56", "url": "https://files.pythonhosted.org/packages/43/1f/3ce3fb11a15e3a4f2139e5dc2edc82b21ef9fa1c77eb76da2c8a1038474c/geotable-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "edbc5ebded84ee711217e2bc8809c21f", "sha256": "f035261fcd69bb92bbd5f0d3142e88c2c094fc4cbf0c570447aedf77cc53ee19" }, "downloads": -1, "filename": "geotable-0.4.2.tar.gz", "has_sig": false, "md5_digest": "edbc5ebded84ee711217e2bc8809c21f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14155, "upload_time": "2018-12-25T19:15:58", "url": "https://files.pythonhosted.org/packages/14/57/dadeda68df87ffbd3d9fb74236a4bd7775c1c1beac54101fcd507b917df7/geotable-0.4.2.tar.gz" } ], "0.4.2.1": [ { "comment_text": "", "digests": { "md5": "aab97a9f856fab0fd81a40c3fb233e70", "sha256": "721e1df7dbb0d9672b18be6208339d67813e784c63a120df484879cee1c6065f" }, "downloads": -1, "filename": "geotable-0.4.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "aab97a9f856fab0fd81a40c3fb233e70", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15843, "upload_time": "2019-02-17T15:17:15", "url": "https://files.pythonhosted.org/packages/db/18/d6701f63b3902c27c5f3e3158e4615590f0398e2574b00e24dd332b47d2b/geotable-0.4.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c8ce4689b6f9205c59b85615cd83cf60", "sha256": "699d81f9359e273422d7842bbf4ea3d621cd68afcd1433656bd8b6388d1ce555" }, "downloads": -1, "filename": "geotable-0.4.2.1.tar.gz", "has_sig": false, "md5_digest": "c8ce4689b6f9205c59b85615cd83cf60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14215, "upload_time": "2019-02-17T15:17:17", "url": "https://files.pythonhosted.org/packages/b2/05/8b466adc6acecb28bbaf9847306ed802784ff5b5fc46acaa5947b7a0e9e4/geotable-0.4.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aab97a9f856fab0fd81a40c3fb233e70", "sha256": "721e1df7dbb0d9672b18be6208339d67813e784c63a120df484879cee1c6065f" }, "downloads": -1, "filename": "geotable-0.4.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "aab97a9f856fab0fd81a40c3fb233e70", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15843, "upload_time": "2019-02-17T15:17:15", "url": "https://files.pythonhosted.org/packages/db/18/d6701f63b3902c27c5f3e3158e4615590f0398e2574b00e24dd332b47d2b/geotable-0.4.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c8ce4689b6f9205c59b85615cd83cf60", "sha256": "699d81f9359e273422d7842bbf4ea3d621cd68afcd1433656bd8b6388d1ce555" }, "downloads": -1, "filename": "geotable-0.4.2.1.tar.gz", "has_sig": false, "md5_digest": "c8ce4689b6f9205c59b85615cd83cf60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14215, "upload_time": "2019-02-17T15:17:17", "url": "https://files.pythonhosted.org/packages/b2/05/8b466adc6acecb28bbaf9847306ed802784ff5b5fc46acaa5947b7a0e9e4/geotable-0.4.2.1.tar.gz" } ] }