Wyświetlanie na domyślnej mapie

Widzi mi się, że jeśli można nazwę obszaru przesunąć punktem z rolą label, to przynajmniej na domyślnej mapie problem powinien być rozwiązany…

Oczywiście można, tylko wtedy można się też zastanawiać, czy to nie jest tagowanie pod renderowanie. Dlatego właśnie szukam rozwiązania, w którym to automat renderujący kombinuje jak pomieścić labelki w danym przypadku mając ogólne dane, a nie mapowicz je preparuje pod konkretną mapkę.

Można spróbować zwiększyć zakres ruchu nazw miast przy unikaniu konfliktów. Teraz są to 4 piksele. Dla niskich poziomów zoomu umiejscowienie miast może być niedokładne, byle błąd nie rzucał się w oczy.

A nie dałoby się zrobić na wzór map papierowych?
Nazwy obszarów (województw) większe i blade, a nazwy punktów (miast) mniejsze, wyraźnie się odcinające od tła i na wierzchu?

Jeśli idzie o barwy, to przecież już tak jest - nazwy obszarów administracyjnych są fioletowe, a miasta czarne. Tylko co masz na myśli “pod spodem”? Żeby nazwy miast nakładały się na nazwy obszarów? Wydaje mi się, że na papierowych tak się wcale nie robi, tylko ręcznie przesuwa nazwy obszarów, czyli to, co ja bym chciał żeby robił automat. No, jeszcze jak obszar jest wyjątkowo wielki, to czasem np. nazwy miast się mieszczą między literami nazwy obszaru, ale to nie ten przypadek.

Trzeba by przetestować ten pomysł, możesz spróbować (mogę pomóc przy konfiguracji środowiska testowego)?

Ale skoro mamy więcej ruchu jeśli idzie o nazwy obszarów niż nazwy punktów, to w tym kierunku należy iść tak czy siak. Przykład: Madryt na z4-z5 - dopóki nie ruszysz etykiety kraju, to nie widzę szans na wydobycie stolicy na wierzch, dopiero na z6 dało się obie pomieścić:

http://www.openstreetmap.org/relation/5326784#map=6/41.245/-0.890

Widziałem gdzieś taką mapę i to chyba online - wielka czcionka outline bez wypełniania z nazwą regionu, więc mimo częściowego zakrycia przez inne elementy napis wciaż był czytelny.

Ha, właśnie przypadkiem wyczaiłem czemu przykładowy fragment mapy w osm-carto to centrum Chicago - wygląda na to, że to nawiązanie do innego, wcześniejszego stylu:

OSM Bright 2012

OSM Carto 2014

OSM Carto 2017

Ciekawe różnice w kolorze wody. Najlepiej jest w wersji z 2012.

OSM Bright to zupełnie inny styl, ale zgodzę się :wink:

Podobno jest coś, co pozwala na przesuwanie etykiet, i to także dla wielokątów, ale przyznaję bez bicia, że nie zrozumiałem czy to jest to, o co mi chodzi, czy może coś innego. Chodzi o parametr X:

opis:
https://github.com/mapnik/mapnik/wiki/TextSymbolizer#placements

kod:
https://github.com/mapnik/mapnik/blob/bfb071233eefe96607079d3b41c127a3e3c41b79/src/text/text_layout.cpp#L60-L87

Czy ktoś potrafi wyjaśnić po polsku jak to właściwie działa?

To jest używane tylko przy unikaniu konfliktu nazw. Zastosowanie X widac tam w przykładzie:
“X,10,5” (keep position, but try to reduce size)
ale i tak lepsze jest np. “N,S,E,W,10,5”, bo najpierw próbuje inne pozycje, a potem próbuje zmniejszać czcionkę.

Użycie takiego mechanizmu dla nazw województw pozwoliło by przypuszczalnie na wyświetlenie się nazwy województwa mazowieckiego, które teraz pada ofiarą stolicy. W innych, jak sądzę, nic by nie dało, bo nazwy województw nie nakładają się same na siebie ani na inne teksty.

Aha, czyli X nic nie przesuwa, tylko pozwala zmieniać wielkość czcionki? To raczej mało interesująca opcja, chyba że w ograniczonym zakresie (najwyżej o 1 punkt).

Natomiast zastosowanie NSEW dla obszarów (dla miast już tego używamy w specjalny sposób) ma sens. Być może w tym celu trzeba by było połączyć warstwy kraj-stolica i regiony-miasta, żeby to działało, ale nie jestem pewien czy dobrze to rozumiem. Tak czy owak jak zwykle trzeba to potestować, a na początek sprawdzić czy już tego nie ma.

