008geopandas

https://blog.csdn.net/learn_tech/article/details/80827063

GeoPandas是一個(gè)開(kāi)源項(xiàng)目,它的目的是使得在Python下更方便的處理地理空間數(shù)據(jù)。GeoPandas擴(kuò)展了pandas的數(shù)據(jù)類(lèi)型,允許其在幾何類(lèi)型上進(jìn)行空間操作。幾何操作由 shapely執(zhí)行。 GeoPandas進(jìn)一步依賴(lài)于 fiona進(jìn)行文件存取和 descartesmatplotlib 進(jìn)行繪圖。

Geopandas 依賴(lài)庫(kù)

http://www.lfd.uci.edu/~gohlke/pythonlibs 下載 Fiona , GDAl , pyproj , Shapely

image.png

然后使用如下命令進(jìn)行安裝

pip install E:\Repository\python\Fiona-1.8.13-cp37-cp37m-win_amd64.whl

其他包可以通過(guò) pip install geopandas 安裝

描述

GeoPandas 的目的是在Python下更容易處理地理數(shù)據(jù)。它結(jié)合了pandas和shaply的功能,提供在pandas下的空間操作和shapel下高層次的處理多幾何構(gòu)型的接口。GeoPandas 允許你很容易的用Python進(jìn)行操作,不然的話,你將不得不用一個(gè)空間數(shù)據(jù)庫(kù)去處理,如PostGIS。

安裝

筆者目前的發(fā)現(xiàn)版本是0.1,安裝,可以使用pip或easy_install:

pip install geopandas

你也可以通過(guò)克隆 GitHub上的倉(cāng)庫(kù)去安裝最新的開(kāi)發(fā)版本,命令腳本如下:

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

同樣也可以在PyPI上安裝最新的可用開(kāi)發(fā)版本,使用pip,加上--pre安裝1.4或者更高的版本,或者直接使用pip從GitHub倉(cāng)庫(kù)中安裝:

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

依賴(lài)

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

依賴(lài)包:

繪圖的話會(huì)用到另外的一些包:

測(cè)試

從源目錄下運(yùn)行當(dāng)前的測(cè)試集,在命令行運(yùn)行:

nosetests -v

測(cè)試自動(dòng)運(yùn)行在GitHub庫(kù)中所有的提交事務(wù)上,包括在Travis CI的push請(qǐng)求。

GeoPandas 使用手冊(cè)

GeoPandas實(shí)現(xiàn)了兩個(gè)主要的數(shù)據(jù)結(jié)構(gòu),GeoSeries和GeoDataFrame。它們分別是pandas中Series和DataFrame的子類(lèi)。

GeoSeries

一個(gè)GeoSeries包含一個(gè)幾何圖形的序列。

GeoSeries類(lèi)實(shí)現(xiàn)了幾乎所有的Shapely對(duì)象的屬性和方法。在使用GeoSeries時(shí),它將應(yīng)用于序列中所有幾何圖形的每一個(gè)元素。二元操作可以在兩個(gè)GeoSeries對(duì)象之間進(jìn)行,這種情況下二元操作將應(yīng)用于每一個(gè)元素。這兩個(gè)序列將按匹配的索引進(jìn)行對(duì)于操作。二元操作也可以應(yīng)用于單個(gè)幾何,此時(shí)二元操作將對(duì)該幾何序列的每個(gè)元素進(jìn)行。在以上兩種情況下,操作將會(huì)返回Series或者GeoSeries對(duì)象。

在GeoSeries對(duì)象中,以下Shapely對(duì)象的方法和屬性是可以使用的:
GeoSeries.area

返回一個(gè)Series,它包含GeoSeries中每個(gè)幾何的面積。

GeoSeries.bounds

返回一個(gè)DataFrame,它包含每個(gè)幾何的邊界,用列值minx,miny,maxx,maxy來(lái)表示。

GeoSeries.length

返回一個(gè)Series,它包含每個(gè)幾何的長(zhǎng)度。

GeoSeries.geom_type

返回一個(gè)字符串的Series,字符串指定每個(gè)對(duì)象的幾何類(lèi)型。

GeoSeries.distance(other)

返回一個(gè)Series,它包含與其他GeoSeries對(duì)象(每個(gè)元素)或幾何對(duì)象的最小距離。

GeoSeries.representative_point()

返回所有點(diǎn)的一個(gè)GeoSeries(經(jīng)簡(jiǎn)易計(jì)算),這些點(diǎn)必須保證在每個(gè)幾何的內(nèi)部。

