Jestem użytkownikiem ArcGIS Desktop, który po raz pierwszy wkracza w świat mapowania stron internetowych. Zgodnie z radą, którą znalazłem tutaj na GIS.SE, zacząłem od bezpłatnych samouczków od OpenGeo .
Jednak zacząłem zdawać sobie sprawę, że większość demonstracji i przykładów dotyczyła danych wektorowych. Mój główny projekt polega na wyświetleniu 300 klatek serii czasowej 5000 x 5000 pikseli rastrów. Na moim komputerze stacjonarnym są one przechowywane w jednym 16-bitowym pliku BIP o całkowitej liczbie 5000 x 5000 x 300, który wynosi około 8 GB. Moim celem jest możliwość kliknięcia komórki (pojedynczego rastra w szeregu czasowym) i wyświetlenia wykresu pokazującego wartości tego piksela w 300-elementowym szeregu czasowym. Dane rastrowe używane dla każdego wykresu szeregów czasowych muszą być przechowywane bezstratnie, chociaż klikane mapy nakładek mogą być stratnymi pamięciami podręcznymi.
Czy jest coś, co może być bardziej odpowiednie dla tego projektu (dla początkującego programisty internetowego GIS) niż OpenGeo? A może powinienem kontynuować konfigurację?
Dla porównania mam doświadczenie w programowaniu w języku Python, Java i PHP. Nie mam dużego doświadczenia z SQL. Jest to projekt otwarty, więc w razie potrzeby mam dużo czasu na naukę nowych języków. Mam już serwer WWW, chociaż prawdopodobnie będę musiał zmienić hosty, ponieważ GoDaddy nie obsługuje PostgreSQL bez uzyskania VPS.
Dzięki za pomoc!
EDYCJA: (13 stycznia) Wciąż szukam informacji o tym, jak najlepiej przechowywać trójwymiarowy 16-bitowy raster BIP w liczbach całkowitych i móc skutecznie wyszukiwać pojedynczą „kolumnę” danych w osi Z. Nie chcę konwertować go do formatu 32-bitowego (ponieważ podwoiłoby to jego rozmiar pliku w porównaniu z obecną 16-bitową formą).
Odpowiedzi:
Zapytanie o taki raster nie powinno tak naprawdę stanowić dużego problemu. Możesz odczytywać dane binarne bezpośrednio przy użyciu wszystkich języków programu, a dostęp jest szybki. Upewnij się tylko, że przechowujesz swoje dane w formacie pliku, który zawiera wszystkie metadane w osobnym pliku. BIP jest takim formatem
np. w php, przy założeniu, że plik ma porządek główny rzędu (w przeciwnym razie przełącza xiy), gdzie $ x i $ y pozycja w twojej siatce (licząc od 0), $ nx, $ ny i $ nz liczba pikseli w każdy wymiar i $ nb liczba bajtów na komórkę siatki:
Tylko upewnij się, że masz dostęp do prawego piksela: czy liczenie zaczyna się od lewego górnego rogu, czy nie, ...
Kilka dodatkowych informacji: po odczytaniu danych należy przekonwertować je na zmiennoprzecinkowe. Na przykład:
Jeśli Twój host nie obsługuje przesyłania dużych plików, możesz np. Podzielić plik bip na np. 8 plików bip.
Więcej informacji o tym, jak zrobiłbym resztę strony: ponieważ twoje dane są statyczne, możesz wygenerować mały przeglądarkę map za pomocą gdal2tiles i openlayers. http://www.gdal.org/gdal2tiles.html W rzeczywistości, ponieważ powiedziałeś: „Naprawdę nie potrzebuję skalowalności - ten projekt ma głównie umożliwić kilku innym badaczom łatwiejszy dostęp do moich danych niż wysyłanie 8 GB pliku i ładowanie go w ENVI. ”Możesz zrobić nawet bez użycia przybornika webgis: pozwól użytkownikom kliknąć obraz i złapać współrzędne: http://www.emanueleferonato.com/2006/09/02/click -image-and-get-coordinates-with-javascript /
(chociaż powinieneś znaleźć sposób na ładną prezentację swojego obrazu 5000x5000)
źródło
Wygląda to na trzy osobne kwestie: jedną dotyczącą infrastruktury, jedną dotyczącą architektury i jedną dotyczącą obsługi zdarzeń. Przedstawię jedno możliwe podejście, ale moja odpowiedź jest z konieczności ogólna.
Infrastruktura
Polecam korzystanie z usługi hostingowej VPS, takiej jak Linode (www.linode.com) dla twojego serwera. Zapewnia to pełny (tzn. Root) dostęp do profesjonalnie utrzymywanego serwera - bez obaw o brak zasilania lub utratę połączenia z Internetem.
Architektura
Jest tu tak wiele opcji, że może być naprawdę przytłaczająca. Jako przykład uruchamiam kilka systemów z GeoServer i OpenLayers. GeoServer jest obsługiwany przez Tomcat 7. Interfejs OpenLayers / jQuery jest obsługiwany przez Apache2. Możesz dołączyć Postgres / PostGIS do przechowywania danych wektorowych, ale nie jest to dobra opcja dla danych rastrowych. Możesz również skonfigurować system Python za pomocą Django lub nawet web.py (http://webpy.org/) dla raczej prostego kontrolera. GeoServer pozwala przechowywać dane rastrowe w następujących formatach:
Obsługa zdarzeń
Gdy użytkownik kliknie mapę, w tym momencie chcesz wyświetlić wykres szeregów czasowych danych pola. Najpierw skonfiguruj kontroler, który może być napisany w Pythonie lub Javie, który nasłuchuje żądań adresów URL z szerokością i długością geograficzną. Ten kontroler zwraca albo statyczny obraz renderowany na serwerze, albo dane json, które klient (jQuery) może przekształcić w wykres.
Następnie, aby pobrać dane XY na mapę, możesz użyć funkcji takiej jak ta (patrz http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.html ):
Mam nadzieję że to pomogło.
źródło
Jeśli dobrze zrozumiem twoje pytanie, utworzę usługę WMS na czas, na przykład za pomocą MapServer .
W ten sposób będzie łatwo wyświetlić prawidłowy raster dla każdej daty i godziny (z żądaniem GetMap) i zażądać wartości dla komórki w danym zakresie dat (z żądaniem GetFeatureInfo).
źródło