Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python、GIS和Fortran:尝试从xy点数据创建多个多边形_Python_Fortran_Gis_Points_Triangulation - Fatal编程技术网

Python、GIS和Fortran:尝试从xy点数据创建多个多边形

Python、GIS和Fortran:尝试从xy点数据创建多个多边形,python,fortran,gis,points,triangulation,Python,Fortran,Gis,Points,Triangulation,我研究这个问题已经有一段时间了,但在ESRI论坛页面或我编写的FORTRAN三角测量脚本上没有发现任何乐趣 我有两个.csv文件,其中包含数百个xy点数据。这些点代表潮间带范围的高端和低端。高点和低点彼此平行,我想创建多边形碎片,每英尺将其中四个点连接成单独的多边形。多边形的高度为x,具体取决于高点和低点之间的距离。下面的链接显示了两幅图片,说明了我的意思: 主要问题是编写多边形脚本,使其在角点正确形成。我知道,当绕弯道移动时,底部的多边形直径不能为1ft,顶部的多边形直径不能为1ft。但这只是

我研究这个问题已经有一段时间了,但在ESRI论坛页面或我编写的FORTRAN三角测量脚本上没有发现任何乐趣

我有两个.csv文件,其中包含数百个xy点数据。这些点代表潮间带范围的高端和低端。高点和低点彼此平行,我想创建多边形碎片,每英尺将其中四个点连接成单独的多边形。多边形的高度为x,具体取决于高点和低点之间的距离。下面的链接显示了两幅图片,说明了我的意思:

主要问题是编写多边形脚本,使其在角点正确形成。我知道,当绕弯道移动时,底部的多边形直径不能为1ft,顶部的多边形直径不能为1ft。但这只是我在尝试解决这个问题时遇到的众多问题之一

任何帮助都将不胜感激,
谢谢

这应该适用于插值,比如潮位线距离海岸上某个控制点的x,y距离:

import math

example_triangle = [[0,0], [5,5], [0,5], [0,0]]
high_tide_line = [[0, 0], [5., 1.5], [10., 3.2], [20., 1.], [30., 4.5], [80.,2.], [80,0]]
low_tide_line = [[0, 10.], [5., 11.5], [10., 13.2], [20., 11.], [30., 14.5], [80., 12.], [80, 10]]

def points_from_geom(geom):
    idx = 0
    line_lengths = []
    unit_vectors = []
    interpolated_points = []
    while idx < (len(geom) - 1):
        dy, dx = ((geom[idx+1][1] - geom[idx][1]), (geom[idx+1][0] - geom[idx][0]))
        line_lengths.append(math.sqrt(dy**2 + dx**2))
        try:
            angle = math.atan(dy/dx)
            unit_vectors.append([math.cos(angle)*cmp(dx, 0),
                math.sin(angle)*cmp(dy, 0)])
        except ZeroDivisionError:
            if geom[idx+1][1] < geom[idx][1]:
                direction = [0, -1]
            else:
                direction = [0, 1]
            unit_vectors.append(direction)
        idx += 1

    for i, length in enumerate(line_lengths):
        inter = 0
        while inter <= length:
            interpolated_points.append([geom[i][0] + unit_vectors[i][0]*inter,\
                geom[i][1] + unit_vectors[i][1]*inter])
            inter += .3048 # a ft in proper units ;)

    return interpolated_points

ln1 = points_from_geom(example_triangle)
ln2 = points_from_geom(high_tide_line)
ln3 = points_from_geom(low_tide_line)

print ln1, ln2, ln3
有很多不同的方法来做多边形。我可以尝试确定一个参考海岸线,然后以固定的间隔,或者在每个线段的中间取垂直线,然后在相邻的海岸线上画一个多边形或边界框。顺便说一句,在实际应用程序中,您需要确保cmp未在0,0上运行