/ * Может быть, это поможет:
Азимут - pi / 2 - это ориентация наружу сторон многоугольника RHR:
Вот пример PostGIS, вы можете создать таблицу bldg117862, используя оператор в конце. SRID - EPSG 2271 (PA StatePlane North Feet), а геометрия - мультиполигон. Для визуализации в ArcGIS 10 вставьте запрос / подзапросы в соединение уровня запросов с postgis после создания таблицы bldg117862. * /
- === НАЧАЛО ЗАПРОСА ===
/ * Внешний запрос обеспечивает ориентацию внешних ортогональных элементов и создает внешние ортогональные линии, равные по длине линиям сторон от средней точки сторон.
Доминирующим направлением (ями) будет сумма длин, сгруппированных по ориентации в порядке убывания *
ВЫБЕРИТЕ line_id в качестве side_id, длину, градусы (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)) как геом из
--next внешний подзапрос создает линии из пар точек сторон, вычисляет азимут (orthoaz) наружу, ортогональный для каждого сегмента
(ВЫБЕРИТЕ bldg2009gid, line_id, st_length (st_makeline (начальная точка, конечная точка)) :: numeric (10,2) как длина, азимут (начальная точка, конечная точка), азимут (начальная точка, конечная точка) - pi () / 2 как orthoaz, st_makeline ( начальная точка, конечная точка) как геом из
/ * самый внутренний подзапрос - используйте generate_series (), чтобы разложить строительные полигоны на пары начальная / конечная точки сторон - note1 - применить правило правой руки для обеспечения общей ориентации всех сторон многоугольника note2 - в примере используется многоугольник, для многоугольника geometryn () могут быть удалены * /
(ВЫБЕРИТЬ generate_series (1, npoints (externalring (geometryn (st_forceRHR (geom), 1))) - 1) как line_id, gid как bldg2009gid, pointn (externalring (geometryn (st_forceRHR (geom), 1))), generate_series (1, npoints (externalring (geometryn (st_forceRHR (geom), 1))) - 1)) в качестве начальной точки, pointn (externalring (geometryn (st_forceRHR (geom), 1)), generate_series (2, npoints (externalring (geometryn (st_forceRHR (geom) ), 1))))) как конечная точка от bldg117862) как t1) как t2
- === КОНЕЦ ЗАПРОСА ===
- операторы создания / вставки таблицы bldg117862
SET STANDARD_CONFORMING_STRINGS TO 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" числовой, "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' ); CREATE INDEX "bldg117862_geom_gist" ON "bldg117862" с использованием gist ("geom" gist_geometry_ops); КОНЕЦ;