/ * 아마도 도움이 될 것이다 :
방위각-pi / 2는 RHR 다각형 측면의 바깥 쪽 방향입니다.
다음은 PostGIS 예제입니다. 마지막 명령문을 사용하여 bldg117862 테이블을 만들 수 있습니다. SRID는 EPSG 2271 (PA StatePlane North Feet)이며 형상은 다중 다각형입니다. ArcGIS 10에서 시각화하려면 bldg117862 테이블을 생성 한 후 쿼리 / 서브 쿼리를 쿼리 레이어 연결에 붙여 붙여 postgis에 연결하십시오. * /
-=== 질문의 시작 ===
/ * Outer query는 바깥 쪽 직교의 방향을 제공하고 변의 중간 점에서 변의 길이와 같은 길이의 바깥 쪽 직교 선을 만듭니다.
지배적 인 방향은 길이를 기준으로 내림차순으로 길이의 합이됩니다. * /
line_id를 side_id, length, degree (orthoaz)를 방향으로 선택, st_makeline (st_setsrid (st_line_interpolate_point (geom, .5), 2271), st_setsrid (st_makepoint (st_x (st_line_interpolate_point (geom, .5)) + (길이 * (sin ( orthoaz))), st_y (st_line_interpolate_point (geom, .5)) + (길이 * (cos (orthoaz)))), 2271))에서 geom으로
다음 외부 부질의는 측면 점 쌍으로부터 선을 만들고, 각 세그먼트에 대해 바깥 쪽 직교의 방위각 (orthoaz)을 계산합니다.
(SELECT bldg2009gid, line_id, st_length (st_makeline (startpoint, endpoint)) :: numeric (10,2) as length, azimuth (startpoint, endpoint), azimuth (startpoint, endpoint)-pi () / 2는 orthoaz, st_makeline ( 시작점, 종료점)
/ * 가장 안쪽의 하위 쿼리-generate_series ()를 사용하여 건물 다각형을 측면의 시작점 / 끝점 쌍으로 분해-주 1-오른쪽 규칙을 강제로 모든 다각형 측면의 공통 방향을 확인합니다. 주 2-예는 다각형에 대해 다각형을 사용 제거 가능 * /
(SELECT generate_series (1, npoints (exteriorring (geometryn (st_forceRHR (geom), 1)))-1) line_id, 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 (geomn) ), 1))))) 끝점으로 bldg117862)에서 t1) t2
-=== QUERY의 끝 ===
-bldg117862 테이블 작성 / 삽입 명령문
STANDARD_CONFORMING_STRINGS을 (를) ON으로 설정하십시오. DropGeometryColumn ( '', 'bldg117862', 'geom') 선택; DROP TABLE "bldg117862"; 시작; CREATE TABLE "bldg117862"(gid serial PRIMARY KEY, "motherpin"varchar (14), "taxpin"varchar (14), "status"varchar (15), "area"숫자, "prev_area"숫자, "pct_change"숫자, "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 '); gist ( "geom"gist_geometry_ops)를 사용하여 색인 "bldg117862_geom_gist"ON "bldg117862"작성; 종료;