/ * Можливо, це допомагає:
Азимут - pi / 2 - орієнтація, спрямована зовні сторонами полігону RHR:
Ось приклад PostGIS, ви можете створити таблицю bldg117862, використовуючи оператор у кінці. SRID - EPSG 2271 (штат штату Пенсіль Північ), а геометрія - багатополігон. Щоб візуалізувати в ArcGIS 10, вставте запит / підзапити у з'єднання рівня запитів до postgis після створення таблиці bldg117862. * /
- === НАЧАЛО ПИТАННЯ ===
/ * Зовнішній запит забезпечує орієнтацію зовнішніх ортогоналів і створює зовнішні ортогональні лінії однакової довжини, як і сторони від середини сторін.
Домінуючим напрямком (напрямками) облицювання буде сума довжини, згрупована за орієнтацією, у порядку зменшення * /
SELECT line_id як side_id, довжина, градуси (ортоаз) як орієнтація, 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 від
- наступний зовнішній підзапит робить лінії від точкових пар сторін, обчислює азимут (ортоаз) зовнішньої ортогоналі для кожного сегмента
(SELECT bldg2009gid, line_id, st_length (st_makeline (початкова точка, кінцева точка)) :: числовий (10,2) як довжина, азимут (початкова точка, кінцева точка), азимут (початкова точка, кінцева точка) - pi () / 2 як ортоаз, st_makeline ( початкова точка, кінцева точка) як geom від
/ * внутрішній підзапит - використовуйте create_series () для розкладання будівельних багатокутників на пари початкових / кінцевих точок сторін - note1 - правило праворуч для забезпечення загальної орієнтації всіх сторін багатокутника note2 - приклад використовує мультиполігон, для багатокутника геометрія () можна видалити * /
(SELECT generator_series (1, npoints (зовнішність (geometryn (st_forceRHR (geom), 1)))) - 1) як line_id, gid як bldg2009gid, pointn (exteriorring (geometryn (st_forceRHR (geom), 1)), 1)), generator_series (1, npoints (зовнішність (geometryn (st_forceRHR (geom), 1))) - 1)) як початкова точка, pointn (зовнішня частина (geometryn (st_forceRHR (geom), 1)), generator_series (2, npoints (external) (geometryn (st_forceRHR (geom) ), 1))))) як кінцева точка від bldg117862) як t1) як t2
- === КІНЦЯ ПИТАННЯ ===
- таблиця bldg117862 створює / вставляє заяви
ВКЛЮЧИТИ STANDARD_CONFORMING_STRINGS ON SELECT DropGeometryColumn ('', 'bldg117862', 'geom'); КОРОТКА ТАБЛИЦЯ "bldg117862"; ПОЧАТОК; СТВОРИТИ ТАБЛИЦЮ "bldg117862" (gid serial PRIMARY KEY, "motherpin" varchar (14), "taxpin" varchar (14), "status" varchar (15), "область" числовий, "prev_area" числовий, "pct_change" числовий, "картинка" varchar (133), "mappage" varchar (6), "sref_gid" int4, "e_adress" varchar (19), "a_adress" 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 '); CREATE INDEX "bldg117862_geom_gist" ON "bldg117862" за допомогою gist ("geom" gist_geometry_ops); КІНЧ;