读写空间矢量
geotable的Python项目详细描述
- GeoJSON
- KMZ
- 上海医药
- CSV
安装
sudo dnf -y install gdal-python3 libkml # sudo apt-get -y install python3-gdal libkml virtualenv -p $(which python3) --system-site-packages \ ~/.virtualenvs/crosscompute source ~/.virtualenvs/crosscompute/bin/activate pip install -U geotable
使用
如果克隆或下载了存储库,则可以在tests文件夹中运行这些示例。
$ cd tests
加载URL。
In [1]: import geotable In [2]: t = geotable.load( 'https://data.cityofnewyork.us/api/geospatial/tqmj-j8zm' '?method=export&format=Original')
加载KMZ文件。
In [1]: import geotable In [2]: t = geotable.load('xyz.kmz')
加载形状文件。
In [1]: import geotable In [2]: t = geotable.load('shp.zip') In [3]: t.iloc[0] Out[3]: name b quantity 2 cost 0.66 date 1990-01-01 00:00:00 geometry_object POINT (-91.5305465 14.8520705) geometry_layer b geometry_proj4 +proj=longlat +datum=WGS84 +no_defs Name: 0, dtype: object
加载包含空间信息的CSV。
geotable.load('csv/wkt.csv') # Load single CSV geotable.load('csv.zip') # Load archive of multiple CSVs geotable.load('csv.zip', parse_dates=['date']) # Configure pandas.read_csv
处理具有不同几何列的CSV。
$ cat csv/latitude_longitude.csv name,quantity,cost,date,latitude,longitude b,2,0.66,1990-01-01,14.8520705,-91.5305465 $ cat csv/lat_lon.csv name,quantity,cost,date,lat,lon c,3,0.99,2000-01-01,42.2808256,-83.7430378 $ cat csv/latitude_longitude_wkt.csv name,quantity,cost,date,latitude_longitude_wkt a,1,0.33,1980-01-01,POINT(42.3736158 -71.10973349999999) $ cat csv/longitude_latitude_wkt.csv name,quantity,cost,date,longitude_latitude_wkt a,1,0.33,1980-01-01,POINT(-71.10973349999999 42.3736158) $ cat csv/wkt.csv name,quantity,cost,date,wkt aaa,1,0.33,1980-01-01,"POINT(-71.10973349999999 42.3736158)" bbb,1,0.33,1980-01-01,"LINESTRING(-122.1374637 37.3796627,-92.5807231 37.1067189)" ccc,1,0.33,1980-01-01,"POLYGON ((-83.10973350093332 42.37361082304877, -103.5305394806998 14.85206885307358, -95.7430260175515 42.28082607112266, -83.10973350093332 42.37361082304877))"
处理具有不同空间引用的CSV。
$ cat proj4_from_file.csv name,wkt aaa,"POLYGON((326299 4693415,-1980130 1771892,-716771 4787516,326299 4693415))" $ cat proj4_from_file.proj4 +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs $ cat proj4_from_row.csv name,wkt,geometry_layer,geometry_proj4 aaa,"LINESTRING(-122.1374637 37.3796627,-92.5807231 37.1067189)",l1,+proj=longlat +datum=WGS84 +no_defs aaa,"POLYGON((326299 4693415,-1980130 1771892,-716771 4787516,326299 4693415))",l2,+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
加载并保存在different spatial references中。
from geotable.projections import SPHERICAL_MERCATOR_PROJ4 t = geotable.load('shp.zip', target_proj4=SPHERICAL_MERCATOR_PROJ4) from geotable.projections import LONGITUDE_LATITUDE_PROJ4 t.save_shp('/tmp/shp.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4)
使用经纬度proj4与使用测地距离的算法(如geopy和pysal)兼容。测地线距离也称为弧距离,是使用地球曲率测量的两点之间的距离。如果您的位置分布在很大的地理范围内,测地经纬度坐标比欧几里德XY坐标提供更高的精度。
from geotable.projections import LONGITUDE_LATITUDE_PROJ4 t = geotable.load('shp.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4) t.save_csv('/tmp/csv.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4) t.save_shp('/tmp/shp.zip', target_proj4=LONGITUDE_LATITUDE_PROJ4) t.save_kmz('/tmp/xyz.kmz', target_proj4=LONGITUDE_LATITUDE_PROJ4)
使用Universal Transverse Mercator (UTM)投影与在xy坐标上使用欧几里德距离(如scipy.spatial)的算法兼容。如果您知道您的位置限制在一个小区域内,您可以使用基于标准欧几里德算法的投影XY坐标,该算法往往比它们的测地变量快得多。
utm_proj4 = geotable.load_utm_proj4('shp.zip') t = geotable.load('csv.zip', target_proj4=utm_proj4) t.save_csv('/tmp/csv.zip', target_proj4=utm_proj4) t.save_shp('/tmp/shp.zip', target_proj4=utm_proj4) t.save_kmz('/tmp/xyz.kmz', target_proj4=utm_proj4)
当可视化比精确性更重要时,使用Spherical Mercator投影。不要将此投影用于空间精度很重要的算法。
from geotable.projections import SPHERICAL_MERCATOR_PROJ4 t = geotable.load('csv/wkt.csv', target_proj4=SPHERICAL_MERCATOR_PROJ4) t.save_csv('/tmp/csv.zip', target_proj4=SPHERICAL_MERCATOR_PROJ4) t.save_shp('/tmp/shp.zip', target_proj4=SPHERICAL_MERCATOR_PROJ4) t.save_kmz('/tmp/xyz.kmz', target_proj4=SPHERICAL_MERCATOR_PROJ4)
可以使用draw函数在jupyter笔记本中呈现空间向量。每个几何图层将以不同的颜色显示。
t = geotable.load('csv/wkt.csv') t.draw() # Render the geometries in Jupyter Notebook
您还可以直接在jupyter笔记本中使用ColorfulGeometryCollection。
from geotable import ColorfulGeometryCollection from shapely.geometry import Point ColorfulGeometryCollection([Point(0, 0), Point(1, 1)])
这里还有一些其他的便利功能。
import geotable # Show WKT for first geometry geotable.load('xyz.kmz').geometries[0].wkt # Load without z coordinates geotable.load('xyz.kmz', drop_z=True).geometries[0].wkt # Restrict geometries to bounding box geotable.load('xyz.kmz', bounding_box=(-71.2, 42.37, -71.1, 42.38)) # Restrict geometries to bounding polygon from shapely.geometry import Polygon polygon = Polygon([ (-71.2, 42.37), (-71.1, 42.37), (-71.1, 42.38), (-71.2, 42.38)]) geotable.load('xyz.kmz', bounding_polygon=polygon) # Load files according to a reference file's UTM projection reference_path = 'xyz.kmz' load = geotable.define_load_with_utm_proj4(reference_path) load('csv/wkt.csv')
测试
pip install pytest pytest-cov py.test --cov-report term-missing --cov=geotable tests
0.4
- 添加geotable.save_geojson
- 添加geotable.save_kmz
- 保存时排除多余的几何列
- 支持从geotable类初始化
- 支持geotable.load(url)
0.3
- 添加geotable.from_记录
- 添加geotable.save_csv
- 添加geotable.save_shp
- 通过省略几何图形图层和几何图形项目4来减小CSV大小,除非需要
- 支持复杂的经度和鼓舞人心的纬度
0.2
- 添加geotable.load
- 将geotable.to_csv添加到
- 将geotable.添加到shp中
- 添加geotable.draw
- 支持经纬度wkt、经纬度wkt
0.1
- 添加ColorfulGeometryCollection