Tak, X nie przesuwa (choć wciaż działają przesunięcia pikselowe), ale nie ma nic wspólnego ze zmianą wielkości czcionki. To wynika tylko z obecności liczb na końcu, a X się pojawiiło bo wymagane jest użycie jakiejś literki, tj, “10,9” jest nieprawne.

Łączenie warstw miałoby sens, gdyby Mapnik potrafił operować współrzędnymi kilku napisów jednocześnie, a nie wiem czy to potrafi. Raczej robi to metodą dopasowania nowego napisu do już przetworzonych.

Może lepiej, a na pewno prościej, byłoby najpierw przetwarzać istotne miasta, a potem próbować dopasowywać nazwy regionów? Jeśli miast byłoby za dużo przy tym podejściu, można by wprowadzić nową warstwę, zawiarająca tylko te z capital=4 i ją umieścić przed warstwą z nazwami regionów. Dla Polski to 66 wobec 17.
I jeszcze bym wywalił “województwo” z nazw regionów. Oczywiście nie w danych, a po stronie rendera.

A gdzie jest kod który powoduje przesunięcia pikselowe, o których mówisz?

Warstwę ze stolicami “states” myślę, że można wydzielić. A jeśli jest tak jak mówisz:

nazwa kraju
nazwa stolicy
nazwy województw
nazwy dużych miast

to pewnie wystarczy rozszerzyć warstwę stolic o stolice “states”.

Nie widzę szans, osm-carto bierze tylko “name” i tyle.

Próbowałem wykorzystać położenia N,S,E,W itp. do nazw województw (czyli wielokątów), ale ani drgnęły. Szkoda, to też by było coś. Nieczytelna jest dla mnie dokumentacja Mapnika i Carto, trudno mi się w niej zorientować.

Ponawiam propozycję żebyś może popróbował przy tym pogrzebać i testować, bo łatwiej ci to idzie niż mnie. Co ty na to?

shield-text-dx, shield-text-dy oraz text-dx i text-dy, ale możliwe, że to jest zwykły stały offset.

Tak, trzeba tylko zadbać, by stolica była pierwsza.

Dowolne inne tagi są chyba teraz dostępne w osm-carto? Bo Mapnik ma możliwość podania alternatywnych tekstów - właśnie na wypadek problemów z dopasowaniem przy rozwiązywaniu komfliktów. Nie wiem tylko, czy składnia osm-carto pozwala na przekazanie takich dodatkowych nazw.

Te, które widać teraz się nie ruszą. Mogłoby się pojawić mazowieckie, ale to zależy od swobody ruchu. Może to text-dy trzeba ustawić?

Też już nad tym zastanawiam. :slight_smile:

Moim zdaniem to właśnie offset.

Nazwy są wyświetlane z tagu name z wyboru, bo są najbardziej uniwersalne. Niedawno była dyskusja o innych tagach nazwy (w sensie problemów z innymi systemami znaków i językami), ale nic się nie zmieniło. Technicznie można, ale nie widzę szansy na akceptację.

Jeśli chcesz się pobawić, to polecam Dockera - jeśli nie używasz Linuksa i Docker nie działa na twoim systemie, to wystarczy VirtualBox z Ubuntu i tam ten Docker dopiero. Zależy mi, żeby więcej ludzi dłubało w kodzie osm-carto, bo niby jest nas kilka osób, ale robi się specjalizacja - jeden jest od SQL-a, inny od fontów albo dróg i czasem trudno nawet zrecenzować czyjąś poprawkę.

Tak, stały offset. Dałoby się używać dodatkowych wartości, gdyby było obsługiwane text-placement-type: list, ale jak można zobaczyć - [1] i [2] - problem jest znany i na razie brak sensownego rozwiązania.

Tu chodziło mi o użycie [name] i jako alternatywnego tekstu [short_name] przy wykorzystaniu wyżej wymienionego rodzaju rozmieszczania “list”. W short_name u nas jest właśnie województwo bez “województwa”.

Wydzieliłem wątek na temat nazw województw do osobnego wątku:

https://forum.openstreetmap.org/viewtopic.php?id=60575

Wygląda na to, że jest inny sensowny algorytm (typu “umieść gdziekolwiek wewnątrz granic”), i to nawet używany w czeskim forku, tylko trzeba zachęcić talaja, żeby go wrzucił do standardowego Mapnika :slight_smile: (a potem jeszcze wdrożyć w Carto CSS) :

https://github.com/mapycz/mapnik/blob/master/docs/features/placement-grid.md
https://github.com/mapnik/mapnik/pull/3780#issuecomment-347098875