GeoPandas官方中文文檔--譯著

譯自GeoPandas 0.1.0 文檔(原版譯著,有錯誤歡迎交流,轉載請註明)html

  GeoPandas是一個開源項目,它的目的是使得在Python下更方便的處理地理空間數據。GeoPandas擴展了pandas的數據類型,容許其在幾何類型上進行空間操做。幾何操做由 shapely執行。 GeoPandas進一步依賴於 fiona進行文件存取和 descartes ,matplotlib 進行繪圖。python

描述

GeoPandas 的目的是在Python下更容易處理地理數據。它結合了pandas和shaply的功能,提供在pandas下的空間操做和shapel下高層次的處理多幾何構型的接口。GeoPandas 容許你很容易的用Python進行操做,否則的話,你將不得不用一個空間數據庫去處理,如PostGIS。git

安裝

筆者目前的發現版本是0.1,安裝,能夠使用pip或easy_install:github

 pip install geopandas

你也能夠經過克隆 GitHub上的倉庫去安裝最新的開發版本,命令腳本以下:sql

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

依賴包:數據結構

繪圖的話會用到另外的一些包:dom

測試

從源目錄下運行當前的測試集,在命令行運行:ide

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
相關文章
相關標籤/搜索