Python中的GeoPandas和GeoDataFrame

Python018

Python中的GeoPandas和GeoDataFrame,第1张

GeoPandas是对pandas的扩展,用于处理地理空间数据

GeoDataFrame是其中一个数据类型,和ArcGIS中的属性表很像,有几何形状字段(红框)和常规的属性字段(绿框),就名称不一样而已。

前提:import geopandas as gpd

读入之后,df为GeoDataFrame格式,结构如下:

结果:

geometry字段中记录的是几何形状,类型是GeoSeries,有很多函数进行相应操作

之后的df完全可以套用dataframe的操作方法

假如现在的df为:

iloc 输入的是数字类型位置索引

loc 输入的是文本类型的位置索引名

at 和loc的用法差不多

it 就是属性表中的一行。math为其中的一个字段名

输出:

df[1]['math']=100 这种只要是 用两个括号进行索引修改的均无效 ,这种索引方式可以理解为先拿出了一行(是个视图),修改实际上并未对原数据修改。

此外,尝试利用上述iloc遍历修改也不行

会出现错误:

正确做法是在原df上取值,一个括号直接定位。

通过iloc遍历修改可写成如下方式:

关键语句:gp.name

正常人的思维都会认为sort_values排序之后,按1,2,3……去索引数据的时候就是一个从排好序的数据,但是实际上如下图所示,sort_values后数据表确实按数学成绩排序了,但是索引并未改变,这是按照按1,2,3……去索引其实还是原来的顺序,看起来好像并未排序,所以排序后最好用reset_index重新建立索引。

以下将string类型的Neighbors改为list类型

以下将list类型的Neighbors改为string类型

在上一课中,我们已经介绍过使用 Plotly 实现地理信息可视化的方法。但是,那个工具对我们不是很友好,特别是由于某种不可抗力的存在,可能根本无法调试。

不过,pyecharts 的确在地理信息可视化上做得不错——如果仅做国内地图,特别推荐使用,还是通过示例来说明吧。

首先,要安装地图文件,安装方法如下:

不仅可以安装上述官方提供的地图文件,还能够自己制作个性化的地图扩展, 具体请点击这里参阅 。

有了上述基础,就可以进行地理信息可视化了(以下示例的数据源, 请点击这里查看 )。

实现上述效果的类是 Geo,默认情况下绘制散点图,此外可以实现 type='effectScatter'(闪耀的散点图)和 type='heatmap'(热图)。

此图也是动态交互的,通过左侧图例选择不同数值范围,相应地会显示该范围内的数据。

如果按照前面所述安装了各种地图文件,还可以在 geo.add 方法中规定地理范围。

在 pyecharts 地图中认可的城市名称都如同上述结果显示的那样,例如“阜新”,不要写成“阜新市”。

下面就绘制江苏省的空气质量分布图。

输出结果:

这里的 geo.add 参数与前面的不同,导致了展示效果的差异。

一直以来,房价都是人们关注的话题,下面就用可视化的方式研究一下近十年(2009—2018 年)全国部分城市平均房价(数据源: https://github.com/qiwsir/DataSet/tree/master/house )。

输出结果:

在热图查看房价的基础上,为了更准确查看某些城市的房价走向,可以使用折线图看看趋势,例如下列几个城市。

随着geojson变得越来越流行,需要给geojson一些具体的数据操作。我在写这库的工程中也是学习的过程,希望也能给你的GIS学习一点点帮助。

将脚本 geojson_utils.py 复制到你的文件夹中,然后输入:

验证两条线是否相交并求出交点。 原理

判断点是否在多边形内部。原理大致如下:

判断点是否在多个多边形内

通过一个中心点和半径获得一个圆形的图形

取出矩形的中心点

两点的互联网球面距离

(参考 http://www.movable-type.co.uk/scripts/latlong.html ),注意这个是球型距离,非大地陀球距离

判断点线面是否在某点半价内

求多边形面积

多边形中心点

adapted from http://paulbourke.net/geometry/polyarea/javascript.txt

通过起点,距离和角度来计算终点