今天学习了两个工具:
Shapely是一个Python库,用于操作和分析笛卡尔坐标系中的几何对象。
目前最新版本是 shapely 1.7.1
安装要求:
Python 2.7, >=3.5
GEOS >=3.3
安装命令:
pip install shapely
今天先来了解一下这个工具可以用来干什么,
由shapely实现的几何对象的基本类型是点、曲线和曲面。每个点都与平面中的三组(可能是无限的)点相关联。这个 interior, boundary, 和 exterior 特征集是互斥的,它们的并集与整个平面重合。
点类型由 Point 类;曲线 LineString 和 LinearRing 等级;表面 Polygon 班级。shapely实现没有平滑(即“有连续切线”)曲线。所有曲线必须用线性样条曲线来近似。所有的圆面片必须近似于由线性样条线包围的区域。
点集合由 MultiPoint 类,曲线集合 MultiLineString 类和曲面集合 MultiPolygon 班级。这些集合在计算上并不重要,但对于建模某些类型的特性很有用。例如,Y形线条特征可通过 MultiLineString.
安装要求:
支持Python版本2.6,2.7,和3.2+
依赖包:
numpy
pandas (version 0.13 or later)
shapely
fiona
six
geopy 0.99 (optional; for geocoding)
psycopg2 (optional; for PostGIS connection)
GeoPandas实现了两个主要的数据结构,GeoSeries和GeoDataFrame。它们分别是pandas中Series和DataFrame的子类。
一个GeoSeries包含一个几何图形的序列。
GeoSeries类实现了几乎所有的Shapely对象的属性和方法。在使用GeoSeries时,它将应用于序列中所有几何图形的每一个元素。二元操作可以在两个GeoSeries对象之间进行,这种情况下二元操作将应用于每一个元素。这两个序列将按匹配的索引进行对于操作。二元操作也可以应用于单个几何,此时二元操作将对该几何序列的每个元素进行。在以上两种情况下,操作将会返回Series或者GeoSeries对象。
在GeoSeries对象中,以下Shapely对象的方法和属性是可以使用的:
GeoSeries.area
返回一个Series,它包含GeoSeries中每个几何的面积。
GeoSeries.bounds
返回一个DataFrame,它包含每个几何的边界,用列值minx, miny, maxx, maxy来表示。
GeoSeries.length
返回一个Series,它包含每个几何的长度。
GeoSeries.geom_type
返回一个字符串的Series,字符串指定每个对象的几何类型。
GeoSeries.distance(other)
返回一个Series,它包含与其他GeoSeries对象(每个元素)或几何对象的最小距离。
GeoSeries.representative_point()
返回所有点的一个GeoSeries(经简易计算),这些点必须保证在每个几何的内部。
GeoSeries.exterior
返回线环(LinearRings)的一个GeoSeries,它表示GeoSeries中每个多边形的外边界。
GeoSeries.interior
返回内部环序列的一个GeoSeries,它表示GeoSeries中每个多边形的内部环。
一个GeoDataFrame是一个列表数据结构,它包含一个叫做包含geometry的列,这个geometry包含一个GeoSeries。
现在,GeoDataFrame实现了以下方法:
类方法 GeoDataFrame.from_file(filename, **kwargs)
从文件中加载可以被fiona识别的任何格式的一个GeoDataFrame。参见read_file()。
类方法GeoDataFrame.from_postgis(sql,con,geom_col=‘geom’,crs=None,index_col=None,coerce_float=True,params=None)
从PostGIS数据库文件中加载GeoDataFrame。
GeoSeries.to_crs(crs=None,epsg=None,inplace=False)
转换GeoDataFrame的geometry列中的所有几何图形到其他坐标参考系统。当前GeoSeries的crs属性必须被设置。crs属性需要被指定以用于输出,或是用字典形式或是用EPSG编码方式。如果inplace=True,在当前的dataframe中geometry列将被替换,否则将返回一个新的GeoDataFrame。
这种方法将改变所有对象中的所有点。它没有概念或转换整个几何图形。所有连接点的片段在当前的投影中被认为是线段,而不是测地线。对象跨越国际日期变更线(或其他投影边界)是不被允许的。
GeoSeries.to_file(filename,driver=“ESRI Shapefile”,**kwargs)
将GeoDataFrame写入文件。默认情况下,写成ESRI的shapefile格式。但是通过Fiona,任何OGR数据源也被支持写入。**kwargs被传给Fiona驱动器。
GeoSeries.to_json(**kwargs)
将GeoDataFrame以字符串的方式表示为GeoJSON对象返回。
GeoSeries.plot(column=None,colormap=None,alpha=0.5,categorical=False,legend=False,axes=None)
绘制GeoDataFrame中几何图形。如果列参数给定,颜色根据这列的值绘制,否则在geometry列调用GeoSeries.plot()函数。都封装在plot_dataframe()函数中。
所有pandas中DataFrane对象的方法也是可以用的,尽管可能有些针对geometry列正当的操作没有意义也可能不返回GeoDataFrame。
链接地址: