【GeoPandas】主要包含两个数据结构,即GeoSeries和GeoDataFrame
空间数据主要由两部分组成,属性数据和空间属性。属性数据即是shp中的属性表,空间属性即为shp中每个单元的几何形状。
- 【GeoSeries】用GeoSeries表示空间属性(即geometry,是wkt格式的)
- 【GeoDataFrame】可以把GeoDataFrame理解为shp的属性表,但比shp的属性表多一列,这一列就是空间数据(即GeoSeries)
GeoSeries管理空间属性
【GeoSeries】GeoSeries只管理空间属性,不包含GeoDataFrame中的其他属性。主要包括:点/多点、线/多线、面/多面
(1)方法和属性
GeoSeries.area #面积
GeoSeries.bounds #边界:minx, miny, maxx, maxy
GeoSeries.length #几何的长度
GeoSeries.geom_type #几何类型
GeoSeries.to_crs(src) #改变坐标系
GeoSeries.plot() #制图
GeoSeries.distance(other) #最小距离
GeoSeries.centroid() #质心
GeoSeries.representative_point() #返回在每个几何内部的点,但不返回重心
GeoSeries.exterior #返回线环(LinearRings)的一个GeoSeries,它表示GeoSeries中每个多边形的外边界
GeoSeries.interior #返回内部环序列的一个GeoSeries,它表示GeoSeries中每个多边形的内部环
(2)谓词
GeoSeries.is_empty #返回一个布尔型的Series,对于一个空的几何图形,该值就为True
GeoSeries.is_ring #返回一个布尔型的Series,对于闭合的要素,该值就为True
GeoSeries.is_simple #返回一个布尔型的Series,如果几何体自身不交叉,该值就为True(仅对线串--LineStrings和线环--LineRings有意义)
GeoSeries.is_valid #返回一个布尔型的Series,如果几何体是有效的,该值就为True
GeoSeries.almost_equals(other[,decimal=6]) #返回一个布尔型的Series对象,如果在指定的小数位精度下,每个对象所有点与其他对象大致相等,该值就为True(可见equals())
GeoSeries.contains(other) #返回一个布尔型的Series,如果每个对象的内部包含其他对象的内部和边界,并且它们的边界不相接,该值为True
GeoSeries.crosses(other) #返回一个布尔型的Series,如果每个对象的内部与其他对象的内部相交但不包含,并且相交的部分小于这两个相交对象自身,该值为True
GeoSeries.disjoint(other) #返回一个布尔型的Series,如果每个对象的边界和内部与其他对象的边界和内部都不相交,该值为True
GeoSeries.equals(other) #返回一个布尔型的Series,如果几何对象集合的边界,内部,外部都与其他几何对象一样,该值为True。
GeoSeries.intersects(other) #返回一个布尔型的Series,如果每个对象的边界和内部以其它任何形式与其他对象相交,该值为True。
GeoSeries.touches(other) #返回一个布尔型的Series,如果对象与其他对象至少有一个点相同,且它们的内部任何部分都不相交,该值为True。
GeoSeries.within(other) #返回一个布尔型的Series, 如果每个对象的边界和内部只与其他对象的内部相交(不包括边界和外部),该值为True(与contains()方法相反)
(3)不常用
GeoSeries.xticks(rotation = 90) #x刻度数值旋转90°
GeoDataFrame用表格形式组织地理数据
【GeoDataFrame】包含GeoSeries的表格数据结构
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres')) #打开geopandas内置数据库中的数据
world.head() #查看数据结构
world.plot() #制图
world = world.rename(columns={'geometry': 'borders'}).set_geometry('borders') #更改geometry列的名字
world['centroid_column'] = world.centroid # 把质点赋给world的列centroid_column中
world = world.set_geometry('centroid_column') # 把几何列设为centroid_column