GIS还可以这样玩?

昨天看了虾神写的文章(新版白话空间统计(40):仅考虑空间位置与发现任意空间簇的聚类需求),被文中的几张图吸引了(我可不是专门去看段子的

),原图见下方:

看了后我不禁思考这东东怎么搞出来的,程序写点太难了吧,然后我细看发现了纵横左边疑似经纬度,好家伙,这难不成是用Pro画的不成,于是@虾神。

虾神回答说是辛辛苦苦手点的。于是我P了一张图,脑补了当时的虾神

但是呢我思考了好久,既然虾神用的Pro,那有没有办法不去手点,自动生成对应字的点的数组呢?苦思良久,想到了利用Arcpy就能实现自动生成想生成字或图形的二维点组。不过前提是要有字或图形的黑白照片,来看看原始图片:

然后看看自动化生成的虾的二维散点图:

那么具体怎么实现的呢,直接上源码~~~

 程序实现源码 ●

# 导入arcpy库import arcpyimport numpy as npimport pandas as pd# 读取图像raster = arcpy.Raster("C:/Users/admin/Desktop/虾.jpg")# 转为numpyarrayarr = arcpy.RasterToNumPyArray(raster)# 将非文字部分的像元值设置为999arr_filter = np.where(arr > 200, 999, arr)# 获取原始图像左下角点lowerLeft = arcpy.Point(raster.extent.XMin, raster.extent.YMin)# numpyarray转raster,为了将前面的999设置为nodataraster_xia = arcpy.NumPyArrayToRaster(arr_filter, lowerLeft, raster.meanCellWidth, raster.meanCellHeight, 999)# 很关键的一步,将像元转换为点数据,保存在内存中point_xia = arcpy.conversion.RasterToPoint(raster_xia, "memory/xiapoint")# 提取点数据坐标值,用于散点图绘制xia_arr = arcpy.da.FeatureClassToNumPyArray("memory/xiapoint", ["SHAPE@X", "SHAPE@Y"])df = pd.DataFrame(xia_arr)# 最后绘制散点图df.plot("SHAPE@X", "SHAPE@Y", "scatter")

最终形成上面的散点图,Arcpy非常强大!!!

GIS好玩吧~~~

(0)

相关推荐