Tworzenie małej usługi mapowania / kafelkowania map

26

Szukam niewielkiego i łatwego sposobu na zaprezentowanie jednego lub więcej kształtów wielokątów online (a dokładniej na miejskiej stronie internetowej bez istniejącej infrastruktury map-serwerów). W tej chwili pracuję z QGIS i wolałbym pozostać otwartym oprogramowaniem (nie ma budżetu na duże inwestycje w oprogramowanie).

Badanie tego tematu zaowocowało przytłaczającą liczbą możliwych podejść i wprawiło mnie w zakłopotanie. To czego szukam to

  • możliwość wyświetlania skategoryzowanych wielokątów na mapie tematycznej (- jeśli to możliwe, fajnie byłoby uzyskać wyskakujące okienka lub móc uzyskać informacje o atrybutach - ale jest to wysoce opcjonalne)
  • Wolałbym wykonywać większość pracy (stylizacja itp.) W QGIS
  • OSM jako mapa bazowa byłaby całkowicie w porządku

Do tej pory niestandardowe kafelki mapy na mapie podstawowej OSM wyglądały tak, jak szukam (czy jest lepsze rozwiązanie)? Jaki byłby najlepszy sposób na stworzenie tych płytek?

SAnderka
źródło
2
Czy musi to być rozwiązanie oparte na rastrze (kafelki internetowe)? Czy byłoby dobrze dla rozwiązania wektorowego?
Mapperz
Nie, wcale nie. Uznałem, że będzie to najłatwiejszy sposób (utwórz kafelki, stwórz index.htm lub blok kodu, aby wkleić do istniejącej strony internetowej, skopiuj do katalogu serwera, gotowe). Raz współpracowałem z GMapCreator przy prywatnym projekcie i był to bardzo szybki sposób na załatwienie sprawy.
SAnderka
Ile masz wielokątów w swoim pliku kształtu? Jeśli ma mniej niż 1000, może dobrym pomysłem będzie komentarz @ Mapperza na temat rozwiązania wektorowego. Najprostszym rozwiązaniem jest użycie interfejsu Google Maps API do rysowania wielokątów i tworzenia wyskakujących okien informacyjnych - nie ma potrzeby tworzenia i przechowywania nieinteraktywnych obrazów sąsiadujących. Kafelkowe obrazy mapy najlepiej nadają się do bardzo gęstych informacji, takich jak zdjęcia satelitarne, drogi lub granice spisu powszechnego.
b_dev,

Odpowiedzi:

13

Aby w prosty sposób to zrobić, zaczynając od QGIS, możesz użyć QGIS Mapserver, który może obsługiwać mapy, które projektujesz za pomocą normalnego interfejsu QGIS. Alternatywnie możesz wybrać GeoServer, który jest oparty na Javie i prawdopodobnie łatwiejszy do zainstalowania. Ponieważ oba programy obsługują mapy przy użyciu otwartych standardów, jeśli zaczniesz od jednego i musisz je przełączyć później, nie ma potrzeby zmiany klienta.

Po skonfigurowaniu systemu do obsługi map WMS będziesz potrzebować interfejsu klienta. Polecam OpenLayers jak to jest dość proste do uruchomienia i łatwo rozszerzalna. Bez problemu obsługuje płytki WMS, WMST i OSM.

Ostatecznie może być konieczne przejście do kafelków dla warstw WMS (powiedz, że zaczynasz otrzymywać więcej niż 50-100 żądań na minutę na rozsądnym sprzęcie), a następnie przyjrzyj się umieszczeniu pamięci podręcznej kafelków przed serwerem mapy. Jeśli korzystałeś z GeoServer, możesz użyć GeoWebCache, który jest wbudowany lub możesz użyć TileCache .

