1

私はしばらくの間この問題に取り組んできましたが、ESRIフォーラムページや私が書いたFORTRAN三角測量スクリプトに喜びを感じていません。

数百のxyポイントデータを含む2つの.csvファイルがあります。これらのポイントは、潮間帯の上限と下限を表しています。高点と低点は互いに平行に走っています。これらの点のうち4つを足ごとに別々のポリゴンに接続するポリゴンスライバーを作成したいと思います。ポリゴンの高さは、高点と低点の間の距離に応じてxになります。以下のリンクは、私が何を意味するかを説明する2つの画像を示しています。

http://forums.arcgis.com/threads/39757-Feature-to-Line..?p=135880&posted=1#post135880

主な問題は、ポリゴンがコーナーで正しく形成されるようにスクリプトを作成することです。ベンドの周りを移動するときに、下部の直径が1フィート、上部の直径が1フィートのポリゴンを作成することはできないと理解しています。しかし、これは私がこれを解決しようとして遭遇した多くの問題の1つにすぎません...

どんな助けでも大歓迎です、ありがとう

4

1 に答える 1

0

これは内挿で機能するはずです(たとえば、潮汐線が岸のある制御点から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)で動作していないことを確認する必要があります。

于 2011-09-23T11:09:09.290 に答える