Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z przyciąganiem w edytowanych widokach POSTGIS
26-02-2018, 18:41,
#1
Bug  Problem z przyciąganiem w edytowanych widokach POSTGIS
Problem wygląda następująco.

Mam zbudowaną tabelę w bazie danych Postgresql.
Na niej  zbudowałem widok, na widoku trigger + funkcję dla niego odpowiedzialne za edycję danych (insert/update/delete).

Edycja danych w widoku działa prawidłowo, wszystkie operacje wykonują się poprawnie.
Jest natomiast problem ze snapowaniem dla nowo powstałych elementów (nowo narysowanych lub tych  powstałych przez podział już istniejących).
Nie działa dla nich przyciąganie.

Po ponownym odczycie widoku, można już się snapować do tych obiektów.
Można "uwidocznić" obiekt dla przyciągania, gdy się go "poruszy" narzędziem do modyfikacji vertexów - wtedy obiekt staje się "snapowalny"

Znalazłem podobny wątek ze zgłoszonym błędem dla tabeli Oracle'a edytowanej w QGis.
https://issues.qgis.org/issues/12690
Sprawdziłem i przy bezpośredniej edycji tabeli Postgis, problem się nie pojawia - czyli to wina operacji na widokach.l

Coś robię nie tak czy problem leży raczej po stronie QGis i należy zgłaszać błąd twórcom?
Ktoś coś doradzi? 

Używam QGis 2.18.17, Postgresql 9.6, Postgis 2.3.3

Poniżej kod umożliwiający odtworzenie sytuacji.
Kod:
CREATE SEQUENCE public.testw_id_seq
 INCREMENT 1
 MINVALUE 1
 MAXVALUE 9223372036854775807
 START 1
 CACHE 1;

CREATE TABLE public.testw
(
 id integer NOT NULL DEFAULT nextval('testw_id_seq'::regclass),
 atr1 integer DEFAULT 1,
 atr2 integer,
 geom geometry(Polygon,2177),
 CONSTRAINT testw_pkey PRIMARY KEY (id)
);
CREATE INDEX testw_geom_idx1  ON public.testw  USING gist  (geom);

CREATE OR REPLACE FUNCTION public.v_test_mod()
 RETURNS trigger AS
$BODY$
DECLARE    
    val integer;
BEGIN
IF TG_OP = 'INSERT' THEN
    val = nextval('testw_id_seq');    
    insert into testw  (id, atr1, atr2, geom )
    VALUES
    (val,  1,  NEW.atr2, NEW.geom);
    RETURN NEW;    
ELSIF TG_OP = 'UPDATE' THEN
    update  testw  set  geom = NEW.geom, atr1 = NEW.atr1, atr2 = NEW.atr2  where id = OLD.id;
    RETURN NEW;
ELSIF TG_OP = 'DELETE' THEN
    delete from  testw where id =OLD.id;
    RETURN NULL;
END IF;
   RETURN NEW;
END;
$BODY$
 LANGUAGE plpgsql VOLATILE SECURITY DEFINER
 COST 100;
 

CREATE TRIGGER v_testw_1_tr
 INSTEAD OF INSERT OR UPDATE OR DELETE
 ON public.v_testw_1
 FOR EACH ROW
 EXECUTE PROCEDURE public.v_test_mod();


Wiadomości w tym wątku
Problem z przyciąganiem w edytowanych widokach POSTGIS - przez xmaziax - 26-02-2018, 18:41

Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  problem z poligonami i przyciaganiem misiek 15 57 936 29-06-2011, 11:37
Ostatni post: Odoakr

Skocz do: