专栏首页点滴积累geopandas overlay 函数报错问题解决方案

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 函数实际使用中发现的问题,简单介绍了问题的分析和查找过程,并给出了解决方案。其实所有问题都是这样,只要发现了问题,一步步耐心去探寻,总会找到解决方案,就怕连问题都发现不了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安装ClouderaManager以及使用ClouderaManager安装分布式集群的若干细节

    目录 前言 整体介绍 分步安装介绍 总结 一、前言        周末干了近四十个小时中间只休息了五个小时终于成功安装了ClouderaManager以及分布式...

    魏守峰
  • 使用Ambari安装hadoop集群

          最近需要做些spark的工作,所以弄了几台dell7500就这么准备开始搭建集群,之前用过几台更破的台式机搭建过一次,折腾了半个月之久,终于成功搭建...

    魏守峰
  • 使用C#将json字符串作为对象存入MongoDB

          今天刚好在工作中碰到一个小问题,并愉快的解决了,权当将其记录下来,供人查阅,首先声明本人是个忠实的微软技术爱好者,主要使用的也是.NET语言。下面进...

    魏守峰
  • 前端基础-ECMAScript函数

    ES6新增了展开运算符(用三个连续的点 (...) 表示),能够将数组和字符串字面量展开为多个元素

    cwl_java
  • 国内电子签名如火如荼,为何DocuSign 在美遇到IPO危机?

    T客汇官网:tikehui.com 撰文 | 杨丽 电子签名,就是通过密码技术对电子档案实施电子形式的签名,能帮助企业大大提升文档签名授权的效率,这项服务在企...

    人称T客
  • IOS/MacOS沙箱逃逸竞赛

    iOS 12在几周前发布了,并带来了许多安全方面的修复和改进。特别是,这个新版本碰巧修补了我们在Synacktiv发现的一个很厉害的内核漏洞。

    安恒网络空间安全讲武堂
  • 搭建jekyll博客

    主流的个人博客都是用hexo搭建的,一部分人喜欢用jekyll搭建,下面我们来细说一下操作流程

    ppjun
  • Python函数中的*、*args、**kwargs

    当函数需要的参数数量不确定的时候,可以使用args 和 kwargs , 所有的位置参数保存在args中,以元组的形式保存,调用时直接用args,不需要带 *...

    神秘的寇先森
  • 19-3-14Python中函数的进阶

    注意:参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。

    GhostCN_Z
  • python多进程

    py3study

扫码关注云+社区

领取腾讯云代金券