Ian Turton
źródło
Mój problem polega na tym, że obecnie pracuję jako niezależny doradca w administracji miejskiej. Lokalny personel IT jest dość zawstydzony i stara się ukryć wszelkiego rodzaju „podejrzane” rzeczy typu open source na swoich komputerach (stoczyłem długą, długą bitwę o QGIS). Dlatego naprawdę chciałbym uniknąć jakiegokolwiek rozwiązania, które należy zainstalować jako „oprogramowanie” w przestrzeni internetowej gminy.
SAnderka
Moim wymarzonym rozwiązaniem byłoby coś, co mogę przygotować samodzielnie i po prostu skopiować do ich przestrzeni internetowej, wstawić kod HTML / JS i gotowe. To, czy są to dane rastrowe, czy wektorowe, tak naprawdę się nie liczy. W każdym razie jestem jedyną osobą, która rozumie różnicę techniczną ... A wszystkim, na kim mi zależy, jest ładna i łatwa prezentacja naszych danych dla naszych obywateli.
SAnderka
1
musisz im tylko wyjaśnić, że mapowanie stron internetowych nie jest czymś, co można łatwo zrobić bez oprogramowania. Pewnie możesz rzucić kilka prostych kafelków na serwer WWW, ale nie będzie dobrze wyglądać na wszystkich skalach, trudno jest je utrzymać i trudno jest dodać funkcje, gdy burmistrz chce więcej.
Ian Turton
Zajrzałem do Geoservera (jako część pakietu Open Geo Suite) i wygląda całkiem nieźle. Zaimportowałem mój plik kształtu, nadałem mu styl, nawet uruchomiłem podgląd na localhost. Ale jak mogę uzyskać te mapy online w mojej przestrzeni internetowej? Czy coś brakuje? Zakładki itp. Oczywiście nie będą działać, ponieważ odnoszą się do mojego lokalnego dysku twardego. Przeszedłem przez wszystkie możliwe samouczki i jak to zrobić, ale ten temat nigdy nie wydaje się omawiany? Czy ktoś może skierować mnie w dobrym kierunku?
SAnderka
umieścisz GeoServer na swoim serwerze internetowym i skopiujesz katalog danych z komputera lokalnego na komputer zdalny.
Ian Turton
8

możliwość wyświetlania skategoryzowanych wielokątów na mapie tematycznej (- jeśli to możliwe, fajnie byłoby uzyskać wyskakujące okienka lub móc uzyskać informacje o atrybutach - ale jest to wysoce opcjonalne)

Wolałbym wykonywać większość pracy (stylizacja itp.) W QGIS

OSM jako mapa bazowa byłaby całkowicie w porządku

Wszystko to można zrobić w QGIS i ogr2layerswtyczce. Przepływ pracy jest prosty:

  1. Styluj swoje dane w QGIS. Użyj starej symboliki, ponieważ miałem problemy z New Symbologyużywaniem ogr2layerswtyczki.

  2. Uruchom ogr2layerswtyczkę i zdefiniuj ustawienia openlayers (takie jak rozmiar mapy, elementy sterujące mapą, mapa bazowa itp.). Spowoduje to utworzenie katalogu zawierającego index.htmli twoje warstwy danych przekonwertowane jako geojsonpliki.

  3. Prześlij katalog na serwer WWW.

Pamiętaj, że dotyczy to tylko prostej mapy internetowej. Aby utworzyć niestandardowe mapy bazowe i inne funkcje mapowania, sprawdź odpowiedzi ianta i Petera.

grzywka
źródło
1
Prosta mapa internetowa oznacza, że ​​można ją powiększać i przewijać, tak? To brzmi jak coś, na co powinienem zwrócić uwagę po powrocie do mojego biura.
SAnderka
6

Inną opcją jest TileMill - obsługuje kafelkowanie, interakcję i kartografię w łatwym w obsłudze interfejsie internetowym, w tym definicje stylów w języku proto-CSS o nazwie cascadenik . Za pomocą TileMill możesz wypakować pliki mbtiles , które można wykorzystać z czymś takim jak TileStream . To powiedziawszy, wciąż istnieją pewne sztuczki z wdrażaniem mapowanych wyjść, ale dałoby to dobrą platformę do generowania płytek wysokiej jakości.

