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 ...
随机推荐
- tfs2015 生成与发布 配置
先来看一张微软官方的自动生成与发布架构图,以便了解很多概念间的关系 1.安装好TFS2015(可以参考TFS2010的安装过程,尤其是账号权限相关),我自己是从TFS2010一路升级上来的(TFS20 ...
- CSS魔法堂:稍稍深入伪类选择器
前言 过去零零星星地了解和使用:link.::after和content等伪类.伪元素选择器,最近看书时发现这方面有所欠缺,于是决定稍微深入学习一下,以下为伪类部分的整理. 伪类 伪类选择器实质上 ...
- 我的第一个正式react demo
以前在看深入浅出react和redux的时候, 那个demo 总是用creat-react-app 创建的, 现在终于可以实现自己手动搭建一个简单的demo了. 1.首先新建一个文件夹, 执行npm ...
- GENet/ESPNet
GENet(更泛化的SEnet,有带参数和不参数的模块) 原文:https://blog.csdn.net/dgyuanshaofeng/article/details/84179196 SENet之 ...
- 【Geek软技能】程序员,为什么写不好一份简历?
一份好简历会是一份好工作的开端. 为什么?沧海也会遗珠 简历,是如此重要,它是获得一份满意工作的敲门砖,但不同的简历敲门的声响可不同. 但很多时候简历给人的感觉也似乎微不足道,因为没有人会真正细致 ...
- 基于weixin-java-mp 做微信JS签名 invalid signature签名错误 官方说明
微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ...
- Atitit 关于共享经济之共享男女朋友的创业计划
Atitit 关于共享经济之共享男女朋友的创业计划 1. 共享经济的历史与趋势 1 1.1. 共享经济三大特征=产能过剩+共享平台+人人参与. 1 1.2. 共享经济是个大趋势,使用权渐渐的取代所有权 ...
- Cocos 更新时反复杀进程,导致差异更新失效的Bug
Cocos 更新时反复杀进程时,差异更新失效的问题: 问题复现步骤: 1.在project.manifest.temp 文件下载成功后,下载Assets资源的时候杀掉进程 2.重启游戏,继续更新时会使 ...
- ubuntu 18.04 配置 rc.local
ubuntu 18.04 配置 rc.local:https://blog.csdn.net/a912952381/article/details/81205095 Ubuntu /etc/rc.lo ...
- GCC:/usr/lib/libstdc++.so.6: version GLIBCXX_3.4.15 not found
源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found的问题.这 ...