今天要用到basemap读取shp文件报错,查了很多资料,都没有解决。

先是:

fig,ax = plt.subplots(figsize=(15,10))
from mpl_toolkits.basemap import Basemap
m = Basemap(llcrnrlon=-128.,llcrnrlat=30.,urcrnrlon=-110.,urcrnrlat=43.,
projection='merc',lat_1=20.,lat_2=40.,lon_0=-60.,
resolution ='l',area_thresh=1000.,ax = ax)
fm = np.vectorize(m,otypes=[np.int32,np.int32])
x,y = fm(housing.longitude,housing.latitude)
m.scatter(x,y,s=housing['population']/50,alpha=0.4,
label='population',c=housing['median_house_value'],
cmap=plt.get_cmap('jet'))
m.readshapefile('World_GIS_data/country','country')

  

成功了。

可再用另一中国地图来加载时就出错了:

报错:

ValueError: shapefile must have lat/lon vertices  - it looks like this one has vertices
in map projection coordinates. You can convert the shapefile to geographic
coordinates using the shpproj utility from the shapelib tools
(http://shapelib.maptools.org/shapelib-tools.html)我

我按着提示去找了shapelib,源码下载到了,需要编译。

我也没有vc++环境,太麻烦了,也不知道能成不。

想了好多办法都没成功,包括用pyshpelib,这个也还是要用到上面的shapelib。

然后找到了:

https://github.com/matplotlib/basemap/issues/285

说可以用geopandas来处理。

然后就是安装,这又是一个坑。

安装数次报错,找不着门道。

最后看到一篇文章。该作者可能也被坑惨了,总结写的很好(墙裂推荐):

https://geoffboeing.com/2014/09/using-geopandas-windows/

跟着上面这篇文章的终于将geopandas安装好了

然后改shapefile的crs为空字典。本来以为就好了,结果还是不行!!!

还是不行!

然后又看到这篇下面的解答,提到了ogr2ogr

https://stackoverflow.com/questions/54508676/convert-a-shapefile-to-geographic-coordinates

弄半天才明白的是安装的GDAL中的可执行文件。

后面又找到一个库,调用的ogr2ogr:

地址:

https://github.com/charlie1347/basemaps

最后:

大功告成!!!

最后在解决这个问题过程中发现一个资源:

http://geoportal.statistics.gov.uk/datasets/nuts-level-1-january-2018-full-extent-boundaries-in-the-united-kingdom/data

python basemap readshapefile二三事的更多相关文章

  1. Python中字符串二三事

    首先说两个运算符: " == " 运算符测试值的等价性,递归地比较所有内嵌对象 " is " 表达式测试对象的同一性,测试两者是否为同一对象(是否为同一地址) ...

  2. Python的__getattribute__二三事

    本来以为自己对__getattribute__已经比较了解了,结果用到的时候,才发现有一些知识点之前一直没有真正弄明白,记录如下(针对python3,python2差异较大): object类有__g ...

  3. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  4. Python 基础语法(二)

    Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...

  5. Java并发编程二三事

    Java并发编程二三事 转自我的Github 近日重新翻了一下<Java Concurrency in Practice>故以此文记之. 我觉得Java的并发可以从下面三个点去理解: * ...

  6. linux杂记(十二?) 关于账号和密码的二三事

    关于密码的二三事 关于账号和密码的二三事 久了不更linux的相关知识,实在是懒得想内容点(纯粹是懒).那么今天就来谈谈关于linux密码和账号的重要概念. 假如你的主机遭到入侵,那么对方的第一个侵入 ...

  7. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  8. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  9. python/MySQL练习题(二)

    python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...

随机推荐

  1. 我竟然不再抗拒 Java 的类加载机制了

    很长一段时间里,我对 Java 的类加载机制都非常的抗拒,因为我觉得太难理解了.但为了成为一名优秀的 Java 工程师,我决定硬着头皮研究一下. 01.字节码 在聊 Java 类加载机制之前,需要先了 ...

  2. sqlserver、oracle数据库排序空值null问题解决办法

    转:https://www.cnblogs.com/pacer/archive/2010/03/02/1676371.html [sqlserver]: sqlserver 认为 null 最小. 升 ...

  3. 【POJ - 1426】Find The Multiple(dfs)

    -->Find The Multiple 原文是英语,直接上中文了 Descriptions: 给定一个正整数n,请编写一个程序来寻找n的一个非零的倍数m,这个m应当在十进制表示时每一位上只包含 ...

  4. NetCore 中间件获取请求报文和返回报文

    using System; using System.IO; namespace WebApi.Restful.Middlewares { public class MemoryWrappedHttp ...

  5. CentOS6.5安装Oracle 12c

    CentOS6.5 安装 ORACLE 12c步骤 Oracle官网下载oracle12c安装包,解压软件:unzip linuxx64_12201_database.zip 一.创建用户和组#gro ...

  6. 目标检测:keras-yolo3之制作VOC数据集训练指南

    制作VOC数据集指南 Github:https://github.com/hyhouyong/keras-yolo3 LabelImg标注工具(windows环境下):https://github.c ...

  7. 个人永久性免费-Excel催化剂功能第27波-Excel工作表设置快捷操作

    Excel催化剂在完善了数据分析场景的插件需求后,决定再补充一些日常绝大多数Excel用户同样可以使用到的小功能,欢迎小白入场,在不违背太多Excel最佳实践的前提下,Excel催化剂乐意为广大Exc ...

  8. 编译Tomcat9源码及tomcat乱码问题解决

    因工作原因,需要从根本上优化tomcat的配置,故准备从源码入手,看看可以做哪些工作. 1. tomcat下载 tomcat最新的版本为9,下载源码的方式有3种: 1/ 官方网站 https://to ...

  9. 百度OCR 文字识别 Android安全校验

    百度OCR接口使用总结: 之前总结一下关于百度OCR文字识别接口的使用步骤(Android版本 不带包名配置 安全性弱).这边博客主要介绍,百度OCR文字识别接口,官方推荐使用方式,授权文件(安全模式 ...

  10. join,列表和字典用for循环的删除,集合,深浅拷贝

    1.join() 将列表转换成字符串,并且每个字符之间用另一个字符连接起来,join后面必须是可迭代的对象(字符串,列表,元组,字典,集合),数字不能迭代 例如: s = ['a','b','c'] ...