Я - пользователь ArcGIS Desktop, который впервые входит в мир веб-картографии. Следуя советам, которые я нашел здесь на GIS.SE, я начал с бесплатных руководств от OpenGeo .
Однако я начал понимать, что большинство демонстраций и примеров были ориентированы на векторные данные. Мой основной проект связан с отображением временного ряда 300 кадров с растрами 5000 x 5000 пикселей. На моем настольном компьютере они хранятся в одном 16-разрядном целочисленном двоичном файле BIP размером 5000x5000x300, который составляет около 8 ГБ. Моя цель состоит в том, чтобы иметь возможность щелкнуть ячейку (одного растра во временном ряду) и получить всплывающий график, показывающий значения этого пикселя во временном ряду из 300 элементов. Растровые данные, используемые для каждого графика временных рядов, должны храниться без потерь, хотя наложенные карты, по которым щелкают, могут быть кэшами с потерями.
Есть ли что-нибудь, что может лучше подходить для этого проекта (для начинающего веб-разработчика ГИС), чем OpenGeo? Или мне просто продолжать эту настройку?
Для справки, у меня есть опыт программирования на Python, Java и PHP. У меня нет большого опыта работы с SQL. Это открытый проект, поэтому у меня есть достаточно времени для изучения новых языков, если это будет необходимо. У меня уже есть веб-сервер, хотя мне, вероятно, придется переключать хосты, потому что GoDaddy, похоже, не поддерживает PostgreSQL без получения VPS.
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: (13 января) Я все еще ищу информацию о том, как лучше всего хранить трехмерный 16-битный целочисленный растр BIP и иметь возможность эффективно запрашивать один «столбец» данных по оси z. Я не хочу преобразовывать его в 32-битный формат (потому что это удвоило бы размер его файла по сравнению с его текущей 16-битной формой).
Ответы:
Запросы к такому растру не должны создавать больших проблем. Вы можете читать двоичные данные напрямую, используя все языки программы, и доступ к ним быстрый. Просто убедитесь, что вы храните свои данные в формате файла, который содержит все метаданные в отдельном файле. БИП это такой формат
например, в php, предполагая, что файл имеет основной порядок строк (в противном случае переключите x и y), с $ x и $ y позицией в вашей сетке (считая от 0), $ nx, $ ny и $ nz количеством пикселей в каждое измерение и $ nb число байтов на ячейку сетки:
Просто убедитесь, что вы получаете доступ к правильному пикселю: отсчет начинается с левого верхнего угла или нет, ...
Некоторая дополнительная информация: после прочтения данных вы должны преобразовать их в числа с плавающей точкой. Например:
Если ваш хост не поддерживает загрузку больших файлов, вы можете, например, разделить ваш bip-файл, например, на 8 bip-файлов.
Еще немного информации о том, как я буду делать остальную часть веб-сайта: поскольку ваши данные статичны, вы можете создать небольшой просмотрщик карт, используя gdal2tiles и openlayers. http://www.gdal.org/gdal2tiles.html Фактически, поскольку вы говорите, что «мне действительно не нужна масштабируемость - этот проект в основном позволяет нескольким коллегам-исследователям иметь более простой доступ к моим данным, чем отправка 8 ГБ файла и загрузите его в ENVI. "Вы могли бы даже обойтись без использования панели инструментов webgis: просто позвольте своим пользователям нажимать на изображение и узнавать координаты: http://www.emanueleferonato.com/2006/09/02/click -image-и-получить координаты-с-JavaScript /
(хотя вы должны найти способ красиво представить изображение 5000x5000)
источник
Это похоже на три отдельных вопроса: один из инфраструктуры, один из архитектуры и один из обработки событий. Я изложу один из возможных подходов, но мой ответ обязательно будет общим.
инфраструктура
Я рекомендую использовать VPS-хостинг, такой как Linode (www.linode.com) для вашего сервера. Это дает вам полный (т.е. корневой) доступ к профессионально обслуживаемому серверу - не нужно беспокоиться о отключении питания или потере подключения к Интернету.
Архитектура
Здесь так много вариантов, что это может быть действительно ошеломляющим. В качестве примера я запускаю несколько систем с GeoServer и OpenLayers. GeoServer обслуживается Tomcat 7. Внешний интерфейс OpenLayers / jQuery обслуживается Apache2. Вы можете включить Postgres / PostGIS для хранения векторных данных, но это не очень хороший вариант для растровых данных. Вы также можете настроить систему Python, используя Django или даже web.py (http://webpy.org/) для довольно простого контроллера. GeoServer позволяет хранить растровые данные в следующих форматах:
Обработка событий
Когда пользователь нажимает на карту, вы хотите открыть график временных рядов данных поля в этой точке. Сначала настройте контроллер, который может быть написан на Python или Java, который прослушивает URL-запросы с широтой и долготой. Этот контроллер возвращает либо статическое изображение, отображаемое на сервере, либо данные json, которые клиент (jQuery) может превратить в график.
Затем, чтобы получить данные XY на карте, вы можете использовать такую функцию (см. Http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.html ):
Надеюсь, это поможет.
источник
Если я правильно понимаю ваш вопрос, я бы создал службу WMS времени, например, с MapServer .
Таким образом будет легко отобразить правильный растр для каждой даты и времени (с помощью запроса GetMap) и запросить значения для ячейки в заданном диапазоне времени / даты (с помощью запроса GetFeatureInfo).
источник