verde生成网格坐标

发布时间:2024年01月23日

Verde是Python用于地理空间数据处理的一个库,由于采用了一些机器学习的方法,所以除了科学计算三件套之外,还需要基于sklearn模块。考虑到依赖关系,这里比较推荐用conda安装。

conda install verde --channel conda-forge

网格坐标

通过函数grid_coordinates可以创建一个网格坐标,其功能与numpy中的meshgrid相似,示例如下

import matplotlib.pyplot as plt
import verde as vd

# 分别是西、东、南、北
W, E, S, N = 0, 1000, 0, 1000
ew, ns = vd.grid_coordinates((W, E, S, N), spacing=100)
padded = vd.pad_region((W, E, S, N), pad=50)

print(ew.shape, ns.shape)
# (11, 11) (11, 11)
print(padded)
# (-50, 1050, -50, 1050)

其中,grid_coordinates用于生成网格,(W, E, S, N)表示网格范围,是一个矩形,spacing为网格间距,当输入为一个整型时,表示网格形状为正方形。其输出ew和ns分别代表东西、南北方向的网点坐标。

pad_region会在(W, E, S, N)外侧伸展pad尺寸。

下面绘制这个网格,此图来自于官网,但和官网相比,对代码进行了一点精简。

def drawGrid(W,S,E,N,ew,ns,padded,ax,**kwargs):
    ax.vlines(ew[0], ymin=S, ymax=N, linestyles="dotted")
    ax.hlines(ns[:, 1], xmin=E, xmax=W, linestyles="dotted")
    ax.scatter(ew, ns, **kwargs)
    plt.xlim(padded[:2])
    plt.ylim(padded[2:])

fig = plt.figure()
ax = fig.add_subplot()
ax.add_patch(
  plt.Rectangle((W, S), E, N, fill=None, label="Region Bounds"))

drawGrid(W,S,E,N,ew,ns,padded,ax,
    label="Square Region Grid Nodes",
    marker=".", color="black", s=100)

plt.xlabel("east-west")
plt.ylabel("sourth-north")
plt.legend(loc="upper center", bbox_to_anchor=(0.5, 1.15))
plt.show()

在这里插入图片描述

区域调整

grid_coordinates函数中有个参数adjust,用于参数调整,提供region和spacing两种选项,下面为其示例。

region_ew, region_ns = vd.grid_coordinates(
    (W, E, S, N), spacing=300, adjust="region")

spacing_ew, spacing_ns = vd.grid_coordinates(
    (W, E, S, N), spacing=300, adjust="spacing")

plt.figure(figsize=(6, 6))
ax = plt.subplot(111)
ax.add_patch(
  plt.Rectangle((W, S), E, N, fill=None, label="Region Bounds"))

drawGrid(W,S,E,N,region_ew,region_ns,padded,ax,
    label="Adjusted Region Grid Nodes",
    marker=">", color="blue", alpha=0.75, s=100)

drawGrid(W,S,E,N,spacing_ew,spacing_ns,padded,ax,
    label="Adjusted Spacing Grid Nodes",
    marker=">", color="orange", alpha=0.75, s=100)

plt.xlabel("Easting")
plt.ylabel("Northing")
plt.legend(loc="upper center", bbox_to_anchor=(0.5, 1.18))
plt.show()

效果如下

在这里插入图片描述

其中,spacnig_ew为

[ 0. 333.33333333 666.66666667 1000 0. 333.33333333 666.66666667 1000 0. 333.33333333 666.66666667 1000 0. 333.33333333 666.66666667 1000 ] \begin{bmatrix} 0. & 333.33333333& 666.66666667&1000\\ 0. & 333.33333333& 666.66666667&1000\\ 0. & 333.33333333& 666.66666667&1000\\ 0. & 333.33333333& 666.66666667&1000 \end{bmatrix} ?0.0.0.0.?333.33333333333.33333333333.33333333333.33333333?666.66666667666.66666667666.66666667666.66666667?1000100010001000? ?

文章来源:https://blog.csdn.net/m0_37816922/article/details/135665550
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。