| Version 13 (modified by , 6 days ago) ( diff ) |
|---|
Advanced Topic
Краток опис на напредната тема (PostGIS)
Како напредна тема за овој проект го избравме PostGIS и QGIS, бидејќи претставуваат најсоодветно решение за функционалностите што системот ги нуди. Уште од самиот почеток, системот беше замислен да работи со локациите на работниците и објавите на корисниците, особено во делот каде што работниците можат да изберат дали сакаат да работат на далечина (remote) или само во рамки на одредена оддалеченост од нивната моментална локација која ја имаат внесено во системот.
Поради ова, PostGIS се покажа како најсоодветна напредна тема, бидејќи, со негова помош, секој мајстор може лесно да ги разгледува понудите што се наоѓаат во негова близина доколку не работи на далечина, додека на корисниците кои бараат мајстори им се препорачуваат оние што се наоѓаат во нивна близина или нудат услуги на далечина.
Пример
На следната слика е прикажана мапа во QGis по извршување на функциите fn_draw_worker_location, fn_draw_active_posts_in_worker_region, fn_draw_worker_to_post_lines и fn_draw_worker_notRemote_region за работник кој не работи на далечина.
На следната слика е прикажано како пример реална апликација би изледала со овие функционалности
Функционалности
Во рамките на напредната тема беа имплементирани неколку дополнителни функционалности, и тоа:
fn_suggest_posts_for_worker(p_worker_id, p_limit default 10)
Оваа функција служи за предлагање на соодветни постови за одреден работник врз основа на неговите специјалности и локација. Најпрво се проверува дали работникот е означен како достапен за работа на далечина (works_remote). Потоа се враќаат само активни постови за кои работникот поседува барем една од потребните специјалности. Доколку работникот не работи на далечина, дополнително се применува просторен филтер со ST_DWithin, кој ги ограничува резултатите на постови во радиус од 1500 метри. За секој резултат се пресметува растојание со ST_Distance и резултатите се подредуваат според најблиските огласи.
Бидејќи ако се прикажат сите потребни детали дирекно на мапата на интерфајсот на апликацијата, истата би била пренатрупана и непрегледна, направена е оваа фунцкија чиишто податоци ќе се користат за приказ на подетални инфромации во картички покрај мапата.
fn_draw_worker_location(p_worker_id)
Оваа функција ја враќа точната географска локација на одреден работник. Се користи за визуелизација на работникот на мапа, при што се враќа неговиот worker_id и координатите (geom) од табелата location. Се користи во QGis.
fn_draw_active_posts_in_worker_region(p_worker_id, p_limit)
Оваа функција ги прикажува сите активни постови во регионот на одреден работник. Се филтрираат само постови за кои работникот ги исполнува потребните специјалности. Доколку работникот не работи од далечина, се применува просторен филтер со радиус од 1500 метри. Исто така е поставен лимит за приказ на постовите бидејќи доколку системот има премногу постови мапата ќе се пренатрупа и нема да биде прегледна, па на почеток се листаат првите 10 постови кои се најблиску, а во интерфејсот на апликацијата би имало начин да се зголеми / намали овој лимит. Се користи во QGis.
fn_draw_worker_to_post_lines(p_worker_id, p_limit)
Оваа функција креира линии помеѓу работникот и постовите на кои одговара, со цел поголема прегледност. Се користат само активни постови и се применува филтер за специјалности. Ако работникот не работи од далечина, се применува ограничување на растојание од 1500 метри. За секој пост се враќа линија (ST_MakeLine) и растојание помеѓу работникот и постот. Се користи во QGis.
fn_draw_worker_notRemote_region(p_worker_id)
Оваа функција ја прикажува работната зона на работникот кој не работи на далечина, со цел подобар преглед на мапата. Ако работникот не е remote, се креира кружна зона околу неговата локација со радиус од 1500 метри користејќи ST_Buffer. Ако работникот е remote, функцијата не враќа резултат. Се користи во QGis.
fn_application_workers_for_post(p_post_id, p_limit)
Оваа функција враќа листа на работници кои аплицирале за одреден пост. За секој работник се враќаат основни информации и растојанието од локацијата на постот. Дополнително се применува филтер за специјалности и радиус од 1500 метри доколку работникот не работи од далечина. Резултатите се подредуваат според најблиските работници до локацијата на постот.
Бидејќи ако се прикажат сите потребни детали дирекно на мапата на интерфајсот на апликацијата, истата би била пренатрупана и непрегледна, направена е оваа фунцкија чиишто податоци ќе се користат за приказ на подетални инфромации во картички покрај мапата.
Дополнитело оваа функционалност е важна за системот, бидејќи корисниците кои поставуваат постови можеби не би сакале да прифатат мајстори кои се многу далеку од локацијата на постот, бидејќи можеби би барале дополнителен паричен надоместок за поминатиот пат.
fn_draw_post_location(p_post_id)
Оваа функција ја враќа точната локација на одреден пост. Се користи за визуелизација на мапа и враќа post_id, наслов и геометрија на постот. Се користи во QGis.
fn_draw_workers_applied_to_post(p_post_id, p_limit)
Оваа функција ги прикажува сите работници кои аплицирале за одреден пост. За секој работник се враќа неговата локација и растојанието до постот. Резултатите се подредуваат според најблиските работници. Исто така е поставен лимит за приказ на мајсторите бидејќи доколку постот има премногу работници кои аплицирале, мапата ќе се пренатрупа и нема да биде прегледна, па на почеток се листаат првите 10 мајстори кои се најблиску, а во интерфејсот на апликацијата би имало начин да се зголеми / намали овој лимит. Се користи во QGis.
fn_draw_post_to_applicant_lines(p_post_id, p_limit)
Оваа функција креира линии помеѓу постот и сите работници кои аплицирале на него, со цел поголема прегледност. Се користи за визуелизација на поврзаноста помеѓу огласите и кандидатите. За секоја врска се враќа линија и растојание помеѓу постот и работникот. Се користи во QGis.
Скрипта
https://develop.finki.ukim.mk/projects/MajStore/attachment/wiki/AdvancedTopic/MajStore_PostGis.sql
Рефакторирана скрипта
Attachments (4)
- Example_worker_not_remote.png (407.4 KB ) - added by 8 days ago.
- Example_application.jpg (55.7 KB ) - added by 8 days ago.
- MajStore_PostGis.sql (9.1 KB ) - added by 6 days ago.
- MajStore_PostGis_refactored.sql (7.6 KB ) - added by 6 days ago.
Download all attachments as: .zip


