/ * Talvez isso ajude:
Azimute - pi / 2 é a orientação voltada para fora dos lados de um polígono de RHR:
Aqui está um exemplo do PostGIS, você pode criar a tabela bldg117862 usando a instrução no final. O SRID é EPSG 2271 (PA StatePlane North Feet) e a geometria é um multipolígono. Para visualizar no ArcGIS 10, cole consultas / subconsultas em uma conexão Query Layer para postgis após criar a tabela bldg117862. * /
- === INÍCIO DA CONSULTA ===
/ * A consulta externa fornece a orientação dos ortogonais externos e cria linhas ortogonais externas de comprimentos iguais aos dos lados do ponto médio dos lados.
As direções dominantes serão a soma do comprimento, agrupado por orientação, em ordem decrescente * /
SELECT line_id como side_id, comprimento, graus (ortoaz) como orientação, 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)) como geom de
--a próxima subconsulta externa cria linhas a partir dos pares de pontos dos lados, calcula o azimute (ortoaz) da ortogonal externa para cada segmento
(SELECT bldg2009gid, line_id, st_length (st_makeline (ponto inicial, ponto final)) :: numeric (10,2) como comprimento, azimute (ponto inicial, ponto final), azimute (ponto inicial, ponto final) - pi () / 2 como ortoaz, st_makeline ( ponto inicial) e final) como geom de
/ * subconsulta mais interna - use generate_series () para decompor polígonos de construção em pares de pontos de extremidade / ponto final dos lados - note1 - force a regra da mão direita para garantir a orientação comum de todos os lados do polígono note2 - exemplo usa multipolígono, para polígono the geometryn () pode ser removido */
(SELECT generate_series (1, npoints (exteriorring (geometryn (st_forceRHR (geom), 1))) - 1) como line_id, gid como bldg2009gid, pointn (exteriorring (geometryn (st_forceRHR (geom), 1)), generate_series (1, npoints (exteriorring (geometryn (st_forceRHR (geom), 1))) - 1)) como ponto inicial, pointn (exteriorring (geometryn (st_forceRHR (geom), 1)), generate_series (2, npoints (exteriorring (geometryn (st_forceRHR (geom), 1)) ), 1))))) como ponto final de bldg117862) como t1) como t2
- === FIM DA CONSULTA ===
- as instruções de criação / inserção da tabela bldg117862
Defina STANDARD_CONFORMING_STRINGS para ON; SELECT DropGeometryColumn ('', 'bldg117862', 'geom'); TABELA DE QUEDA "bldg117862"; INÍCIO; CREATE TABLE "bldg117862" (gid serial PRIMARY KEY, "motherpin" varchar (14), "taxpin" varchar (14), "taxpin" varchar (14), "status" varchar (15), "area" numeric, "prev_area" numeric, "pct_change" numeric, "imagem" varchar (133), "página de mapa" varchar (6), "sref_gid" int4, "endereço_e" varchar (19), "a_address" varchar (19), "perim" numérico, "cartão" 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" usando gist ("geom" gist_geometry_ops); FIM;