/ * Peut-être que cela aide:
Azimut - pi / 2 est l'orientation tournée vers l'extérieur des côtés d'un polygone RHR:
Voici un exemple PostGIS, vous pouvez créer la table bldg117862 à l'aide de l'instruction à la fin. Le SRID est EPSG 2271 (PA StatePlane North Feet) et la géométrie est un multipolygone. Pour visualiser dans ArcGIS 10, collez la requête / les sous-requêtes dans une connexion Query Layer à postgis après avoir créé la table bldg117862. * /
- === DÉBUT DE LA REQUÊTE ===
/ * La requête externe fournit l'orientation des orthogonales vers l'extérieur et crée des lignes orthogonales vers l'extérieur de longueurs égales à celles des côtés à partir du milieu des côtés.
La (les) direction (s) dominante (s) seront la somme de la longueur, groupée par orientation, en ordre décroissant * /
SELECT line_id as side_id, longueur, degrés (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)) + (longueur * (sin (sin ( orthoaz))), st_y (st_line_interpolate_point (geom, .5)) + (length * (cos (orthoaz))))), 2271)) as geom from
- la prochaine sous-requête externe crée des lignes à partir des paires de points des côtés, calcule l'azimut (orthoaz) de l'orthogonal extérieur pour chaque segment
(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 ( point de départ, point final) en tant que geom de
/ * sous-requête la plus interne - utilisez generate_series () pour décomposer les polygones de construction en paires de points de début / point de fin des côtés - note1 - force la règle de droite pour assurer l'orientation commune de tous les côtés du polygone note2 - l'exemple utilise le multipolygone, pour polygoner la géométrie () Peut être enlevé */
(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)) comme point de départ, pointn (exteriorring (geometryn (st_forceRHR (geom), 1)), generate_series (2, npoints (exteriorring (geometryn (st_forceRHR (geom) ), 1))))) comme point de terminaison de bldg117862) comme t1) comme t2
- === FIN DE LA REQUÊTE ===
- les instructions de création / insertion de la table bldg117862
METTEZ STANDARD_CONFORMING_STRINGS SUR ON; SELECT DropGeometryColumn ('', 'bldg117862', 'geom'); TABLE DROP "bldg117862"; COMMENCER; 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" numeric, "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' ); CRÉER L'INDEX "bldg117862_geom_gist" ON "bldg117862" en utilisant gist ("geom" gist_geometry_ops); FIN;