GeoSeries.exterior

返回線環(huán)(LinearRings)的一個(gè)GeoSeries,它表示GeoSeries中每個(gè)多邊形的外邊界。

GeoSeries.interior

返回內(nèi)部環(huán)序列的一個(gè)GeoSeries,它表示GeoSeries中每個(gè)多邊形的內(nèi)部環(huán)。

一元謂詞操作

GeoSeries.is_empty

返回一個(gè)布爾型的Series,對(duì)于一個(gè)空的幾何圖形,該值就為T(mén)rue。

GeoSeries.is_ring

返回一個(gè)布爾型的Series,對(duì)于閉合的要素,該值就為T(mén)rue。

GeoSeries.is_simple

返回一個(gè)布爾型的Series,如果幾何體自身不交叉,該值就為T(mén)rue(僅對(duì)線串--LineStrings和線環(huán)--LineRings有意義)。

GeoSeries.is_valid

返回一個(gè)布爾型的Series,如果幾何體是有效的,該值就為T(mén)rue。

二元謂詞操作

示例

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

[圖片上傳失敗...(image-824711-1575962477204)]

一些地理操作返回標(biāo)準(zhǔn)的pandas對(duì)象。一個(gè)GeoSeries對(duì)象的area屬性將會(huì)返回一個(gè)pandas.Series,它包含GeoSeries中每一項(xiàng)的面積。

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

其他操作返回GeoPandas對(duì)象:

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

[圖片上傳失敗...(image-594da9-1575962477204)]

GeoPandas對(duì)象能后繪制這些圖像。GeoPandas 使用descartes ,用matplotlib庫(kù)繪制。為生產(chǎn)我們的GeoSeries圖形,使用以下命令:

>>> g.plot()

GeoPandas也實(shí)現(xiàn)了替代構(gòu)造函數(shù),能夠讀取被fiona識(shí)別的格式。為讀取包含紐約市鎮(zhèn)文件(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...

[圖片上傳失敗...(image-228c36-1575962477204)]

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

[圖片上傳失敗...(image-9e460d-1575962477204)]

為展示更復(fù)雜的操作,我們生產(chǎn)包含2000個(gè)隨機(jī)點(diǎn)的一個(gè)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)])

現(xiàn)在在每個(gè)點(diǎn)周?chē)垂潭ǖ陌霃嚼L制圓:

>>> circles = pts.buffer(2000)

我們可以使用以下命令使這些圓合并成單個(gè)shapely的MutiPolygon幾何對(duì)象:

>>> mp = circles.unary_union

提取在每個(gè)區(qū)內(nèi)的上一步生成的幾何對(duì)象的部分,可以使用:

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

[圖片上傳失敗...(image-dc09ef-1575962477204)]

并且可以得到區(qū)域內(nèi)這些部分以外的其他部分面積:

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

[圖片上傳失敗...(image-c55079-1575962477203)]

注意,這個(gè)可以簡(jiǎn)化一點(diǎn),因?yàn)間eometry可以在GeoDataFrame中作為屬性得到,intersection和difference方法分別是由“&”和“-”操作符實(shí)現(xiàn)的。例如,后者可以簡(jiǎn)單的表示為boros.geometry -mp。

計(jì)算每個(gè)區(qū)中這些由點(diǎn)緩沖生成的holes的比例,是很容易做到的

>>> holes.area / boros.geometry.area
    BoroCode
    1 0.602015
    2 0.523457
    3 0.585901
    4 0.577020
    5 0.559507
    dtype: float64
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Pandas概述 Pandas(Python Data Analysis Library )是基于NumPy 的一...
    __method__閱讀 891評(píng)論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,136評(píng)論 1 32
  • Pandas 目錄一、Pandas基礎(chǔ)二、Pandas三大數(shù)據(jù)結(jié)構(gòu)1.Series2.DataFrame3.Ind...
    Recalcitrant閱讀 2,086評(píng)論 0 11
  • Pandas概述 Pandas(Python Data Analysis Library )是基于NumPy 的一...
    __method__閱讀 832評(píng)論 0 0
  • 今天晚上很是充實(shí)愉快,一起去樓下散步;回來(lái)又一起做芭比買(mǎi)鞋的游戲;一起做芭比需要包包和鞋盒,做的過(guò)程中你接...
    哆唻咪家的小呆呆閱讀 127評(píng)論 0 0