zoukankan      html  css  js  c++  java
  • 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实现了两个主要的数据结构,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
  • 相关阅读:
    springboot文件上传: 单个文件上传 和 多个文件上传
    Eclipse:很不错的插件-devStyle,将你的eclipse变成idea风格
    springboot项目搭建:结构和入门程序
    POJ 3169 Layout 差分约束系统
    POJ 3723 Conscription 最小生成树
    POJ 3255 Roadblocks 次短路
    UVA 11367 Full Tank? 最短路
    UVA 10269 Adventure of Super Mario 最短路
    UVA 10603 Fill 最短路
    POJ 2431 Expedition 优先队列
  • 原文地址:https://www.cnblogs.com/giserliu/p/4988615.html
Copyright © 2011-2022 走看看