/ *多分これは役に立ちます:
方位角-pi / 2は、RHRポリゴンの側面の外向きの向きです。
以下はPostGISの例です。最後のステートメントを使用してbldg117862テーブルを作成できます。SRIDはEPSG 2271(PA StatePlane North Feet)で、ジオメトリはマルチポリゴンです。ArcGIS 10で視覚化するには、テーブルbldg117862を作成した後、クエリ/サブクエリをクエリレイヤー接続に貼り付けてpostgisに貼り付けます。* /
-===クエリの開始===
/ *外側のクエリは、外向きの直交の向きを提供し、辺の中点から辺と同じ長さの外向きの直交線を作成します。
支配的な向き(複数可)は、長さの合計であり、方向でグループ化されます(降順)* /
SELECT line_id as side_id、length、degrees(orthoaz)as orientation、st_makeline(st_setsrid(st_line_interpolate_point(geom、.5)、2271)、st_setsrid(st_makepoint(st_x(st_line_interpolate_point(geom、.5))+(length *(sin( orthoaz))))、st_y(st_line_interpolate_point(geom、.5))+(length *(cos(orthoaz))))、2271))をgeomから
--next外部サブクエリは、辺のポイントペアからラインを作成し、各セグメントの外向き直交の方位角(オルソアズ)を計算します
(SELECT bldg2009gid、line_id、st_length(st_makeline(startpoint、endpoint)):: numeric(10,2)as length、azimuth(startpoint、endpoint)、azimuth(startpoint、endpoint)-pi()/ 2 as orthoaz、st_makeline(始点、終点)からのgeom
/ *最も内側のサブクエリ-generate_series()を使用して建物のポリゴンを側面の始点/終点のペアに分解します-注1-すべてのポリゴンの側面の共通の向きを保証するように右手の法則を強制します注2-例として、ポリゴンのジオメトリにマルチポリゴンを使用しますn()取り外し可能* /
(SELECT generate_series(1、npoints(exteriorring(geometryn(st_forceRHR(geom)、1)))-1)as line_id、gid as bldg2009gid、pointn(exteriorring(geometryn(st_forceRHR(geom)、1))、generate_series(1、 npoints(exteriorring(geometryn(st_forceRHR(geom)、1)))-1))を開始点として、pointn(exteriorring(geometryn(st_forceRHR(geom)、1))、generate_series(2、npoints(exteriorring(geometryn(st_forceRHR(geom) )、1)))))bldg117862からのエンドポイントとして)t1として)t2として
-===クエリの終了===
-bldg117862テーブル作成/挿入ステートメント
STANDARD_CONFORMING_STRINGSをONに設定します。SELECT DropGeometryColumn( ''、 'bldg117862'、 'geom'); DROP TABLE "bldg117862"; ベギン; CREATE TABLE "bldg117862"(gid serial PRIMARY KEY、 "motherpin" varchar(14)、 "taxpin" varchar(14)、 "status" varchar(15)、 "area" numeric、 "prev_area" numeric、 "pct_change" numeric、 「picture」varchar(133)、「mappage」varchar(6)、「sref_gid」int4、「e_address」varchar(19)、「a_address」varchar(19)、「perim」数値、「card」int4、「a_addnum」 int4、 "e_street" varchar(50)、 "a_street" varchar(50)、 "e_hsnum" varchar(10)); SELECT AddGeometryColumn( ''、 'bldg117862'、 'geom'、 '2271'、 'MULTIPOLYGON'、2); 0106000020DF080000010000000103000020DF080000010000000B0000008C721D6C98AC34415E2C5BB9D3E32541AE56DE17BEAC34410613E5A0A0E325411AB6C794AEAC3441BA392FE372E32541C89C38429DAC3441643857628AE325418C299A9095AC3441F66C29B573E32541983F02087EAC34413080AA9F93E325419BAC3C0A86AC3441AC1F3B3DABE32541803A40B974AC3441E8CF3DB9C2E325413E3758C186AC3441D0AAB0E7F7E325410AAAA5429BAC3441BA971217DCE325418C721D6C98AC34415E2C5BB9D3E32541' ); CREATE INDEX "bldg117862_geom_gist" ON "bldg117862" using gist( "geom" gist_geometry_ops); 終わり;