geopandas overlay 函数报错问题解决方案
前言
这篇文章依旧是基于上一篇文章(使用Python实现子区域数据分类统计)而写,此文章中介绍了使用 geopandas 的 overlay 函数对两个 GeoDataFrame 对象取相交或相异的部分,即进行空间压盖分析。
此函数封装的非常好,解决了我们的主要问题,在我自己的 Windows 系统上运行也正常,但是部署到 Ubuntu 16.04 后就出了问题,经过层层分析,最终发现是 Rtree 的问题。
本文介绍问题的来龙去脉和解决方案。
问题重现
创建两个 GeoDataframe 对象,假定为 data1 和 data2,两个对象均包含一个 Polygon 的 GeoSeries 列,对这两个对象执行 overlay 函数,如下:
intersection_data = geopandas.overlay(data1, data2, how='intersection')
首先需要在 Ubuntu 系统上安装 geopandas 类库,可以使用 pip 直接安装,不明所以的请自行搜索。装完 geopandas 后需要安装 Rtree 类库,执行如下命令:
pip install Rtree
安装完毕后执行上面的 overlay 语句,Windows 下能够正常运行,在 Ubuntu 上却得不到结果,一直以为是我写的有问题,但多次切换系统和测试之后依然如故,最终检查系统日志,发现报错如下:
'NoneType' object has no attribute 'intersection'
难道 data1 或者 data2 为空了,反复检查不存在这个问题,那应该是 overlay 函数里面出问题了吧,再详细的跟踪、查看日志发现另一个错误:
TypeError: incompatible types, LP_c_double instance instead of LP_c_double instance
在 Google 中反复搜索此问题,倒是 Rtree 的 github 中就有此问题的记录,但已经是 2016 年的问题了,难道依然没有解决,实在令人难以相信。
解决方案
发现了问题之后,就反复的使用 pip 卸载、安装 Rtree,但问题依旧存在,朋友提示我可以对比一下 Rtree 对此问题修复的代码和系统中安装的代码,看一下代码中是否包含解决问题的更新。检查之后,果然是问题解决之前的代码,看样子 Rtree 已经有两年没有人维护了,那么问题的解决方案就变成了如何安装最新的 Rtree。
使用 pip install Rtree 安装无法得到最新版本,只能通过源码安装了,于是首先将 Rtree 代码 clone 到本地,接着使用 pip 安装,成功解决了此问题,如下:
git clone https://github.com/Toblerity/rtree.git
cd rtree
pip install .
结尾
本文针对 overlay 函数实际使用中发现的问题,简单介绍了问题的分析和查找过程,并给出了解决方案。其实所有问题都是这样,只要发现了问题,一步步耐心去探寻,总会找到解决方案,就怕连问题都发现不了。
geopandas overlay 函数报错问题解决方案的更多相关文章
- 新手常见的python报错及解决方案
此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题.希望帮助到刚入门的朋友们.后续会不断补充. 目录 1.NameErr ...
- Mysql only_full_group_by以及其他关于sql_mode原因报错详细解决方案
Mysql only_full_group_by以及其他关于sql_mode原因报错详细解决方案 网上太多相关资料,但是抄袭严重,有的讲的也是之言片语的,根本不连贯(可能知道的人确实不想多说) 我总共 ...
- js执行函数报错Cannot set property 'value' of null怎么解决?
js执行函数报错Cannot set property 'value' of null 的解决方案: 原因:dom还没有完全加载 第一步:所以js建议放在body下面执行, 第二步:window.on ...
- 光流法draw_flow()函数报错
光流法draw_flow()函数报错 import cv2 from scipy import * def draw_flow(im, flow, step=16): ""&quo ...
- 关于Entity Framework中的Attached报错相关解决方案的总结
关于Entity Framework中的Attached报错的问题,我这里分为以下几种类型,每种类型我都给出相应的解决方案,希望能给大家带来一些的帮助,当然作为读者的您如果觉得有不同的意见或更好的方法 ...
- python 3 直接使用reload函数报错
reload()是python2 的内置函数可以直接使用,但是python3 直接使用此函数报错,需要导入importlib 模块 from importlib import reload
- Win7下nginx默认80端口被System占用,造成nginx启动报错的解决方案
Win7下nginx默认80端口被System占用,造成nginx启动报错的解决方案 在win7 32位旗舰版下,启动1.0.8版本nginx,显示如下错误: [plain] 2012/04/0 ...
- Linux 下使用C语言 gets()函数报错
在Linux下,使用 gets(cmd) 函数报错:warning: the 'gets' function is dangerous and should not be used. 解决办法:采用 ...
- Mac上PyCharm运行多进程报错的解决方案
Mac上PyCharm运行多进程报错的解决方案 运行时报错 may have been in progress in another thread when fork() was called. We ...
随机推荐
- css解决滚动弹出层里边的滚动条时带动了整个页面滚动的问题
之前一个朋友问我说他的一个弹出层在弹出后,上下滑动弹出层或遮罩层,结果遮罩层下边的整个页面(页面超出了一屏)也跟着滚动了,他说他不想要这样的效果,我说你把弹出层和遮罩层的position:fixed设 ...
- sort函数比较cmp写法
hihocoder1566http://hihocoder.com/problemset/problem/1566 一直WA因为cmp的写法写错了,未能正确实现排序功能. #include<io ...
- Unity中InitializeOnLoad属性的妙用
InitializeOnLoad 属性应用的对象是 静态构造函数,它可以保证在编辑器启动的时候调用此函数.根据这个特性,可以在编辑器中设置定期的回调(帧更新),来实现类似watchFile的功能.这里 ...
- VBV Rate Control
Part 1 <06/05/07 12:08pm> Manao | he is negating a float by printing it, adding a "-" ...
- 终于考完PMP
快到年底,上手了GO语言,搞定了广告后台,觉得年底前应该不忙; 我们的PM也报了PMP,可以一起报团学习,后来由于地理位置关系,我们项目组,三个人报了不同的班,也好,信息可以共享; 跟我们公司合作的培 ...
- 什么?又是404!趣图助你理解HTTP状态码~
HTTP状态码(一): 注释: 301—永久移动.被请求的资源已被永久移动位置: 302—请求的资源现在临时从不同的 URI 响应请求: 305—使用代理.被请求的资源必须通过指定的代理才能被访问 ...
- web调用本地exe应用程序并传入参数
从网页中通过自定义URL Protocol调用本地程序,需要将协议写到注册表中.浏览器在解析到自定义URL Protocol之后,寻找注册表,通过注册表启动相应的程序并传入参数.协议里面需要记录本地程 ...
- Nginx 反向代理504 Gateway Time-out
location /ssfwpt { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_ ...
- webstorm激活方法webstorm注册码 jetbrains激活
安装完成后,打开 WebStorm, 在打开的 License Activation 窗口中选择 License server. 在输入框输入网址即可: http://idea.codebeta.cn ...
- python时间模块time详解
在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...