昕图XinGEO的空间计算
昕图XinGEO的设计目标就是一个GIS数据处理的平台,以服务器强大的多核计算能力为依托,提供GIS数据计算,更深入来说是一个模型计算平台,耦合GIS和专业模型,集成气象、生态、环境等领域专业模型,可进行高性能计算。
在开发CRGIS时,我们采用Numpy和Geopandas进行gis计算,但在使用过程中,发现先,Numpy对栅格数据进行处理,当栅格数据较大时导致内存溢出;且numpy运行过程无法并行,无法发挥服务器多核和集群的优势。
因此我们在XinGEO开发时,采用了dask,XArray、rioxarray替代numpy实现栅格大数据的运行处理。理论上,凭他可以计算非常大的栅格数据,比如中国30m分辨率的地形数据,可以直接进行计算,且是并行的。
多进程运行对比
在Numpy和dask的选择上,我们进行了多次对比,发现使用DASK编程,计算效率远高于Numpy。
Dask是一个并行计算库,用于在单个计算机或集群上扩展Python代码。它可以用来处理大规模数据计算,并能够与许多科学计算和数据分析库(如NumPy、Pandas和Scikit-Learn)无缝集成。Dask的核心组件包括Dask数组、Dask数据框和Dask延迟,这些组件可以帮助用户有效地分配和管理计算任务。
from dask.distributed import Client, WorkerPlugin
client = Client(threads_per_worker=1, n_workers=8)
通过client = Client(threads_per_worker=1, n_workers=8)来启动多核,其中threads_per_worker为线程数,n_workers为进程数。
对于计算密集型的,利用集群来计算是合适的。
import dask.array as da
import numpy as np
from dask.distributed import Client
def main():
# 创建一个随机的 NumPy 数组
np_array = np.random.random((2000, 2000))
# 将 NumPy 数组转换为 Dask 数组
dask_array = da.from_array(np_array, chunks=(500, 500))
# 定义一个用于块处理的函数
def process_block(block):
# 在这个例子中,我们简单地对每个块取平方
return block ** 2
# 使用 map_blocks 对每个块进行处理
result = dask_array.map_blocks(process_block)
client = Client(threads_per_worker=1, n_workers=1) # 根据 CPU 核心数增加 worker 数量
import time
start_time=time.time()
# 计算结果并收集
computed_result = result.compute()
print(f'time:{time.time()-start_time}' )
client.close()
# 打印结果的形状
print(computed_result.shape)
if __name__ == '__main__':
main()
上面的例子不开启集群,运行时间为0.535s左右。
| 多核开启情况 | 低计算量 | 高计算量 |
|---|---|---|
| 不开启 | 0.0189s | 13.449s |
| n_workers=1 | 0.2549 | 4.867s |
| n_workers=4 | 0.1905 | 1.587s |
| n_workers=8 | 0.182 | 1.377s |
如果在分布式集群环境下,只运行多线程compute(scheduler='threads'),运行时间为0.02268。
GIS工具箱
现在我们开发了矢量基础工具、栅格基础工具、空间分析工具、分析工具、数据管理工具等5个工具箱,但没有完全开发完毕,后续仍在继续添加。
工具箱可以直接在工具箱扩展栏直接使用,也可以让AI自动调用。

工具箱的具体说明,需要参考GIS工具箱 | 昕图帮助中心。
有两个工具,栅格计算器和矢量计算器比较特殊,有单独说明的,但现在正在改造这两个工具的前端语法,仍需一小段时间才能面世。
直接使用
在工具箱中查找,或者直接点击即可使用。比如使用概化工具为例,点击矢量基础工具-要素处理-概化,出现以下参数。
- 输入矢量文件:一般提供直接选择项目中的文件或者从云盘读取。
- 简化容差和拓扑容差:根据实际输入
- 输出路径:生成的文件默认会保存在工程所在的路径下,用户可以手动修改。
- 输出文件名:用户自行输入,也可以使用默认值。

AI调用
以同样的概化工具为例,可以使用ai调用,这个更简单。
在AI操作台输入概化规划范围这个数据即可。

概化后的前后对比
