/ * Forse questo aiuta:
Azimut - pi / 2 è l'orientamento rivolto verso l'esterno dei lati di un poligono RHR:
Ecco un esempio PostGIS, è possibile creare la tabella bldg117862 usando l'istruzione alla fine. SRID è EPSG 2271 (PA StatePlane North Feet) e la geometria è un multipoligono. Per visualizzare in ArcGIS 10, incollare query / sottoquery in una connessione di livello query a postgis dopo aver creato la tabella bldg117862. * /
- === INIZIO DI QUERY ===
/ * La query esterna fornisce l'orientamento degli ortogonali esterni e crea linee ortogonali esterne di uguale lunghezza come quelle dei lati dal punto medio dei lati.
Le direzioni di orientamento dominanti saranno la somma della lunghezza, raggruppata per orientamento, in ordine decrescente * /
SELEZIONA line_id come side_id, lunghezza, gradi (orthoaz) come orientamento, st_makeline (st_setsrid (st_line_interpolate_point (geom, .5), 2271), st_setsrid (st_makepoint (st_x (st_line_interpolate_point (geom, .5)) + (lunghezza * (sin orthoaz))), st_y (st_line_interpolate_point (geom, .5)) + (lunghezza * (cos (orthoaz)))), 2271)) come geom da
- la subquery esterna successiva crea linee dalle coppie di punti dei lati, calcola l'azimut (ortogonale) dell'ortogonale esterna per ciascun segmento
(SELECT bldg2009gid, line_id, st_length (st_makeline (punto iniziale, punto finale)) :: numerico (10,2) come lunghezza, azimut (punto iniziale, punto finale), azimut (punto iniziale, punto finale) - pi () / 2 come orthoaz, st_makeline ( startpoint, endpoint) come geom da
/ * sottoquery più interna - usa generate_series () per scomporre i poligoni dell'edificio in coppie di punti di inizio / punto finale dei lati - nota1 - forza la regola della mano destra per garantire l'orientamento comune di tutti i lati del poligono nota2 - esempio usa multipoligono, per poligono la geometrian () può essere rimosso * /
(SELECT generate_series (1, npoints (exteriorring (geometryn (st_forceRHR (geom), 1))) - 1) come line_id, gid come bldg2009gid, pointn (exteriorring (geometryn (st_forceRHR (geom), 1)), generate_series (1, npoints (exteriorring (geometryn (st_forceRHR (geom), 1))) - 1)) come punto di partenza, pointn (exteriorring (geometryn (st_forceRHR (geom), 1)), generate_series (2, npoints (exteriorring (geometryn (st_forceRHR (geom) ), 1))))) come endpoint da bldg117862) come t1) come t2
- === FINE DOMANDA ===
- le istruzioni create / insert della tabella bldg117862
IMPOSTA STANDARD_CONFORMING_STRINGS SU ON; SELEZIONA DropGeometryColumn ('', 'bldg117862', 'geom'); DROP TABLE "bldg117862"; INIZIO; CREATE TABLE "bldg117862" (gid serial PRIMARY KEY, "motherpin" varchar (14), "taxpin" varchar (14), "status" varchar (15), "area" numerico, "prev_area" numerico, "pct_change" numerico, "picture" varchar (133), "mappage" varchar (6), "sref_gid" int4, "e_address" varchar (19), "a_address" varchar (19), "perim" numerico, "card" int4, "a_addnum" int4, "e_street" varchar (50), "a_street" varchar (50), "e_hsnum" varchar (10)); SELECT AggiungiGeometryColumn ('', 'bldg117862', 'geom', '2271', 'MULTIPOLYGON', 2); 0106000020DF080000010000000103000020DF080000010000000B0000008C721D6C98AC34415E2C5BB9D3E32541AE56DE17BEAC34410613E5A0A0E325411AB6C794AEAC3441BA392FE372E32541C89C38429DAC3441643857628AE325418C299A9095AC3441F66C29B573E32541983F02087EAC34413080AA9F93E325419BAC3C0A86AC3441AC1F3B3DABE32541803A40B974AC3441E8CF3DB9C2E325413E3758C186AC3441D0AAB0E7F7E325410AAAA5429BAC3441BA971217DCE325418C721D6C98AC34415E2C5BB9D3E32541' ); CREA INDICE "bldg117862_geom_gist" ON "bldg117862" usando gist ("geom" gist_geometry_ops); FINE;