scw
źródło
Obejrzyj ich film demonstracyjny na pierwszej stronie, robi wrażenie!
joshdoe
6

Postanowiłem podać informacje, w jaki sposób w końcu wybrałem usługę map kafelkowych. Czysty JavaScript i GeoJSON nie były rozwiązaniem, ponieważ muszę obsługiwać około 40 000 wielokątów i 33 000 punktów. Więc poszedłem na płytki. Aha, i nadal nie mam dostępu do serwera root, więc nie mogę skonfigurować GeoServera ani czegoś podobnego (w tym momencie nie byłby to wykonalny finansowo dla jednego klienta)

Po kilku badaniach i czytaniu w końcu zdecydowałem się na OpenLayers (po kilku pokazach z GMaps). Świetna książka Erica Hazzarda „OpenLayers 2.10” (Packt Publishing, 2011) naprawdę bardzo mi pomogła, ponieważ zawiera także podstawowe informacje o JavaScript i porady dotyczące debugowania.

Oczywiście wszystkie moje dane wektorowe pracowałem w QGIS, to zdecydowanie sposób, aby wybrać małego freelancera, takiego jak ja (znam też sporo materiałów ArcGIS z uniwersytetu, ale QGIS oferuje wszystko, czego do tej pory potrzebowałem).

Stylizowanie mapy i tworzenie kafelków było większym wyzwaniem. Najpierw poszedłem za „ GMapCreatorem ” firmy CASA, ale nakładanie warstw wielu plików kształtów okazało się żmudne (muszę podać dane punktowe dotyczące wielokątów, a następnie granicę miejską obejmującą wszystko). Jest to absolutnie możliwe, aby to zrobić w GMapsCreator (i zrobiłem to na etapie prezentacji), ale zajmuje to 3 pełne cykle renderowania (najpierw tworzysz kafelki, a następnie istniejące kafelki są „zastępowane” późniejszymi funkcjami - renderowanie we właściwej kolejności jest ważne!), a menu stylizacji są nieco nieporęczne i mylące. Zapisanie mapy i jej późniejsza edycja to również skomplikowany problem.

TileMill wydawał się bardzo obiecujący, szczególnie w stylu CSS, więc przyjrzałem się temu. Niestety jest to tylko Mac lub Linux, więc może to odstraszyć niektórych ludzi. Naprawdę podobało mi się to, co zobaczyłem, więc skonfigurowałem partycję Ubuntu na moim dysku twardym, pobrałem ją i zaprojektowałem swoje mapy. Dokumentacja dotycząca składni stylizacji jest czasem trochę rzadka, ale oglądanie ich filmu demonstracyjnego (link na głównej stronie) odpowiada prawie na wszystko. Możliwe jest robienie interesujących rzeczy ze stylami zagnieżdżonymi i / lub warunkowymi, a podstawowa znajomość CSS powinna naprawdę zaprowadzić cię tam, gdzie chcesz.

Na koniec TileMill renderuje ładny, pojedynczy plik * .mbtiles. Nie sądzę, że istnieje sposób na bezpośrednie wyświetlenie ich w OpenLayers (przynajmniej nie mogłem znaleźć?), Więc nadszedł czas, aby użyć innego narzędzia: mbutil . To narzędzie „rozpakowuje” plik mbtiles do zwykłej struktury folderów zawierającej pngs moich danych na wybranych poziomach powiększenia.

W końcu przesłałem wszystkie te pliki na mój serwer FTP, zrobiłem trochę czytania w OL, aby uruchomić moją mapę internetową (dodajesz utworzone kafelki jako warstwę TMS, ale odgadnięcie właściwego źródłowego adresu URL i nazwy warstwy zajęło trochę czasu i googling), a potem spędziłem kilka godzin na majstrowaniu przy podstawowych problemach HTML / CSS. Chciałem mieć mapę o szerokości i wysokości 100% z ruchomą legendą, zgodnie z wytycznymi tożsamości moich „korporacyjnych” (jak wspomniano gminy).

