GIS还可以这样玩?
昨天看了虾神写的文章(新版白话空间统计(40):仅考虑空间位置与发现任意空间簇的聚类需求),被文中的几张图吸引了(我可不是专门去看段子的
),原图见下方:
看了后我不禁思考这东东怎么搞出来的,程序写点太难了吧,然后我细看发现了纵横左边疑似经纬度,好家伙,这难不成是用Pro画的不成,于是@虾神。
虾神回答说是辛辛苦苦手点的。于是我P了一张图,脑补了当时的虾神
。
但是呢我思考了好久,既然虾神用的Pro,那有没有办法不去手点,自动生成对应字的点的数组呢?苦思良久,想到了利用Arcpy就能实现自动生成想生成字或图形的二维点组。不过前提是要有字或图形的黑白照片,来看看原始图片:
然后看看自动化生成的虾的二维散点图:
那么具体怎么实现的呢,直接上源码~~~
● 程序实现源码 ●
# 导入arcpy库
import arcpy
import numpy as np
import pandas as pd
# 读取图像
raster = arcpy.Raster("C:/Users/admin/Desktop/虾.jpg")
# 转为numpyarray
arr = arcpy.RasterToNumPyArray(raster)
# 将非文字部分的像元值设置为999
arr_filter = np.where(arr > 200, 999, arr)
# 获取原始图像左下角点
lowerLeft = arcpy.Point(raster.extent.XMin, raster.extent.YMin)
# numpyarray转raster,为了将前面的999设置为nodata
raster_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)