Jak wyświetlać etykiety tylko dla dowolnego wyboru przedmiotów?

10

Ciekawe, jak inni rozwiązują ten problem: Utworzyłeś mapę dla czegoś z dużą liczbą funkcji, które są oznaczone. Klient / klient prosi, aby wyświetlać etykiety X, Y i Z tylko na podstawie pozornie arbitralnej decyzji (np. Tego, co uważają za ważne cechy). Jak byś to zrobił?

Jakieś pomysły:

  • Utwórz nową kolumnę z ciągiem dla tej specjalnej etykiety i wpisz tylko wartość funkcji, które chcą zobaczyć (może to spowodować zduplikowanie informacji)
  • Utwórz nową kolumnę logiczną i oflaguj funkcje, które chcą zobaczyć, a następnie użyj etykietowania warunkowego w QGIS 1.8, aby wyświetlić etykietę tylko wtedy, gdy wartość logiczna jest prawdziwa
Brian Kelly
źródło
6
Drugi pomysł ma wiele zalet: (i) wyraźnie dokumentuje, co należy oznakować, (ii) jest tak trwały i przenośny jak podstawowy zestaw danych, (iii) zapewnia prosty i bezpośredni mechanizm określania, które etykiety pojawią się ( który jest nawet przenośny do innego GIS lub pakietu kreślącego), (iv) jest nawet podatny na analizę w przypadku, gdy kiedykolwiek pojawią się pytania dotyczące związków między tymi wyborami etykiet i innymi zmiennymi oraz (v) przez oszczędne kodowanie wyboru klienta , nie tworzy duplikatów informacji.
whuber
2
@ Whuber, czy możesz udzielić takiej odpowiedzi, abym mógł zagłosować, ponieważ właśnie tak bym to zrobił.
Nathan W

Odpowiedzi:

11

Drugi pomysł (stworzenie atrybutu logicznego do wyboru) ma wiele zalet :

(i) wyraźnie dokumentuje, co należy oznakować,

(ii) jest tak trwały i przenośny jak podstawowy zbiór danych,

(iii) zapewnia prosty i bezpośredni mechanizm określania, które etykiety pojawią się (które można nawet przenosić na inny system GIS lub pakiet wydruku),

(iv) możliwa jest nawet analiza na wypadek, gdyby kiedykolwiek pojawiły się pytania dotyczące związków między tymi wyborami etykiet a innymi zmiennymi oraz

(v) przez oszczędne kodowanie wyboru klienta nie tworzy duplikatów informacji.

Działają tu pewne ogólne zasady budowy i zarządzania bazami danych , jak mądrze zasugerowano w pytaniu. Jednym z nich jest to, że każda spójna informacja powinna być w unikalny sposób reprezentowana w bazie danych, jeśli to możliwe. (Informacje używane jako klucze do implementacji sprzężeń i relacji muszą oczywiście pojawiać się w wielu miejscach ze względu na swoją funkcję identyfikowania odpowiednich rekordów w różnych tabelach.) Istnieją doskonałe powody tej zasady, ponieważ każdy, kto próbował utrzymać nienormalizowane relacyjna baza danych może poświadczyć: jeśli nie pamiętasz konsekwentnie o aktualizowaniu, usuwaniu lub dodawaniu tych informacji do każdego tabeli, w której się pojawia, twoja baza danych wkrótce staje się wewnętrznie niespójna: jest uszkodzona, często nieodwracalnie.

Inną zasadą jest to, że w dobrym projekcie relacyjnej bazy danych każda tabela powinna reprezentować pojedynczy koncepcyjny „byt” : coś, co modelują dane lub związek między tymi rzeczami. Gdy klient określa pozornie arbitralny wybór funkcji, skutecznie określa podzbiór wierszy w tabeli. Matematycznie przez aksjomat separacji jest to to samo, co oznaczanie ich polem boolowskim. Tak więc każdy znaczący „arbitralny” podzbiór rzeczy w bazie danych może być reprezentowany przez pole boolowskie i, przeciwnie, takie pole jest dobrym sposobem do przechowywania dowolnych podzbiorów (lub selekcji).

