之前安裝了Anaconda,有了python 的環境,看到大神分享了利用arcpy渲染DEM的效果圖,一時興起,馬上搞起來。
一開始首先安裝了matplotlib和numpy,都是conda install直接安裝的,網絡好的情況下很快就安裝好了,然后將ArcGIS的目錄C:\Python27\ArcGIS10.1\Lib\site-packages\Desktop10.1.pth直接拷貝到Anaconda3的目錄里(C:\Users\xxx\Anaconda3\Lib\site-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)