Aha i do tej pory używam Map Google jako warstw podstawowych, ale może to wkrótce zostać zastąpione niestandardowymi zdjęciami lotniczymi obsługiwanymi przez WMS (nie dostarczone przeze mnie, ale ankieta stanu i administracja geodanymi).

Mam nadzieję, że nie zapomniałem nic ważnego, ale jeśli to zrobię, nie krępuj się zapytać! Od czasu do czasu sprawdzę ten wątek.

SAnderka
źródło
Tilemill jest teraz dostępny również dla systemu Windows. Na liście dyskusyjnej Openlayers Users znajduje się również stosunkowo nowy wątek na temat używania mbtiles jako źródła danych (jeszcze nie próbowałem).
matt wilkie
Ach, dzięki, dobrze wiedzieć. Zdecydowanie trzeba to wypróbować, to było trochę denerwujące, aby przełączać się między Win7 a Ubuntu przez cały czas.
SAnderka
3

Jeśli masz mniej niż 1000 wielokątów, rozważ komentarz @ Mapperz dotyczący rozwiązania wektorowego - nie musisz tworzyć i przechowywać nieinteraktywnych obrazów sąsiadujących, jeśli masz tylko kilka wielokątów.

Obrazy kafelkowe są optymalne dla bardzo gęstych informacji, takich jak zdjęcia satelitarne, drogi lub 50 000 wielokątów spisu ludności.

Najprostszym rozwiązaniem dla niewielkiej liczby wielokątów jest konwersja pliku shapefile do pliku KML i przesłanie go do Moich map Google.

Jeśli kodujesz w JavaScript, najbardziej interaktywnym rozwiązaniem jest interfejs API Map Google (lub OpenLayers) do rysowania wielokątów i tworzenia wyskakujących okien informacyjnych. Możesz zacząć od przekształcenia wielokątów pliku kształtu, używając biblioteki GDAL, w plik geoJSON (sposób przechowywania informacji geograficznych w języku JavaScript).

Lub jeśli wybrałeś trasę kafelków, możesz przechowywać kafelki w Amazonach lub w chmurze Google bez kłopotów wewnętrznych.

Wpis na blogu tematycznego mapowania zawiera ładne podsumowanie zalet podejścia wektorowego w stosunku do rozważanego podejścia do kafelków.

Powodzenia!

b_dev
źródło
Odkryłem, że około 500 punktów traktowanych jako wektor na pojedynczym widoku ma tendencję do spowalniania rzeczy do pełzania. Układamy wszystko ponad 500 punktów.
Michalis Avraam
1

Współczuję ci, kolego, ponieważ powoli doszedłem do tego samego wniosku. Po opanowaniu QGIS wypróbowałem quantamnik i mapnik. Ale chociaż będzie on portował styl qgis, jest to podróż w jedną stronę, a systemy stylizacji nie są 1 na 1, dlatego i tak musisz nauczyć się stylu mapnik. Zgaduję, że to samo dotyczy funkcji eksportu qgis mapserver. Wydaje się, że nie ma „łatwego sposobu” na podniesienie umiejętności na serwerze map, wystarczy go podnieść i dać dużo czasu.

Mapnik, geoserver, mapserver, wydaje się, że są tam wielbiciele każdego, ale mapserver wydaje się być środkową drogą.

Powiedziawszy, że istnieje jeden skrót, który znalazłem, a mianowicie qgis, ma opcję wiersza polecenia, aby zrasteryzować mapę qgis do rozdzielczości i granic twojego wyboru, i tworzy plik świata. Dzięki temu możesz używać maptiler lub gdal2tiles do układania pojedynczych warstw. Oczywiście nie byłoby dobre dla 20 poziomów powiększenia, ani nie wiem, jaki jest limit maksymalnego rozmiaru png.

Piotr
źródło
2
QGIS MapServer różni się od MapServer.
Ian Turton
2
Ze względu na ten potencjał zamieszania należy go nazwać QGIS Server.
podmrok