Changes between Version 15 and Version 16 of AdvancedTopics


Ignore:
Timestamp:
05/20/26 15:29:14 (6 days ago)
Author:
231026
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedTopics

    v15 v16  
    11= Напредна тема: Имплементација на PostGIS =
    22
    3 За имплементација на напредна тема за нашиот проект избравме PostGIS кој овозможува надградување на базата на податоци да управува со географски информации. Во реалните системи на светските авиокомпании овозможено е следење на летови, нивните рути како и самите авиони употребувајќи GPS технологии и калкулации на рути. Со цел пореалистично моделирање на проектот сметаме дека оваа тема би дала малку поголема прецизност на дел од податоците.
     3За имплементација на напредната тема за нашиот проект избравме PostGIS кој овозможува надградување на базата на податоци да управува со географски информации. Во реалните системи на светските авиокомпании овозможено е следење на летови, нивните рути како и самите авиони употребувајќи GPS технологии и калкулации на рути. Со цел пореалистично моделирање на проектот сметаме дека оваа тема би дала малку поголема прецизност на дел од податоците.
    44
    55Пред имплементаицја на оваа тема, во табелата !ScheduledFlight која претставува закажан лет (урнек), колоната Distance беше генерирана на рандомизиран начин односно според времето на полетување и слетување, што не претставува реален податок. Проблем се јавува при употреба на оваа вредност во калкулациите на цена на авионски билети како и додавање на поени за летање на патниците. Со воведување на PostGIS, податоците се реални и употребливи во бизнис логиката на апликацијата. Исто така овозможено е имплементирање на дополнителни функционалности присутни во реални системи.
    66
    7 Со цен јасно прикажување на резултатите кои ги добивме со имплементација на PostGIS, за визуелизација на податоците ја употребивме алатката QGIS која директно се поврзува со нашата база на податоци во Postgres и во која може да се извршуваат и потребните прашалници. Во документацијата по имплементација на секој дел ја имаме прикажано и соодветната визуелизација.
     7Со цел јасно прикажување на резултатите кои ги добивме со имплементација на PostGIS, за визуелизација на податоците ја употребивме алатката QGIS која директно се поврзува со нашата база на податоци во Postgres и во која може да се извршуваат и потребните прашалници. Во документацијата по имплементацијата на секој дел ја имаме прикажано и соодветната визуелизација.
    88
    99== Инсталација на PostGIS
     
    1919== Промена на табелата Airport
    2020
    21 За успешно имплементирање на PostGIS потребно беше да се направи промена во табелата Airport. За да можеме да пресметаме растојание помеѓу аеродромите (километража на лет) потрбено беше додавање на колони Longitude (географска должина) и Latitude (географска ширина). Со додавање на овие две колони овозможено е одредување на реалните координати на аеродромот.
     21За успешно имплементирање на PostGIS потребно беше да се направи промена во табелата Airport. За да можеме да пресметаме растојание помеѓу аеродромите (километража на лет) потребно беше додавање на колони Longitude (географска должина) и Latitude (географска ширина). Со додавање на овие две колони овозможено е одредување на реалните координати на аеродромот.
    2222
    2323{{{
     
    3030}}}
    3131
    32 По додавање на колоните тие беа пополнети со веќе постоечките податоци од OpenFlight CSV датотеката која исто така ја употребивме и за првобитното пополнување на табелата што ни овозможи одржување на конзистентност во податоците.
     32По додавање на колоните тие беа пополнети со веќе постоечките податоци од OpenFlight CSV датотеката која исто така ја употребивме и за првобитното пополнување на табелата што ни овозможи одржување на конзистентноста во податоците.
    3333
    3434Како следен чекор потребно беше претставување на координатите во форма на Point. За таа цел додадовме нова колона location од тип geography(Point, 4326).
     
    6060== Промена во табелата !ScheduledFlight ==
    6161
    62 При иницијално пополнување на податоците во табелата !ScheduledFlight, во колоната Distance беа поставени случајни податоци (искалкулирани според времето на полетување и слетување кои исто така се случајно пополнети). Со цен вршење на реални пресмети за цена на летовите како и поени за патниците потребно е да се знае вистинското растојание кое го поминува секој лет.
     62При иницијално пополнување на податоците во табелата !ScheduledFlight, во колоната Distance беа поставени случајни податоци (искалкулирани според времето на полетување и слетување, кои исто така се случајно пополнети). Со цел вршење на реални пресметки за цена на летовите како и поени за патниците потребно е да се знае вистинското растојание кое го поминува секој лет.
    6363
    64 За исполнување на таа цен потребно беше да се пресмета вистинското растојание употребувајќи ја новата колона Location во табелата Airport. PostGIS нуди функционалност пресметка на растојание помеѓу две точки ST_Distance. За промена на колоната Distance го извршивме следниот SQL код:
     64За исполнување на таа цел потребно беше да се пресмета вистинското растојание употребувајќи ја новата колона Location во табелата Airport. PostGIS ја нуди функционалноста за пресметка на растојание помеѓу две точки ST_Distance. За промена на колоната Distance го извршивме следниот SQL код:
    6565
    6666{{{
     
    8787=== Тригер Calculate Distance ===
    8888
    89 Иако кодот погоре ги корегира веќе постоечките податоци за Distance, при додавање на нов ScheduledFlight или промена на некој од слотовите за полетување и слетување не се врши повторна пресметка. За таа цел имплементиравме тригер кои при изведување на некои од овие активности врши повторна пресметка на растојанието. Вака се озовможува конзистентност на податоците.
     89Иако кодот погоре ги коригира веќе постоечките податоци за Distance, при додавање на нов ScheduledFlight или промена на некој од слотовите за полетување и слетување не се врши повторна пресметка. За таа цел имплементиравме тригер кои при изведување на некои од овие активности врши повторна пресметка на растојанието. Вака се озовможува конзистентност на податоците.
    9090
    9191[attachment:CalculateDistance.sql]
     
    121121== Функција Find Nearest Airport ==
    122122
    123 При непосакувана ситуација, некогаш потребно е авионите итно да слетаат на најблискиот аеродром, или пак при пребарување на летови потребно е и пребарување и од аеродромите во близина. Со цел имплементација на оваа функционалност ја воведовме следната функција
     123При непосакувана ситуација, некогаш потребно е авионите итно да слетаат на најблискиот аеродром, или пак при пребарување на летови потребно е и пребарување од аеродромите во близина. Со цел имплементација на оваа функционалност, ја воведовме следната функција
    124124
    125125[attachment:FindNearestAirport.sql]
     
    138138== Функцијa Flight At Time ==
    139139
    140 Во реални системи податоците за тоа каде одреден авион се наоѓа во реално време се добиваат според GPS координатите на авионот и се чуваат во посебни табели. Поради тоа што летовите и авионите се вештачки изгенерирани во нашата база, ова не е реалистично и немаме начин како да пристапиме до GPS координати до авионите во нашата база. Поради тоа, имплементиравме функција !FlighAtTime која ја пресметува локацијата на некој авион (за време на конкретен лет) во дадено време. Оваа пресметка се добива преку употреба на времетраењето на летот, и изминатото време од полетување и растојанието помеѓу аеродромот на полетување и на слетување. Како аргументи се праќаат ID на некој лет и времето за тоа каде се наоѓа авионот (timestamp). Функцијата враќа моментална локација (Point) и самата рута на летот (Line).
     140Во реални системи податоците за тоа каде одреден авион се наоѓа во реално време се добиваат според GPS координатите на авионот и се чуваат во посебни табели. Поради тоа што летовите и авионите се вештачки изгенерирани во нашата база, ова не е реалистично и немаме начин како да пристапиме до GPS координати до авионите во нашата база. Поради тоа, имплементиравме функција !FlighAtTime која ја пресметува локацијата на некој авион (за време на конкретен лет) во дадено време. Оваа пресметка се добива преку употреба на времетраењето на летот, изминатото време од полетување и растојанието помеѓу аеродромот на полетување и на слетување. Како аргументи се праќаат ID на некој лет и времето за тоа каде се наоѓа авионот (timestamp). Функцијата враќа моментална локација (Point) и самата рута на летот (Line).
    141141
    142142[attachment:FlightAtTime.sql]