008geopandas

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

GeoPandas是一个开源项目,它的目的是使得在Python下更方便的处理地理空间数据。GeoPandas扩展了pandas的数据类型,允许其在几何类型上进行空间操作。几何操作由 shapely执行。 GeoPandas进一步依赖于 fiona进行文件存取和 descartesmatplotlib 进行绘图。

Geopandas 依赖库

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

image.png

然后使用如下命令进行安装

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

其他包可以通过 pip install geopandas 安装

描述

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,它包含每个几何的边界,用列值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。

二元谓词操作

示例

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

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

[图片上传失败...(image-594da9-1575962477204)]

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

[图片上传失败...(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)]

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

[图片上传失败...(image-dc09ef-1575962477204)]

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

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

[图片上传失败...(image-c55079-1575962477203)]

注意,这个可以简化一点,因为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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • Pandas概述 Pandas(Python Data Analysis Library )是基于NumPy 的一...
    __method__阅读 881评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,093评论 1 32
  • Pandas 目录一、Pandas基础二、Pandas三大数据结构1.Series2.DataFrame3.Ind...
    Recalcitrant阅读 2,032评论 0 11
  • Pandas概述 Pandas(Python Data Analysis Library )是基于NumPy 的一...
    __method__阅读 814评论 0 0
  • 今天晚上很是充实愉快,一起去楼下散步;回来又一起做芭比买鞋的游戏;一起做芭比需要包包和鞋盒,做的过程中你接...
    哆唻咪家的小呆呆阅读 121评论 0 0