地理数据常用分析工具

今天学习了两个工具:

  1. Shapely
  2. GeoPandas

Shapely

Shapely是一个Python库,用于操作和分析笛卡尔坐标系中的几何对象。

目前最新版本是 shapely 1.7.1

安装要求:

Python 2.7, >=3.5
GEOS >=3.3

安装命令:

pip install shapely

今天先来了解一下这个工具可以用来干什么,

由shapely实现的几何对象的基本类型是点、曲线和曲面。每个点都与平面中的三组(可能是无限的)点相关联。这个 interior, boundary, 和 exterior 特征集是互斥的,它们的并集与整个平面重合。

  • A Point 有一个 interior 刚好一点的集合,A boundary 完全没有点的集合,以及 exterior 所有其他点的集合。一 Point 拓扑维数为0。
  • A Curve 有一个 interior 由沿其长度的无穷多点组成的集合(假设 Point 拖进太空),a boundary 由两个端点组成的集合,以及 exterior 所有其他点的集合。一 Curve 拓扑维数为1。
  • A Surface 有一个 interior 包含无限多个点的集合(假设 Curve 在空间中拖动以覆盖一个区域),a boundary 由一个或多个组成的集合 Curves, 和一个 exterior 所有其他点的集合,包括可能存在于表面的孔内的点。一 Surface 拓扑维数为2。

点类型由 Point 类;曲线 LineString 和 LinearRing 等级;表面 Polygon 班级。shapely实现没有平滑(即“有连续切线”)曲线。所有曲线必须用线性样条曲线来近似。所有的圆面片必须近似于由线性样条线包围的区域。

点集合由 MultiPoint 类,曲线集合 MultiLineString 类和曲面集合 MultiPolygon 班级。这些集合在计算上并不重要,但对于建模某些类型的特性很有用。例如,Y形线条特征可通过 MultiLineString.

GeoPandas

安装要求:

支持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包含一个几何图形的序列。

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

一个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。

链接地址:

  1. shapely: https://www.osgeo.cn/shapely/manual.html
  2. geopandas: https://www.cnblogs.com/giserliu/p/4988615.html

你可能感兴趣的:(数据分析)