之前安装了Anaconda,有了python 的环境,看到大神分享了利用arcpy渲染DEM的效果图,一时兴起,马上搞起来。
一开始首先安装了matplotlib和numpy,都是conda install直接安装的,网络好的情况下很快就安装好了,然后将ArcGIS的目录C:Python27ArcGIS10.1Libsite-packagesDesktop10.1.pth直接拷贝到Anaconda3的目录里(C:UsersxxxAnaconda3Libsite-packages),利用import arcpy发现会报错,提示找不到_base模块,这可咋办呢,经过一番查找,发现是可能是python的版本不对,我下的Anaconda当中默认的版本是python3, 而ArcGIS包需要的python版本是python 2.7。 幸好强大的Anaconda提供了多环境切换的功能,马上用Navigator安装了一个python 2.7的环境,安装好之后安装numpy, 再次尝试用import arcpy,发现还是不行,提示某个DLL不是有效的win 32程序, 这次我注意到用Navigator配置环境的时候并没有提供32bit还是64bit的选择的地方,所以利用命令行重新新建了一个环境,新建环境之前set CONDA_FORCE_BIT32=1,这样在配置环境和安装软件的包的时候就会默认32bit了,安装完成之后记得改回来。这次配置完环境之后,安装numpy、matplotlib和spyder,读入数据,测试代码,发现用6001×6001数据的时候会报内存错误的提示,而用1200×1200的时候就不会报这个错误提示。看网上的评论应该是32位的操作系统内存不足导致的,不过还是实现了调用的效果.
通过这次见识到了python调用其他软件包的强大功能,给自己打开了一扇大门。
附一些测试代码和最后的效果:
import matplotlib.pyplot as plt
import arcpy
ras = ".\test.tif"
hy = arcpy.RasterToNumPyArray(arcpy.Raster(ras))
ax = plt.figure(figsize=(9,9))
plt.imshow(hy, cmap = plt.cm.gist_earth)
arcpy.CheckOutExtension("Spatial")
# 太阳高度角
azimuth = 315.0
# 太阳方位角
altitude = 25.0
hs = arcpy.sa.Hillshade(ras,azimuth, altitude)
ax = plt.figure(figsize=(9,9))
plt.imshow(arcpy.RasterToNumPyArray(hs),cmap = plt.cm.gray)
ax = plt.figure(figsize=(12,12))
plt.imshow(arcpy.RasterToNumPyArray(hs),cmap = plt.cm.gray)
plt.imshow(hy,cmap = plt.cm.gist_earth, alpha=0.7)