在 python 中创建旋转地理坐标网格

问题描述 投票:0回答:1

对于一个项目,我很高兴创建一个等距网格,稍后将其放置在 QGIS 的地图上。 为此,我创建了 4 个参考坐标,定义了左上角以及 x 和 y 间距。 基于这个网格,我的 Python 编程产生了这个扩展网格:

如您所见,它有几个问题:

  1. 在 X 和 Y 方向上看起来都不稳定,点没有完全对齐
  2. 点与点之间的距离不是要求的距离

在我看来,问题 1 是由扩展方法和数字失去意义引起的。问题2是由于坐标集定义错误引起的。

但是,我选择了这种方法,因为我没有找到一种方法来定义基于坐标的旋转网格。

我的脚本最好有以下输入:

  • 起始坐标(即左上角)
  • 水平和垂直间距
  • 行数/列数

应该采用什么来缓解前面提到的问题,或者在理想情况下,基于首选输入的解决方案方向看起来如何?

from string import ascii_lowercase
from geojson import Point, Feature, FeatureCollection, dump

def getExtraPolatedPoint(p1,p2, ratio):
    'Creates a line extrapoled in p1->p2 direction'
    b = (p1[0]+ratio*(p2[0]-p1[0]), p1[1]+ratio*(p2[1]-p1[1]) )
    return b

L = [letter1+letter2 for letter1 in ascii_lowercase for letter2 in ascii_lowercase]

with open(r"4points.geojson") as json_file:
    res = json.load(json_file)
    
features = []
feature_collection = FeatureCollection(features)

tl = None

for a in res["features"]:
    b = a["geometry"]["coordinates"]
    if tl is not None:
        if tl[1]<b[1]:tl=b
        if tr[0]<b[0]:tr=b
        if br[1]>b[1]:br=b
        if bl[0]>b[0]:bl=b
    else:
        tl = tr = br = bl = b

refP1 = tl
refP2x = tr
refP2y = bl
refP2xy = br

for i in range(16):
    newP1  = getExtraPolatedPoint(refP1,refP2x,i)
    newP2xy = getExtraPolatedPoint(refP2y,refP2xy,i)
    
    for j in range(75):
        gridPoint =  getExtraPolatedPoint(newP1,newP2xy,j)
        point = Point(gridPoint)
        features.append(Feature(geometry=point, properties={"ID":L[i]+'{:02}'.format(j+1) }))

更新: 它是一个地理坐标系,即纬度/经度坐标。 旋转来自这样一个事实,即我们需要在地图上拟合对象上的线条,因此进行了上述旋转。

更新二: 所以,pyproj 是帮手。连接点的缺失项(没有双关语意)是方位角。 使用这个包,我能够使用 fwd 函数创建最大坐标。 有了它,npts 函数在间距中创建了必要的点。

有时候事情是显而易见的,如果你知道你在寻找什么......

python rotation coordinates geojson extrapolation
1个回答
0
投票

请参阅帖子中的更新 2,我错过了一个关键术语。

© www.soinside.com 2019 - 2024. All rights reserved.