| 3 | | == 1. Вовед == |
| 4 | | |
| 5 | | PostGIS е екстензија за PostgreSQL која ѝ овозможува на базата на податоци да складира, индексира и обработува геопросторни (geospatial) податоци. Со неа, базата може да работи со точки, линии, полигони и други геометриски објекти како native типови на податоци, и да извршува просторни прашалници (пресметка на растојание, проверка дали една геометрија се содржи во друга, наоѓање најблиски објекти итн.) директно во SQL. |
| 6 | | |
| 7 | | За овој проект, PostGIS претставува природен избор бидејќи доменот на авиокомпанија е инхерентно геопросторен — секој аеродром е точка на површината на Земјата, секој лет е траектoрија помеѓу две точки, а голем дел од оперативните и аналитичките прашалници на авиокомпанијата (растојанија, рути, најблиски аеродроми, локација на авион во моментот) се суштински просторни. |
| 8 | | |
| 9 | | За имплементација на напредна тема за нашиот проект избравме PostGIS кој овозможува надградување на базата на податоци да управува со географски информации. Во реалните системи на светските авиокомпании овозможено е следење на летови, нивните рути како и самите авиони употребувајќи GPS технологии и калкулации на рути. Со цел пореалистично моделирање на проектот сметаме дека оваа тема би дала малку поголема прецизност на дел од податоците |
| 10 | | ---- |
| 11 | | |
| 12 | | == 2. Зошто го избравме овој топик? == |
| 13 | | |
| 14 | | Постојаат повеќе причини зошто го избравме PostGIS како напредна тема за нашиот проект: |
| 15 | | |
| 16 | | '''Природна интеграција со постоечкиот модел.''' Нашиот проект веќе содржи табели каде што геопросторната природа е очигледна (Airport, Flight, !ScheduledFlight). До оваа фаза, тие беа моделирани со текстуални имиња и кодови, но без вистинска географска информација. Воведувањето на PostGIS не претставува „вештачко" додавање на функционалност — туку логично продолжение и обогатување на она што веќе постои. |
| 17 | | |
| 18 | | '''Замена на синтетички податоци со реални вредности.''' Во Фаза 2Б, колоната {{{ScheduledFlight.Distance}}} беше пополнета со псевдо-случајни вредности генерирани преку формулата {{{duration * 13 + noise}}}. Со PostGIS можеме да ја пресметаме вистинската географска дистанца помеѓу аеродромите (great-circle distance). Тоа автоматски прави повеќе постоечки делови од системот да станат „вистински" — на пример, тригерот {{{AwardMilePoints}}} од Фаза 4 веќе ги доделува миљните поени на патниците врз основа на реална географска дистанца. |
| 19 | | |
| 20 | | '''Демонстрација на просторно индексирање.''' PostGIS ги воведе GIST (Generalized Search Tree) индексите, кои овозможуваат брза просторна претрага врз милиони редици. Ова е природно продолжение на Фаза 3 (оптимизација) — освен B-tree индексите кои ги видовме таму, сега работиме и со просторни индекси. |
| 21 | | |
| 22 | | '''Визуелизација и интеграција со надворешни алатки.''' PostGIS овозможува директна интеграција со QGIS — индустриски стандарден GIS алат. Тоа ни овозможи визуелно да го прикажеме целиот мрежен систем на авиокомпанијата (мапа на сите аеродроми, рутна мрежа, локации на летови) што е невозможно со чист релациски модел. |
| 23 | | |
| 24 | | '''Реалистичен случај на употреба.''' Сите вистински авиокомпании во светот користат геопросторни бази на податоци за оперативни цели — следење на летови, барање на алтернативни аеродроми, координација со контрола на летање. Имплементацијата на PostGIS го прави нашиот проект многу поблиску до реален систем. |
| 25 | | |
| 26 | | ---- |
| | 3 | За имплементација на напредна тема за нашиот проект избравме PostGIS кој овозможува надградување на базата на податоци да управува со географски информации. Во реалните системи на светските авиокомпании овозможено е следење на летови, нивните рути како и самите авиони употребувајќи GPS технологии и калкулации на рути. Со цел пореалистично моделирање на проектот сметаме дека оваа тема би дала малку поголема прецизност на дел од податоците. |
| | 4 | |
| | 5 | Пред имплементаицја на оваа тема, во табелата !ScheduledFlight која претставува закажан лет (урнек), колоната Distance беше генерирана на рандомизиран начин односно според времето на полетување и слетување, што не претставува реален податок. Проблем се јавува при употреба на оваа вредност во калкулациите на цена на авионски билети како и додавање на поени за летање на патниците. Со воведување на PostGIS, податоците се реални и употребливи во бизнис логиката на апликацијата. Исто така овозможено е имплементирање на дополнителни функционалности присутни во реални системи. |
| | 6 | |
| | 7 | == Инсталација на PostGIS |
| | 8 | |
| | 9 | За воведување на PostGIS во нашата база на податоци потребно беше локална инсталација на алатката и нејзино вклучување во базата преку извршување на командата |
| | 10 | |
| | 11 | {{{ |
| | 12 | #!sql |
| | 13 | create extension postgis; |
| | 14 | }}} |
| | 15 | |
| | 16 | |
| | 17 | == Пормена на таблеата Airport |
| | 18 | |
| | 19 | За успешно имплементирање на PostGIS потребно беше да се направи промена во табелата Airport. За да можеме да пресметаме растојание помеѓу аеродромите (километража на лет) потрбено беше додавање на колони Longitude (географска должина) и Latitude (географска ширина). Со додавање на овие две колони овозможено е одредување на реалните координати на аеродромот. |
| | 20 | |
| | 21 | {{{ |
| | 22 | #!sql |
| | 23 | alter table airport |
| | 24 | add column longitude numeric; |
| | 25 | |
| | 26 | alter table airport |
| | 27 | add column latitude numeric; |
| | 28 | }}} |
| | 29 | |