Dodatkowy wpis na temat tworzenia ładnych map.
Prawie każdy z nas lubi ładne mapy. A co jeśli powiedziałbym Ci, że sam możesz tworzyć ładne mapy? Niewielkim nakładem sił, po wpisaniu podstawowych zwrotów, bez skomplikowanego oprogramowania i zupełnie za darmo. Wystarczy przygotować środowisko, posiadać chęć nauki i samozaparcia.
Zobaczcie tylko jakie mapy można stworzyć w kilka minut.
Jednak trzeba mieć świadomość, że na drodze może pojawić się kilka ścian, które nie mogą was pokonać. Nie możecie poddawać się w przygotowywaniu całego środowiska. Jeśli macie jakieś problemy, to piszcie na Forum Androidowy, postaram się pomóc. Jednak wiele pomocnych treści znajdziecie w internecie. Mi przygotowanie całego środowiska zajęło w sumie około dwóch dni, ale wyjątkowo dużo problemów napotkałem po drodze, szczególnie z oprogramowaniem PyCharm.
Obecnie korzystam z systemu Fedora Gnome i oprogramowania Spyder. Jednak mapy można tworzyć w dowolnie wybranym systemie i w innej aplikacji. Na początku wymyśliłem sobie, że będę bawił się w PyCharm, bo miałem już z tym kontakt. Jednak nie wczytywało mi jednej z bibliotek. Internauci, którzy mi pomagali również doszli do ściany, której nie mogliśmy przeskoczyć. Szkoda, bo PyCharm jest bardziej intuicyjne, ale do generowania map wystarczy Spyder.
Musicie zacząć od zainstalowania bibliotek Python (https://www.python.org/). Następnie uzbroić się w poniższe biblioteki:
Przyjrzyjmy się poniższemu przykładowi. Wystarczy podać współrzędne, w tym przypadku 52.2495,21.0124 i biblioteki wygenerują ciekawą mapę. Oczywiście, jest to prosty przykład, który dostępny jest na Github Pretty Maps. Jest tam ich mnóstwo jeśli zajrzycie do zakładki Notebook. Warto jednak pobawić się parametrami. Zamiast współrzędnych możecie podawać nazwy miast, dzielnic i ogólnie obszarów, które znajdziecie w Open Street Maps.
# Style parameters
palette = [’#433633′, '#FF5E5B’]
background_c = '#F2F4CB’
dilate = 100
# Setup figure
fig, ax = plt.subplots(figsize = (10, 10), constrained_layout = True)
# Plot
layers = plot(
(52.2495,21.0124), radius = 500,
ax = ax,
layers = {
'perimeter’: {’circle’: False, 'dilate’: dilate},
'beach’: {’tags’: {’natural’: 'beach’}},
'water’: {’tags’: {’natural’: [’water’, 'bay’]}},
'streets’: {
'width’: {
'primary’: 5,
'secondary’: 4,
'tertiary’: 3,
'residential’: 2,
'footway’: 1,
},
'circle’: False,
'dilate’: dilate
},
'building’: {
'tags’: {’building’: True},
'union’: False,
'circle’: False,
'dilate’: dilate
},
'green’: {
'tags’: {
'landuse’: [’grass’, 'village_green’],
'leisure’: 'park’
},
'circle’: False,
'dilate’: dilate
},
},
drawing_kwargs = {
'background’: {’fc’: '#F2F4CB’, 'ec’: '#dadbc1′, 'hatch’: 'ooo…’, 'zorder’: -1},
'perimeter’: {’fill’: False, 'lw’: 0, 'zorder’: 0},
'green’: {’fc’: '#8BB174′, 'ec’: '#2F3737′, 'hatch_c’: '#A7C497′, 'hatch’: 'ooo…’, 'lw’: 1, 'zorder’: 1},
'water’: {’fc’: '#6CCFF6′, 'ec’: '#59adcf’, 'lw’: 0, 'zorder’: 2, 'hatch’: 'ooo…’},
'beach’: {’fc’: '#F2E3BC’, 'ec’: '#EBD499′, 'lw’: 0, 'zorder’: 2, 'hatch’: 'ooo…’},
'streets’: {’fc’: '#2F3737′, 'ec’: '#475657′, 'alpha’: 1, 'lw’: 0, 'zorder’: 4},
'building’: {’palette’: palette, 'ec’: '#2F3737′, 'lw’: .5, 'zorder’: 5},
},
osm_credit = {’x’: .02, 'y’: .01, 'color’: '#2F3737′}
)
# Set bounds
xmin, ymin, xmax, ymax = layers[’perimeter’].bounds
dx, dy = xmax-xmin, ymax-ymin
ax.set_xlim(xmin-.06*dx, xmax+.06*dx)
ax.set_ylim(ymin-.06*dy, ymax+.06*dy)
Możecie pobawić się zmianą kolorów, dróg, dodawać połączenia kolejowe, usuwać akweny lub pozbywać się budynków. Możliwości jest wiele i sam dopiero to odkrywam.
Swego czasu bawiłem się w programie QGIS i to daje dużo większe możliwości, ale generowanie ładnych map wymaga już większej wiedzy. Pewnie kiedyś wrócę do tego w wolnym czasie, ale moim zdaniem QGIS nie jest zbyt intuicyjnym oprogramowaniem. Zdecydowanie bardziej przyjaznym niż wyżej opisany sposób, ale dotarcie do takich efektów końcowych może być bardziej czasochłonne. QGIS polecam jeśli chcecie popłynąć na większe wody związane z mapami, bo daje ono ogromne możliwości. Jeśli jednak chcecie stworzyć coś ładnego, tak na szybko, to polecam powyższe biblioteki.
Poniżej możecie zobaczyć, że czasami klasyczny rzut mapy jest „gorszy” niż rzeczywistość. Nie wiem jak wam, ale mi Stary Rynek w Poznaniu bardziej podoba się odwrócony o 180 stopni. Oczywiście, tak być nie może, ale jęśli ktoś chciałby wykorzystać prawdziwy teren do stworzenia jakiejś mapy fantasy, to już ma jakąś bazę pod to. Wystarczy obrócić mapę, usunąć niektóre budynki, pokolorować pewne elementy, zmienić kolor rzeki, pododawać pewne rzeczy i może wyjść z tego ciekawy efekt.
Pretty Maps pozwala na łączenie obszarów miasta. Jednak trzeba trafnie je dobierać lub łączyć z innymi parametrami. Poniżej połączenie Łazarza i Wildy (1); Łazarza, Wildy i Górczyna (2) w Poznaniu. Widać, że pomiędzy nimi brakuje czego, jakiegoś kleju. W tym przypadku zabrakło głównych ulic i wystarczy je dodać w kodzie. Nad poniższą mapą musiałbym popracować, bo uliczki wyszły trochę „za grube”.
Poniżej przykład jak to lepiej wygląda z wykorzystaniem mapy Porto Alegre.
Im bardziej skomplikowana mapa, im więcej parametrów, tym dłużej generowany jest obraz. W przypadku Starówki w Warszawie mapę generowało mi około minuty. A nie mam mocnego laptopa. Natomiast komputer miał więcej problemów z połączeniem trzech obszarów w Poznaniu. Tutaj już generowanie trwało około 3 minut.