我希望在不使用ArcGIS / ArcPy的情况下使用Python可视化地理数据并制作地图。

在互联网上,我找到了如何使用Python制作专题图的方法:

这是我尝试过的一些代码:

import shpUtils
import matplotlib.pyplot as plt

shpRecords = shpUtils.loadShapefile('C:\Users\shapefile.shp')

for i in range(0,len(shpRecords)):
    x = []
    y = []
    for j in range(0,len(shpRecords[i]['shp_data']['parts'][0]['points'])):

    tempx = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['x'])
    tempy = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['y'])
    x.append(tempx)
    y.append(tempy)
    plt.fill(x,y)

plt.axis('equal')
plt.title("Testing")
plt.show()


但是,当我运行它时,它会给我随机的颜色。

如果我想可视化shapefile的某一列,如何使用类似的代码实现呢?

这在上面的链接中非常不清楚,他只讨论颜色的使用...

我是否可能需要额外的模块来完成此操作,例如笛卡尔和PySAL ?

#1 楼

我不了解ArcPy,但是多年来我一直在Python中使用shapefile和栅格。 shpUtils是其中之一,
不是最常用的。其他,请参见Pypi:GIS和gis.stackexchange上的示例以及Web上的许多示例(不仅是英文)。它们中的大多数比ArcPy(或arcgisscripting)要古老得多。 >要绘制几何图形,您可以使用matplotlib和可能的笛卡尔,将matplotlib的“扩展”用于区域,但也可以使用许多其他模块,请参见Pypi:绘图和maymay等模块用于3D表示(也包括matplotlib)还有诸如mapnik之类的模块,它们直接为您提供以下可能性:1)读取shapefile和4)使用模块Pycairo进行绘图。

之后,它就像GIS: br />您可以使用模块1)打开,保存shapefile,并根据需要使用其他模块(例如numpy或scipy)进行处理。
您可以使用shape来处理和分析几何对象(缓冲区)。等)。
您可以使用matplotlib绘制几何图形,但是matplotlib不知道您要绘制什么图形。您可以使用模块1)或3)来指定要绘制的内容(属性等)和方式。如何在代码中实现呢?


所以,您必须学习matplotib和其他模块。您必须学习ArcPy,这是相同的...(网络上有很多很棒的教程,尤其是对于matplolib而言,ArcPy更容易,因为它是纯Python)。

一些示例仅限Python



具有基于属性的颜色的地质图(多边形shapefile)



基于属性的颜色的3D点(PointZ形状文件)



DEM上的3D点(具有z作为属性的点形状文件)和3D线(PolyLineZ形状文件),



基于原始shapefile(折线)的属性(地质构造=横截面)的具有z值和颜色的地形轮廓shapefile)



DEM(GeoTIFF),带有模块Mayavi2



DEM(ESRI ascii网格, .asc)和带有visvis模块的Point shapefile(以z为属性)



钻孔(折线Z的3D缓冲区,其颜色基于属性(地质构造) ,其栅格表面是通过点shapefile(以z为属性)中的numpy和matplotlib模块计算的,并使用visvis
模块可视化

#2 楼

我遇到了类似的问题,需要快速可视化shapefile,并且我总是发现Matplotlib方法相当长,可以完成这么小的任务。相反,我开发了“ Python地理可视化工具”模块,或简称为GeoVis。更新:v0.2.0现在已经发布了许多新功能。

借助它可以直观地显示shapefile:

import geovis
geovis.ViewShapefile("C:/yourshapefile.shp")


Voila,您在Tkinter窗口中将映射弹出为图像也可以将地图保存到图像文件。还可以对地图进行样式,着色和添加多层,并且在最新版本中,您还可以基于属性进行分类并放大到特定区域。在下面的地图中,geovis在大约5分钟内加载了世界上所有的GADM省并对其进行了分类着色。您可以从此处下载GeoVis,还可以在此处阅读有关其使用方法的更多信息。 ,因此具有Python并且不需要任何其他模块的任何人都可以使用GeoVis,因为它可以使用内置的Tkinter Canvas作为渲染器。但是强烈建议您拥有或获取Aggdraw,PIL或PyCairo,它们也可以用作渲染器,并且速度更快,质量更高。

Backdraw是您的shapefile必须使用纬度/经度坐标系进行非投影-它尚不能处理投影或变换。

#3 楼

我遇到了许多我想分享的有关此主题的教程:



所以您想使用Python制作地图-StephanHügel




如何使用免费工具制作美国县专题地图-内森·丘



A Python中的专题图-Daniel Lewis

用<10行Python创建地图可视化-Rob Story




还考虑使用R:如何在R中创建引人入胜的色度图?

#4 楼

在2019年,用python中的shapefile制作专题图的最简单方法是geopandas。

文档中的示例:http://geopandas.org/mapping.html

import geopandas
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world['gdp_per_cap'] = world.gdp_md_est / world.pop_est
world.plot(column='gdp_per_cap')