Jeszcze inną zasadą jest to, że powinieneś preferować wykorzystanie podstawowych funkcji zarządzania danymi GIS do przechowywania informacji . Alternatywą jest trochę ad hocmetoda oparta na zdolności GIS do przechowywania informacji w „plikach projektu” lub w inny niezależny sposób. Typowym tego przykładem jest praktyka ręcznego wybierania i umieszczania pożądanych etykiet. Często jest to szybkie i łatwe. Problemy pojawiają się za każdym razem, gdy potrzebna jest zmiana lub trzeba odtworzyć utwór; jedna lub druga z tych sytuacji jest praktycznie nieunikniona. Ręczne umieszczanie etykiet jest równoznaczne z przechowywaniem informacji (a mianowicie, jaki podzbiór funkcji powinien być oznaczony) poza RDBMS w sposób wyjątkowo eliptyczny. Mianowicie, wybór określony wyłącznie według tego, które etykiety się pojawiają, a które nie. Zastanów się, jak możesz rozwiązać następujące problemy:

  • Klient chce, aby te same etykiety pojawiały się na powiązanej, ale innej mapie, będącej częścią innego projektu.

  • Powstaje pytanie, czy etykiety są powiązane z jakimś innym atrybutem.

  • Po wprowadzeniu kilku zmian w etykietach w czasie pojawi się monit o przywrócenie oryginalnej wersji.

W takich przypadkach praca związana z rozwiązaniem problemu może być ogromna: musisz powtórzyć etykietowanie od nowa, ręcznie wykonać kontrole krzyżowe w tabelach bazy danych lub znaleźć i przywrócić stary zarchiwizowany plik projektu. Gdyby zamiast tego etykiety były reprezentowane przez pole logiczne w bazie danych, praca byłaby prawie banalna.

Whuber
źródło
1
Dopiero zaczynam pracę z GIS, ale mam trochę wiedzy na temat baz danych podczas tworzenia oprogramowania. Podejrzewam, że wkrótce otrzymam dodatkowe pytanie na temat zachowania oryginalnego zestawu danych, tworząc oddzielną tabelę specyficzną dla klienta, która zostanie połączona 1-do-1 z oryginalnym zestawem danych i być może zapewniona jako widok PostgreSQL dla przejrzystości.
Brian Kelly,
Tak, to również dobre rozwiązanie. Dzięki znajomości bazy danych wiesz, że rzadko istnieje jedna idealna odpowiedź; zawsze są kompromisy. Stolik przeglądowy jest elegancki i idealny w niektórych sytuacjach. W rzeczywistości często potrzebujesz tylko nowej tabeli, która zawiera identyfikatory funkcji, które mają być oznaczone: połączenie z tabelą atrybutów warstwy tworzy nowe (obce) pole, które jest puste, aby funkcje nie były oznaczone, a ty dobrze iść. Ale teraz masz nową tabelę do zarządzania w bazie danych: istnieje kompromis.
whuber
8

Prawdopodobnie możesz po prostu ustawić regułę w nowym etykietowaniu opartym na wyrażeniach. Reguła będzie działać jako dokumentacja tego, co robiłeś, aby uzyskać wynikowe etykiety.

Zaletą metody „flagi logicznej” jest to, że jest ona bardziej elastyczna podczas pracy nad prawidłową regułą. Łatwo jest zmienić i ulepszyć regułę bez zmiany podstawowego zestawu danych. Z drugiej strony nie jest przenośny na inne pakiety GIS.

Oto przykład, w którym opisuję tylko obiekty o nazwach dłuższych niż sześć znaków i pewnej klasie:

wprowadź opis zdjęcia tutaj

podmrok
źródło
1
Ale zasada w tym przypadku brzmi: „Uważam te cechy za ważne, a pozostałe za nieważne”. Nie sądzę, że jest na to funkcja :-)
Brian Kelly,
1
To pytanie wiąże się również z pytaniem: „Kiedy powinienem zmienić zestaw danych, a kiedy go skopiować?” Podejrzewam jednak, że to znacznie większa rozmowa.
Brian Kelly,
Po prostu założyłem, że te ważne funkcje będą miały przynajmniej identyfikator, którego możesz użyć, tak jak użyłem atrybutu clazz. Oba rozwiązania mają zalety.
podmrok