对于一个项目,我很高兴创建一个等距网格,稍后将其放置在 QGIS 的地图上。 为此,我创建了 4 个参考坐标,定义了左上角以及 x 和 y 间距。 基于这个网格,我的 Python 编程产生了这个扩展网格:
如您所见,它有几个问题:
在我看来,问题 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 函数在间距中创建了必要的点。
有时候事情是显而易见的,如果你知道你在寻找什么......
请参阅帖子中的更新 2,我错过了一个关键术语。