Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
kilka typów na jednej warstwie
23-05-2011, 09:22,
#1
kilka typów na jednej warstwie
czeŚĆ,

Przy imporcie z innych programów / formatów (na pewno z DXF i z MapInfo)
na jednej warstwie potrafią znaleźć się obiekty o różnych typach (punkt, linia, poligon).
Warstwa jest wyświetlana w całości, ale jej typ jest rozpoznawany
według pierwszego elementu znalezionego przy imporcie.

Ujawnia się to dopiero przy zapisywaniu do SHP.
Czy jest jakiś prosty (automatyczny) sposób podzielnia takiej "wielotypowej" warstwy według typów?
(> - - ^.^_,
23-05-2011, 11:48,
#2
RE: kilka typów na jednej warstwie
Rozumiem że pracujesz na SHP.
Jeżeli masz w atrybutach jakiś parametr określający co jest czym (punktem, linią czy poligonem) możesz we właściwościach warstwy "->ogólne-kreator zapytań" ograniczyć zapytaniem wyświetlany wynik do żądanych elementów. Np. jeżeli wszystkie punkty mają jakiś charakterystyczny tylko sobie atrybut ogranicz wyświetlany wynik do elementów spełniających warunek. Następnie zapisz warstwę jako SHP i efektem końcowym powinien być plik tylko z elementami spełniającymi warunek.

Jeżeli nie masz takiej możliwości spróbuj wrzucić całą warstwę do postgisa a wtedy będziesz mógł rozdzielić typy obiektów zapytaniem (przykład dla punktu)
GeometryType("the_geom") IN ('POINT','MULTIPOINT')
Pytanie czy przejdzie eksport do postgisa z takiego SHP i czy jest to wystarczająco automatycznie na Twoje potrzeby??
PS. Na pewno są jeszcze szybsze sposoby... ja tak bym to ugryzł!
23-05-2011, 12:05,
#3
RE: kilka typów na jednej warstwie
(23-05-2011, 11:48)sebaq napisał(a): Jeżeli nie masz takiej możliwości spróbuj wrzucić całą warstwę do postgisa a wtedy będziesz mógł rozdzielić typy obiektów zapytaniem (przykład dla punktu)
GeometryType("the_geom") IN ('POINT','MULTIPOINT')
Pytanie czy przejdzie eksport do postgisa z takiego SHP i czy jest to wystarczająco automatycznie na Twoje potrzeby??
PS. Na pewno są jeszcze szybsze sposoby... ja tak bym to ugryzł!

PostGISa jeszcze w ogóle nie ćwiczyłem.

Przy DXFie radzę sobie przepuszczając przez MicroStation.
Przy plikach z MapInfo jak na razie (odpukać) problem był jednostkowy,
więc się nie wgłębiałem i poprawiłem dane ręcznie usuwając "błędne" rekordy.

Sposób "na bazę danych" jest dla mnie w miarę oczywistym, ale jednak "rękodzielniczym".
Chodzi mi o odpowiednik 'podziel warstwę wektorową' - niewymagający dodatkowych kroków.

Pomysł do rozważenia:
Przy imporcie plików dołożyć możliwość generowania trzech shp
- jeden punktowy, jeden liniowy, jeden poligonowy.
Wtedy nie będzie się trzeba wdrażać co jest na której warstwie, bo i tak import przerobi wszystko.
W tej chwili o 'typie' wczytanej warstwy najwyraźniej decyduje pierwszy znaleziony obiekt.
(> - - ^.^_,
25-05-2011, 10:04,
#4
RE: kilka typów na jednej warstwie
Jest wtyczka ShapefileSplitter która trochę automatyzuje rękodzieło. Zadajesz szejpa i kolumnę po której ma go podzielić. Nie testowałem.
26-05-2011, 09:27,
#5
RE: kilka typów na jednej warstwie
(25-05-2011, 10:04)PanKuleczka napisał(a): Jest wtyczka ShapefileSplitter która trochę automatyzuje rękodzieło. Zadajesz szejpa i kolumnę po której ma go podzielić. Nie testowałem.
Zdaję sobie sprawę z jej istnienia i nawet korzystam z radością.

Problem w tym, że wymaga ona na wejściu jakiegoś unikalnego pola, po którym można by rozsortować geometrię,
a tego właśnie w zadaniu nie mamy.
(> - - ^.^_,
26-05-2011, 10:09,
#6
RE: kilka typów na jednej warstwie
Przyszło mi do głowy coś takiego:

1. Tworzymy kolumnę, w której będziemy zapisywali typ geometrii
2. Kalkulatorem pól wyliczamy w tej kolumnie powierzchnię obiektów ($area)
3. Obiekty, dla których powierzchnia obliczona jest większa od zera to poligony - zamieniamy kalkulatorem tą powierzchnię na jakiś wpis, np 'poligon'
4. Dla obiektów z powierzchnią zero wyliczamy kalkulatorem długość ($length)
5. Obiekty z długością większą od zera to linie, ustawiamy im zamiast długości odpowiedni znacznik, np. 'linia'
6. Obiekty z zerową długością to punkty. Im też możemy teraz ustawić znacznik.

Po znacznikach można teraz w prosty sposób odfiltrować obiekty określonego typu.
Nie testowałem zbytnio tego pomysłu (oprócz obliczania powierzchni i długości), ale powinno się sprawdzić.
26-05-2011, 10:13,
#7
RE: kilka typów na jednej warstwie
(26-05-2011, 10:09)Rayo napisał(a): Przyszło mi do głowy coś takiego:

1. Tworzymy kolumnę, w której będziemy zapisywali typ geometrii
2. Kalkulatorem pól wyliczamy w tej kolumnie powierzchnię obiektów ($area)
3. Obiekty, dla których powierzchnia obliczona jest większa od zera to poligony - zamieniamy kalkulatorem tą powierzchnię na jakiś wpis, np 'poligon'
4. Dla obiektów z powierzchnią zero wyliczamy kalkulatorem długość ($length)
5. Obiekty z długością większą od zera to linie, ustawiamy im zamiast długości odpowiedni znacznik, np. 'linia'
6. Obiekty z zerową długością to punkty. Im też możemy teraz ustawić znacznik.

Po znacznikach można teraz w prosty sposób odfiltrować obiekty określonego typu.
Nie testowałem zbytnio tego pomysłu (oprócz obliczania powierzchni i długości), ale powinno się sprawdzić.

Właśnie sprawdzałem coś podobnego i nie sprawdzi się niestety.

Żeby dodać kolumnę musi być możliwa edycja danej warstwy.
Warstwy zaimportowane z Mapinfo są wyświetlane, ale nie są edytowalne.
(> - - ^.^_,
26-05-2011, 10:51,
#8
RE: kilka typów na jednej warstwie
Jeśli możesz to wrzuć tu jako załącznik przykładową warstwę.
26-05-2011, 11:04,
#9
RE: kilka typów na jednej warstwie
(26-05-2011, 10:51)Rayo napisał(a): Jeśli możesz to wrzuć tu jako załącznik przykładową warstwę.

Pierwszy z brzegu - format MapInfo, tak wyglądają oryginalne dane.
http://wiki.smutek.pl/wiki/poligon_point.rar

Otworzy się poprawnie, edycja warstwy nieaktywna,
przy próbie zapisu jako SHP dostaję:

Nieudany eksport do pliku wektorowego.
Błąd: Błąd zapisu obiektu:
Nie stworzono obiektu (błąd OGR: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.)
Nie stworzono obiektu (błąd OGR: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.)
Nie stworzono obiektu (błąd OGR: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.)
Nie stworzono obiektu (błąd OGR: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.)
Nie stworzono obiektu (błąd OGR: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.)
Nie stworzono obiektu (błąd OGR: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.)
Zapisano jedynie 12 z 18 obiektów.
(> - - ^.^_,
26-05-2011, 11:47,
#10
RE: kilka typów na jednej warstwie
Niezbyt to automatyczne, ale mozna zrobić tak:

1. Tworzysz ręcznie trzy warstwy (punktowa, poligonowa i liniowa) o takiej samej tabeli atrybutów jak importowany plik i otwierasz je w projekcie
2. Importujesz do projektu warstwę 'wielotypową'.
3. W tabeli atrybutów tej warstwy kreatorem zapytań wybierasz obiekty, które spełniają warunek '$area > 0'. Są to poligony, które teraz możes skopiować na wcześniej utworzoną warstwę poligonową i zapisać.
4. Następnie podobnie robisz dla zapytania '$area = 0 and $length >0' (linie)
5. I na końcu punkty - '$length = 0'

Wszystko razem można też zapisać jako SpatialLight, ale nie wszystko można potem z taką warstwą zrobić (przynajmniej na 1.6, wyżej nie sprawdzałem).


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Zniknęło kilka etykiet Karolek 0 2 057 18-05-2020, 15:26
Ostatni post: Karolek
  Etykiety po jednej stronie punktu koszatka443 1 7 443 23-05-2017, 21:38
Ostatni post: Binko
  kalkulator pól kilka warunków Magda 16 60 100 19-12-2014, 14:35
Ostatni post: martel
  Kilka okien mapy martel 3 18 364 15-10-2013, 22:39
Ostatni post: borys
  połączyć wiele/kilka poligonów w jeden diunida 5 42 748 27-02-2013, 13:30
Ostatni post: borys
Big Grin QGis API - kilka pytań początkującego gregsa 7 34 909 22-02-2013, 17:50
Ostatni post: borys
  Kopiowanie z jednej warstwy na drugą Paula 2 22 997 12-08-2011, 10:35
Ostatni post: Paula
  kilka warstw liniowych w jedną [wiki] 2 15 495 14-03-2011, 11:55
Ostatni post: [wiki]

Skocz do: