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+
依赖包:
- numpy
- pandas (version 0.13 or later)
- shapely
- fiona
- six
- geopy 0.99 (optional; for geocoding)
- psycopg2 (optional; for PostGIS connection)
绘图的话会用到另外的一些包:
测试
从源目录下运行当前的测试集,在命令行运行:
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,它包含每个几何的边界,用列值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中每个多边形的内部环。
一元谓词操作
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官方中文文档--译著的更多相关文章
- ReactNative官方中文文档0.21
整理了一份ReactNative0.21中文文档,提供给需要的reactnative爱好者.ReactNative0.21中文文档.chm 百度盘下载:ReactNative0.21中文文档 来源: ...
- PyTorch官方中文文档:torch.nn
torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom ...
- 学习Python 新去处:Python 官方中文文档
Python 作为世界上最好用的语言,官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,那么查阅或理解速度都会大大提升.本文将介绍隐藏在 Python 官网的中文 ...
- django2.0 官方中文文档地址
django2.0 官方开始发布中文文档了,之前还想着一直翻译完成所有有必要的内容,想着可以省事一些了,打开以后看了一下,发现官方的中文文档还没翻译完成, 现在(2018-7-10)最新章节是是 编 ...
- mysql 新手入门 官方文档+官方中文文档附地址
点评: 官方文档地址 官方中文文档地址 sql语句扩展
- PyTorch官方中文文档:torch.optim 优化器参数
内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...
- PyTorch官方中文文档:PyTorch中文文档
PyTorch中文文档 PyTorch是使用GPU和CPU优化的深度学习张量库. 说明 自动求导机制 CUDA语义 扩展PyTorch 多进程最佳实践 序列化语义 Package参考 torch to ...
- Keras官方中文文档:Keras安装和配置指南(Windows)
这里需要说明一下,笔者不建议在Windows环境下进行深度学习的研究,一方面是因为Windows所对应的框架搭建的依赖过多,社区设定不完全:另一方面,Linux系统下对显卡支持.内存释放以及存储空间调 ...
- 一、frp官方中文文档
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议. 目录 frp 的作用 开发状态 架构 使用示例 通过 ssh 访问公司内网机器 通过自定义 ...
随机推荐
- 读取xml字符串
string strXml = @"<MessageData><pm_id>10</pm_id><pm_title>这是公司或者产品的名称&l ...
- ORACLE添加作业
--创建job declare job number; beginsys.dbms_job.submit(job,'prc_into_actiwager;',sysdate,'sysdate+30/( ...
- JS,JQuery杂谈
JS返回页面: JS返回前一个页面,经常看到有人用window.history.go(-1)这种方法 这种放的确可以返回,也仅仅只是返回,返回的页面信息却没有刷新.也有人用windows.histo ...
- 最简单的基于FFmpeg的移动端例子:IOS 视频转码器
===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...
- 外部式css样式,写在单独的一个文件中
外部式css样式(也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css”为扩展名,在<head>内(不是在<style>标签内)使用<l ...
- 使用soapUI代替WSDL2JAVA生成cxf HTTPS 客户端调用代码
如果直接用cxf下面的wsdl2java生成https服务调用代码,会报https证书的错误.在你不想导入证书的情况下,可以使用soapUI进行客户端代码的生成,步骤如下: 1.设置CXF,如下图: ...
- laravel5通过auth.attempt事件加入登陆验证码
<?php namespace WangDong\Http\Controllers\Auth; use Illuminate\Http\Exception\HttpResponseExcepti ...
- 除法(Division ,UVA 725)-ACM集训
参考:http://www.cnblogs.com/xiaobaibuhei/p/3301110.html 算法学到很弱,连这么简单个问题都难到我了.但我偏不信这个邪,终于做出来了.不过,是参照别人的 ...
- mysql数据类型——字符串char(m)和varchar(m)
char(m) 定长字符串类型 非 Unicode 字符 varchar(m) 变长字符串类型 非 Unicode 数据 说明:M为最大可存储字节数 汉子占两个字节,通过指定m,来限制存储的最大字 ...
- H - A+B for Input-Output Practice (VII)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description You ...