@Pabloの適切な回答を洗練し、定義(下記)を使用して、各メソッドのチェックリストを追加し、使用を制限します。定義:
ブロックレイヤーは、街区の境界を表すポリゴンを備えたSQLテーブルです。これは、歩道があるかどうかに関係なく、プライベート路線(front-1を参照)または非アドレッシング路地(front-2を参照)をブロックに保持します。
ロットレイヤーは、土地区画の境界を表すポリゴンを持つSQLテーブルです。
ストリート層を表す線を持つSQLテーブルで街を ...または、「川の土地」にも川(と鉄道は「前」になることができますか?)。
Front-1:@Pabloのメソッドは、一般的なfrontの概念に関するものです。一部の区画には、コーナーにあるため(「すべての周辺の通りに2つ以上の前セグメントがある」ため)、「1つの通りについて1つ以上の前」があります。
フロント-2:「フロント」とは、区画の正式な住所(または対応住所)に示されている通りのことです。それら、すべての区画(コーナーでも)には、フロントストリートセグメントが1つだけあります。PS:アドレスシステムとブロックレイヤーが多くの「水平コンドミニアム」とそのコンドミニアムアドレスを受け入れる場合、「私道」は通常の通りとして表示される必要があります。
@ChristianAbreuの質問のイラストは、一般的なものではなく、Front-2のコンセプト(!)を示しています。
テクニカルノート:PythonをPostGISまたは他のOGC準拠ツール(空間SQL用)に接続して、チェックリストを正式に表現できます。
メソッド#1のチェックリスト-他のポリゴンと接触しないポリゴンの側面
この方法にはトポロジー的なアプローチがあり、すべてのロットのエリアがブロックのエリアを形成するブロックに対してのみ有効です。したがって、このメソッドを使用するには、ブロックレイヤーが必要です。
完全に表現する:blkarea~=sum_lotarea
各ブロックについて確認し、
SELECT ST_Area(geom) INTO blkarea FROM block WHERE gid=each1;
SELECT SUM(ST_Area(geom)) INTO sum_lotarea FROM lot WHERE gid_block=each1;
または、形状が正確でない場合、またはブロックが歩道にある場合は、すべての区画に対して最低のwを使用します。ST_Buffer(block.geom,-w)
ST_Within(lot.geom lot,ST_Buffer(block.geom,-w))
注:こちらもチェック
ST_Within(lot.geom,block.geom)
すべてのロットと関連ブロックについて、すべてのロットがブロック内にある場合。
ばらばらでないすべてのロットについて、重複領域がない場合。not(ST_Overlaps(a,b))
または、この交差領域は重要ではありません(つまり2*ST_Area(ST_Intersection(a,b))/(ST_Area(a)+ST_Area(b))<0.01
)。
method#2のチェックリスト-道路に最も近いポリゴンの側面
この方法には、最小ユークリッド距離に基づく幾何学的アプローチがあります。
ストリートレイヤーに「公道」のみがあるかどうかを確認します。「公道」(土地区画の正式な住所を表すことができる)を「路地」(区画の内部または「コンドブロック」にすることができる)から分離する必要があるためです。 ")。
次に、すべての「ビジュアルブロック」が道路に囲まれているかどうかを視覚的に確認します。ストリートレイヤーが不完全な場合、メソッドはそのブロックに対して無効です。
結論:メソッドを選択するためのルール
用フロント-1の定義:
A)適切な通りのデータがある場合は、method#2を使用します。
B)ブロックレイヤーと一貫したロットレイヤーがある場合は、メソッド#1を使用します。
C)適切なデータがない場合は、空間データをいくつかの方法に分割できるようにします。PS:ブロック レイヤーがなくても、隣接するロットを結合して構築したり、この質問の適切な回答によって構築したりできます。
以下のためにフロント-2の定義:なぜなら、あなたは、良い通りのデータを必要とするフロント2定義(ロットアドレスの)必要性の通りの名前。メソッド#2を使用して、ロットの住所と同じ通りの名前を持たないフロントセグメントをドロップします。