Uzupełnianie geometrii oraz praca sieciowa. - Wersja do druku +- Forum QGIS (http://forum.quantum-gis.pl) +-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html) +--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html) +--- Wątek: Uzupełnianie geometrii oraz praca sieciowa. (/thread-1343.html) |
Uzupełnianie geometrii oraz praca sieciowa. - fcs - 27-06-2016 Witam, 1. Uzupełnianie geometrii. Mam tabelę w PostGis, w której geometria obiektów nie jest kompletna, tzn są obiekty z geometria NULL. Pod QGIS chcę uzupełnić geometrię tym obiektom. Okazuje się, że QGIS nie daje takiej możliwości, gdyż w tabeli atrybutów nie pojawiają się rekordy z pustą geometrią. Jeżeli jest na to rozwiązanie, to bardzo proszę o przepis. W Internecie temat wygląda na nierozwiązany. 2. Praca w sieci. Sprawa również dotyczy PostGis-a. W momencie rozpoczęcia edycji rekordu, nie jest zakładana blokada w bazie danych na ten rekord (Select for update). W rezultacie użytkownik QGIS-a nie wie, że dany rekord jest już modyfikowany przez innego użytkownika (w tym z poziomu innej aplikacji). To samo jest w drugą stronę. Inna aplikacja też nie wie, że rekord jest modyfikowany przez QGIS. W rezultacie prowadzi to do nieprawidłowości w danych. Proszę osoby mające bliższy kontakt z twórcami QGIS o zasygnalizowanie w/w problemów. Pozdrawiam RE: Uzupełnianie geometrii oraz praca sieciowa. - sebaq - 27-06-2016 Ad1. Z poziomu postgresa uzupełnij puste pole geometrii jakąś wartością z innego obiektu, który geometrie posiada. W QGISie zobaczysz ten obiekt dokładnie w tym samym miejscu, z którego skopiowałeś geometrię i będziesz mógł już ją modyfikować. Ad2. Są/były jakieś wtyczki ułatwiające pracę zbiorową w QGISie (pgVersion?) ale faktycznie przydałaby się taka standardowa funkcjonalność. Być może mechanizmy z bazy danych MVCC będą tu pomocne. Pozdrawiam! RE: Uzupełnianie geometrii oraz praca sieciowa. - fcs - 05-07-2016 Witam. Dzięki za odpowiedź. Ad.1. W międzyczasie problem opisany w tym punkcie rozwiązałem poprzez trigger o następującej składni: CREATE OR REPLACE FUNCTION kb_trigger() RETURNS trigger AS $body$ DECLARE Dok integer; BEGIN IF TG_OP='INSERT' THEN IF NEW.geom_plg IS NULL THEN NEW.geom_plg := ST_GeomFromText('MULTIPOLYGON EMPTY'); END IF; IF NEW.geom_wln IS NULL THEN NEW.geom_wln := ST_GeomFromText('MULTILINESTRING EMPTY'); END IF; IF NEW.geom_pkt IS NULL THEN NEW.geom_pkt := ST_GeomFromText('MULTILIPOINT EMPTY'); END IF; END IF; RETURN NEW; END; $body$ LANGUAGE plpgsql; ALTER FUNCTION kb_trigger() OWNER TO postgres; DROP TRIGGER IF EXISTS kb_trg_01 ON kb CASCADE; CREATE TRIGGER kb_trg_01 BEFORE INSERT ON kb FOR EACH ROW EXECUTE PROCEDURE kb_trigger(); W przypadku dodania rekordu i pustej geometrii, wprowadza geometrię EMPTY. Jest to oczywiście półśrodek, gdyż komplikuje późniejsze analizy obiektów bez geometrii. Ad.2. Pozostaje nierozwiązany. Pozdrawiam ML |