译自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实现了两个主要的数据结构,GeoSeries和GeoDataFrame。它们分别是pandas中Series和DataFrame的子类。

GeoSeries

一个GeoSeries包含一个几何图形的序列。

GeoSeries类实现了几乎所有的Shapely对象的属性和方法。在使用GeoSeries时,它将应用于序列中所有几何图形的每一个元素。二元操作可以在两个GeoSeries对象之间进行,这种情况下二元操作将应用于每一个元素。这两个序列将按匹配的索引进行对于操作。二元操作也可以应用于单个几何,此时二元操作将对该几何序列的每个元素进行。在以上两种情况下,操作将会返回Series或者GeoSeries对象。

在GeoSeries对象中,以下Shapely对象的方法和属性是可以使用的:

GeoSeries.area

  返回一个Series,它包含GeoSeries中每个几何的面积。

GeoSeries.bounds

  返回一个DataFrame,它包含每个几何的边界,用列值minxminymaxxmaxy来表示。

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中每个多边形的内部环。

一元谓词操作

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而不是GeoSeries。在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

一些地理操作返回标准的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

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

>>> g.plot()

GeoPandas也实现了替代构造函数,能够读取被fiona识别的格式。为读取包含纽约市镇文件(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...

>>> 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

为展示更复杂的操作,我们生产包含2000个随机点的一个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)

并且可以得到区域内这些部分以外的其他部分面积:

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

注意,这个可以简化一点,因为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

GeoPandas官方中文文档--译著的更多相关文章

  1. ReactNative官方中文文档0.21

    整理了一份ReactNative0.21中文文档,提供给需要的reactnative爱好者.ReactNative0.21中文文档.chm  百度盘下载:ReactNative0.21中文文档 来源: ...

  2. PyTorch官方中文文档:torch.nn

    torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom ...

  3. 学习Python 新去处:Python 官方中文文档

    Python 作为世界上最好用的语言,官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,那么查阅或理解速度都会大大提升.本文将介绍隐藏在 Python 官网的中文 ...

  4. django2.0 官方中文文档地址

    django2.0 官方开始发布中文文档了,之前还想着一直翻译完成所有有必要的内容,想着可以省事一些了,打开以后看了一下,发现官方的中文文档还没翻译完成, 现在(2018-7-10)最新章节是是  编 ...

  5. mysql 新手入门 官方文档+官方中文文档附地址

    点评: 官方文档地址 官方中文文档地址 sql语句扩展

  6. PyTorch官方中文文档:torch.optim 优化器参数

    内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...

  7. PyTorch官方中文文档:PyTorch中文文档

    PyTorch中文文档 PyTorch是使用GPU和CPU优化的深度学习张量库. 说明 自动求导机制 CUDA语义 扩展PyTorch 多进程最佳实践 序列化语义 Package参考 torch to ...

  8. Keras官方中文文档:Keras安装和配置指南(Windows)

    这里需要说明一下,笔者不建议在Windows环境下进行深度学习的研究,一方面是因为Windows所对应的框架搭建的依赖过多,社区设定不完全:另一方面,Linux系统下对显卡支持.内存释放以及存储空间调 ...

  9. 一、frp官方中文文档

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议. 目录 frp 的作用 开发状态 架构 使用示例 通过 ssh 访问公司内网机器 通过自定义 ...

随机推荐

  1. myEclipse修改deploy location

  2. Datum Form Goole Android

    1. <TurboChargeYourUI-How to make your AndroidUI fast and efficient> 2. <The World of List ...

  3. apache httpd配置ajp报错:ap_proxy_connect_backend disabling worker for (localhost)

    报错信息: (13)Permission denied: proxy: AJP: attempt to connect to 127.0.0.1:9019 (localhost) failed[Wed ...

  4. Word 中标题的编号变成黑框

    问题: 在使用Word编写文档时,提前拟好的标题编号会突然变成黑框(黑色的方框,黑色的矩形),如下图 解决方案: 1.将光标定位到标题中,紧邻黑框的右侧 2.按键盘左方向键使方框变成黑色 4.按键盘的 ...

  5. vpn的作用

    1.可以用于远程对方桌面. 步骤: 1.浏览器中访问网址,输入用户名,密码即可 2.输入远程桌面用户名和网址

  6. 浅谈html5某些新元素的用途

    大家都知道html是一种前端网页语言,从出现到现在已经经历了很多的版本了,但是随着html的不断发展,现在的html5已经不再是单一的前端页面语言了,html,javascript,css不再单纯的只 ...

  7. SGU 106.Index of super-prime

    时间限制:0.25s 空间限制:4M 题目大意:                 在从下标1开始素数表里,下标为素数的素数,称为超级素数(Super-prime),给出一个n(n<=10000) ...

  8. OC文件操作(2)

    NSFileManager 文件管理器完成文件的创建.移动.拷贝等管理操作 1.查询文件和目录  OC中查询路径下的目录主要分为浅度遍历和深度遍历.  浅度遍历  NSFileManager * ma ...

  9. Bootstrap_Javascript_弹出框

    HTML: <button type="button" class="btn btn-default" data-container="body ...

  10. Windows 10正式版密钥大全,Win10激活序列号KEY大全

    最新放出来的Win10密钥:NJ4MX-VQQ7Q-FP3DB-VDGHX-7XM87 MH37W-N47XK-V7XM9-C7227-GCQG9 VK7JG-NPHTM-C97JM-9MPGT-3V ...