Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Przesunięcie rekordu - pozycja na warstwie.
23-09-2017, 11:53,
#1
Przesunięcie rekordu - pozycja na warstwie.
Dzień Dobry.
Po wyczerpaniu wszystkich pomysłów, zwracam się z pytaniem.
Posiadam warstwę liniową shp z kilkunastoma rekordami. Nadając im id przez $rownum otrzymuję unikalne id.
I teraz dzieląc jedną z linii powstaje nowy rekord który otrzymuje kolejne (ostatnie) id.
I teraz pytanie w jaki sposób przesunąć ten nowy rekord, żeby zmienić jego kolejność na warstwie, tak żeby w momencie nadawania po raz kolejny id przez $rownum znalazł się on pod pierwotnym rekordem.
Dodam, że nie chodzi mi tylko o zmianę w tabeli atrybutów tylko zmianę fizycznie na warstwie pozycji nowego rekordu.
Mam nadzieję, że w miarę jasno przedstawiłem swój problem.
Pozdrawiam
Szymon
23-09-2017, 19:07,
#2
RE: Przesunięcie rekordu - pozycja na warstwie.
(23-09-2017, 11:53)Wake napisał(a): Dzień Dobry.
Po wyczerpaniu wszystkich pomysłów, zwracam się z pytaniem.
Posiadam warstwę liniową shp z kilkunastoma rekordami. Nadając im id przez $rownum otrzymuję unikalne id.
I teraz dzieląc jedną z linii powstaje nowy rekord który otrzymuje kolejne (ostatnie) id.
I teraz pytanie w jaki sposób przesunąć ten nowy rekord, żeby zmienić jego kolejność na warstwie, tak żeby w momencie nadawania po raz kolejny id przez $rownum znalazł się on pod pierwotnym rekordem.
Dodam, że nie chodzi mi tylko o zmianę w tabeli atrybutów tylko zmianę fizycznie na warstwie pozycji nowego rekordu.
Mam nadzieję, że w miarę jasno przedstawiłem swój problem.
Pozdrawiam
Szymon

Jeśli dobrze zrozumiałem masz warstwę liniową i automatycznie generujesz jej id.
Następnie dzielisz niektóre obiekty i automatycznie otrzymują one kolejne id.
Teraz chcesz, żeby te wydzielone odcinki, miały id kolejny, po odcinku z jakiego powstały?

Tworzysz warstwę liniową shp, numerujesz pierwotne linie w kolumnie id.
Tworzysz w niej nową kolumnę np. id_old i kopiujesz do niej wartości z id.
Następnie wprowadzasz te podziały, nowe elementy dostają kolejne id, a id_old dziedziczą z pierwotnego obiektu.

Teraz możesz użyć wtyczki Sort and Number
Ustawiasz pierwsze sortowanie po id_old, a kolejne po id.
I wtyczka dodaje Ci kolumnę z właściwym numerem id wiersza.
Pamiętaj, żeby sprawdzić to na kopii warstwy (żeby w razie czego nie stracić danych). Na warstwie edytowanej przez tą wtyczę, za pomocą poniższej metody nie mogłem wykonywać zapytań SQL.

Możesz także zrobić to bez tej wtyczki, trochę więcej zabawy, ale dostajesz wtedy faktycznie posortowane dane, a nie tylko id w kolumnach.
Początek jest taki sam jak przed użyciem wtyczki (kolumny id i old_id)
Jak już masz wprowadzone podziały to z menu QGis > Bazy danych > Zarządzanie bazami > Virtual Layers > QGIS layers otwierasz Okno SQL (skrót F2)

W nim wpisujesz zapytanie, które sortuje dane we właściwy sposób.
Kod:
select * from liniowa order by id_old, id
liniowa to nazwa tej warstwy shp

Wczytujesz jako nową warstwę (jako id ustawiasz kolumnę id).
Powinna pojawić się w paneli warstw QGIS i zapisujesz ją do shp.
Teraz aktualizujesz dla niej id $rownum w kalkulatorze pól.
24-09-2017, 11:55,
#3
RE: Przesunięcie rekordu - pozycja na warstwie.
Cześć
No i po próbach ale metodą 2 (interesuje mnie faktyczne sortowanie w warstwie a nie wirtualne) po wpisaniu zapytania otrzymałem informację:
Query execution error on DROP TABLE IF EXISTS "test"; CREATE VIRTUAL TABLE "test" USING QgsVLayer(test20170924115029387);: 1 - duplicate column name: IDB
i to przewyższa już moją wiedzę.
Co może być nie tak z warstwą??
Pozdr.
Sz.
24-09-2017, 12:56, (Ten post był ostatnio modyfikowany: 24-09-2017, 13:15 {2} przez xmaziax.)
#4
RE: Przesunięcie rekordu - pozycja na warstwie.
(24-09-2017, 11:55)Wake napisał(a): Cześć
No i po próbach ale metodą 2 (interesuje mnie faktyczne sortowanie w warstwie a nie wirtualne) po wpisaniu zapytania otrzymałem informację:
Query execution error on DROP TABLE IF EXISTS "test"; CREATE VIRTUAL TABLE "test" USING QgsVLayer(test20170924115029387);: 1 - duplicate column name: IDB
i to przewyższa już moją wiedzę.
Co może być nie tak z warstwą??
Pozdr.
Sz.
A nie robiłeś tego na warstwie, którą wcześniej obrabiałeś wtyczką?
U mnie też był z tym jakiś problem, jak usunąłem atrybut dodany przez wtyczkę było już ok.
Udostępnij przykładową warstwę to popatrzę u siebie.
24-09-2017, 21:01,
#5
RE: Przesunięcie rekordu - pozycja na warstwie.
We wtyczce MMQGIS jest opcja sortowania elementów wg pola.


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Przesunięcie całego obiektu z cad (dxf) misterrajt 2 3 772 21-03-2016, 11:48
Ostatni post: misterrajt

Skocz do: