GeoPandas官方汉语文书档案

译自GeoPandas 0.1.0
文档
(原版译著,有错误欢迎交换,转发请申明)

  GeoPandas是一个开源项目,它的目标是驱动在Python下更利于的处理地理空间数据。GeoPandas增加了pandas的数据类型,允许其在几何类型上进展空间操作。几何操作由 shapely实施。 GeoPandas进一步依靠于 fiona展开文件存取和 descartes ,matplotlib 举行绘图。

描述

GeoPandas
的指标是在Python下更便于处理地理数据。它整合了pandas和shaply的成效,提供在pandas下的上空操作和shapel下高层次的拍卖多几何构型的接口。GeoPandas
允许你很不难的用Python举办操作,不然的话,你将只可以用二个空中数据库去处理,如PostGIS。

安装

小编方今的意识版本是0.1,安装,可以利用pip或easy_install:

 pip install geopandas

您也能够经过克隆 GitHub上的仓库去安装新型的支出版本,命令脚本如下:

git clone https://github.com/geopandas/geopandas.git
cd geopandas
python setup.py install

如出一辙也能够在PyPI上安装新型的可用开发版本,使用pip,加上–pre安装1.4还是更高的版本,只怕直接采纳pip从GitHub仓库中安装:

pip install git+git://github.com/geopandas/geopandas.git

依赖

支持Python版本2.6,2.7,和3.2+

依赖包:

制图的话会用到别的的一部分包:

测试

从源目录下运转当前的测试集,在命令行运维:

nosetests -v

测试活动运转在GitHub库中有着的交给业务上,包蕴在Travis
CI
的push请求。

GeoPandas 使用手册

GeoPandas实现了七个关键的数据结构,Geo塞里es和GeoDataFrame。它们各自是pandas中塞里es和DataFrame的子类。

GeoSeries

多少个Geo塞里es包蕴2个几何图形的连串。

GeoSeries类完毕了大约拥有的Shapely对象的属性和方法。在行使GeoSeries时,它将选用于队列中拥有几何图形的每一个成分。二元操作能够在多个GeoSeries对象之间开始展览,那种意况下二元操作将利用于每1个因素。那四个体系将按匹配的目录举行对于操作。二元操作也足以运用于单个几何,此时二元操作将对该几何连串的每一个元素实行。在以上两种状态下,操作将会回到Series或许Geo塞里es对象。

在GeoSeries对象中,以下Shapely对象的办法和性质是足以行使的:

GeoSeries.area

回去一个Series,它富含GeoSeries中每种几何的面积。

GeoSeries.bounds

归来三个DataFrame,它包含每一个几何的分界,用列值minxminymaxxmaxy来表示。

GeoSeries.length

重临3个Series,它包涵种种几何的尺寸。

GeoSeries.geom_type

回去三个字符串的Series,字符串钦点种种对象的几何类型。

GeoSeries.distance(``other)

回来一个Series,它富含与其余GeoSeries对象(每一个成分)或几何对象的矮小距离。

GeoSeries.representative_point()

返回所有点的一个GeoSeries(经简易计算),这些点必须保证在每个几何的内部。

GeoSeries.exterior

返回线环(LinearRings)的一个GeoSeries,它表示GeoSeries中每个多边形的外边界。

GeoSeries.interior

返回内部环序列的一个GeoSeries,它表示GeoSeries中每个多边形的内部环。

一元谓词操作

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()模式相反)。

聚集理论方法

GeoSeries.boundary

返回一个低维对象每个几何体的边界集合的GeoSeries。

GeoSeries.centroid

返回表示几何重心点的一个GeoSeries。

GeoSeries.difference(other)

返回每个几何体不在其他对象中的点的一个GeoSeries。

GeoSeries.intersection(other)

返回每个几何对象与其他几何对象相交的一个GeoSeries。

GeoSeries.symmetric_difference(other)

返回一个GeoSeries,它表示每个几何对象中的点不在其他几何对象中,同时其他几何对象中的点也不在这个几何对象中的部分(注:对称差异)。

GeoSeries.union(other)

返回每个几何对象与其他几何对象联合的一个GeoSeries。

构造方法(*且**这样*

GeoSeries.buffer(distance,resolution=16)

返回几何图形的一个GeoSeries,他表示每个几何对象在给定的距离内的所有点。

GeoSeries.convex_hull

当对象的点多于三个的时候,``返回表示每个对象所有点的最小凸包多边形的一个GeoSeries;只有两个点的时候,凸包变成了线串;只有一个点的时候,就是当个点。

GeoSeries.envelope

返回几何图形的一个GeoSeries,它表示包含其它对象的点或者最小矩形(边平行于坐标轴)。注:即包络线

GeoSeries.simplify(tolerance,preserve_topology=True)

返回包含每个对象简化表示的一个GeoSeries。

仿射变换

GeoSeries.rotate(self,angle,origin='center',use_radians=False)

旋转GeoSeries的坐标。

GeoSeries.scale(self,xfact=1.0,yfact=1.0,zfact=1.0,origin='center')

沿着(x,y,z)上各个方向的尺寸缩放几何图形。

GeoSeries.skew(self,angle,origin='center',use_radians=False)

按角度沿着x和y维剪切/倾斜几何图形。

GeoSeries.translate(self,angle,origin='center',use_radians=False)

转变GeoSeries的坐标。

聚拢方法

GeoSeries.unary_union

返回GeoSeries中所有几何体联合的一个几何体。

除此以外,以下的法门也兑现了:

GeoSeries.from_file()

`从文件中“加载任何能被fiona识其他格式。“`

GeoSeries.to_crs(crs=None,epsg=None)

`转换GeoSeries中的几何图形到不一致的坐标参考系统。当前GeoSeries的crs属性必须被装置。crs属性需求被钦命以用于出口,或是用字典格局恐怕用EPSG编码形式。“`

  那种方法将改成全数目的中的全数点。它没有定义或转换整个几何图形。全部连接点的有个别在当前的阴影中被认为是线条,而不是测地线。对象当先国际日期变更线(或其余投影边界)是不被允许的。

GeoSeries.plot(colormap='Set1',alpha=0.5,axes=None)

进行GeoSeries中几何图形的绘制。colormap可以被matplotlib认可,但是推荐诸如Accent,Dark2,Paired,Pastel1,Pastel2,Set1,Set2,Set3这些离散的colormap。这些都封装在plot_series()函数中。

GeoSeries.total_bounds

返回一个元组,包含整个series边界的minx,miny,maxx,maxy值。包含在序列中的几何体的边界,可以参照GeoSeries.bounds。

pandas中Series对象的艺术也是足以用的,即使不是享有的都能适用于几何对象,并且某个结出或然回到Series而不是Geo塞里es。在GeoSeries中特地达成了copy(), align(), isnull()fillna()方法,它们是可以正常使用的。

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。

Geopandas函数

GeoSeries.geocode.``geocode(strings,provider=’googlev3′,**kwargs)**“**

对字符串列表进行地理编码,返回一个GeoDataFrame,它包含在geometry列生成的点。可用的提供者有googlev3,bing,google,yahoo,mapquest和``openmapquest,**kwargs将作为参数传递给适当的地理编码器。

  要求利用geopy。请咨询采取的提供商的劳动条款。

示例

>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = GeoSeries([p1, p2, p3])
>>> g
0    POLYGON ((0.0000000000000000 0.000000000000000...
1    POLYGON ((0.0000000000000000 0.000000000000000...
2    POLYGON ((2.0000000000000000 0.000000000000000...
dtype: object

 国家地理 1

局地地理操作重返标准的pandas对象。三个GeoSeries对象的area属性将会回到八个pandas.Series,它蕴涵GeoSeries中每一项的面积.

>>> print g.area
0    0.5
1    1.0
2    1.0
dtype: float64

别的操作重回GeoPandas对象:

>>> g.buffer(0.5)
Out[15]:
0    POLYGON ((-0.3535533905932737 0.35355339059327...
1    POLYGON ((-0.5000000000000000 0.00000000000000...
2    POLYGON ((1.5000000000000000 0.000000000000000...
dtype: object

国家地理 2

GeoPandas对象能后绘制这几个图像。GeoPandas 使用descartes ,用matplotlib库绘制。为生产大家的GeoSeries图形,使用以下命令:

>>> g.plot()

GeoPandas也落到实处了代表构造函数,能够读取被fiona分辨的格式。为读取包涵London市场文书(file
containing the boroughs of New York
City
):

>>> boros = GeoDataFrame.from_file('nybb.shp')
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort()
>>> boros
               BoroName    Shape_Area     Shape_Leng  \
BoroCode
1             Manhattan  6.364422e+08  358532.956418
2                 Bronx  1.186804e+09  464517.890553
3              Brooklyn  1.959432e+09  726568.946340
4                Queens  3.049947e+09  861038.479299
5         Staten Island  1.623853e+09  330385.036974

                                                   geometry
BoroCode
1         (POLYGON ((981219.0557861328125000 188655.3157...
2         (POLYGON ((1012821.8057861328125000 229228.264...
3         (POLYGON ((1021176.4790039062500000 151374.796...
4         (POLYGON ((1029606.0765991210937500 156073.814...
5         (POLYGON ((970217.0223999023437500 145643.3322...

国家地理 3

>>> boros['geometry'].convex_hull
0    POLYGON ((915517.6877458114176989 120121.88125...
1    POLYGON ((1000721.5317993164062500 136681.7761...
2    POLYGON ((988872.8212280273437500 146772.03179...
3    POLYGON ((977855.4451904296875000 188082.32238...
4    POLYGON ((1017949.9776000976562500 225426.8845...
dtype: object

国家地理 4

为展现更复杂的操作,我们生产包涵3000个随机点的多少个GeoSeries:

>>> from shapely.geometry import Point
>>> xmin, xmax, ymin, ymax = 900000, 1080000, 120000, 280000
>>> xc = (xmax - xmin) * np.random.random(2000) + xmin
>>> yc = (ymax - ymin) * np.random.random(2000) + ymin
>>> pts = GeoSeries([Point(x, y) for x, y in zip(xc, yc)])

至今在各种点周围按一定的半径绘制圆:

>>> circles = pts.buffer(2000)

咱俩得以选取以下命令使那么些圆合并成单个shapely的MutiPolygon几何对象:

>>> mp = circles.unary_union

领取在种种区内的上一步生成的几何对象的片段,可以运用:

>>> holes = boros['geometry'].intersection(mp)

国家地理 5

再者能够拿走区域内那些部分以外的其它部分面积:

>>> boros_with_holes = boros['geometry'].difference(mp)

国家地理 6

留神,那一个能够简化一点,因为geometry能够在GeoDataFrame中作为品质获得,intersection和difference方法分别是由“&”和“-”操作符完成的。例如,后者能够省略的表示为boros.geometry
-mp。

计量每一个区中这个由点缓冲生成的holes的百分比,是很简单做到的

>>> holes.area / boros.geometry.area
BoroCode
1           0.602015
2           0.523457
3           0.585901
4           0.577020
5           0.559507
dtype: float64

 

相关文章