Як створити просту передню частину для бази даних PostGIS?


21

Моя організація збирає багато даних щодо моніторингу навколишнього середовища (потік потоку, хімія води тощо), більшість з яких зараз зберігається в Excel. Я хотів би все отримати в базу даних - можливо, PostGIS - але мені потрібні дані, щоб вони були доступними людям, які не знають принципів бази даних (немає SQL чи нічого подібного).

Мені б хотілося, щоб у моїй базі даних було якесь просте переднє місце, де користувач вибирає станцію моніторингу, що цікавить, змінний тип (наприклад, концентрація потоку нітратів) та часовий інтервал. Потім база даних повертає запитувані дані у форматі csv, які користувач може завантажити на свій комп'ютер. В ідеальному світі передній край показав би карту, на яку можна натиснути всі моніторингові станції, але якщо це простіше, тоді спадному списку доступних сайтів було б непогано почати. Я думаю, що цей фронт, мабуть, буде веб-сайтом, але цього не повинно бути.

Наскільки це важко, будь ласка, і які мої різні варіанти? Я жодним чином не є експертом з обміну даними, але в мене є міцний досвід роботи в GIS Desktop, і я радий писати прості сценарії Python та грати з персональними базами даних Geodet PostGIS, SpatiaLite та ESRI. Я ніколи не займався будь-якою веб-розробкою чи веб-ГІС, але я прагну вчитися.

Частина вчора я провела, вивчаючи деякі чудові підручники OpenGeo . Такий підхід виглядає багатообіцяючим, і я, принаймні, зараз бачу, як відобразити мої дані на веб-сайті. Що менш очевидно для мене, це те, як я дозволяю користувачеві запитувати базу даних і отримувати результати.

Моє запитання: Яку структуру програмного забезпечення я повинен думати для такого проекту? напр

PostGIS + GeoServer + Something else?

Які ще існують варіанти, які я повинен дослідити?

Спочатку було б краще просте, але функціональне рішення: якщо я можу скласти базовий прототип, я можу використовувати його для обгрунтування витрачання більше часу на вивчення того, як робити речі «правильно». Відкритий код також є вимогою, оскільки я не маю на це жодного бюджету, поки не зможу довести деякі переваги.

Дуже дякую!


2
Якщо ви не залишите карту, все це можна зробити лише Apache & PHP. Вам просто доведеться створити одну форму введення для скрипту PHP, який отримує дані з PostGIS. (Ви можете замінити PHP Python.) ... Але тоді це не буде питанням для GIS.SE
underdark

Дуже дякую всім, хто відгукнувся! Це всі корисні відповіді, і ви дали мені багато речей для подальшого контролю. Я хотів би "прийняти" їх усіх, але я наділив бали @canisrufus, оскільки я вважав його останній абзац дуже корисним, і я раніше не стикався з web.py. GeoDango теж виглядає приголомшливо. Ура!
JamesS

@jamesS Я збирався розширити свій останній абзац, але це почало здаватися невиправдано поза темою. Якщо у вас є питання або ви хочете довший монолог про те, як налаштуватись, ви можете зателефонувати мені на чат тут.
canisrufus

@JamesS Будь-який прогрес у цьому? Працюючи над тим же топісом, я щойно почав розробляти проект Джанго
Лука Мояна

Привіт @Luca Moiana. В якості прототипу я дотримувався рекомендацій у прийнятій нижче відповіді, використовуючи web.py, Apache та PostGIS (але в кінцевому підсумку мій веб-сайт не містив карти). Через кілька років ми прийняли гідрологічну інформаційну систему CUAHSI , що чудово. Потрібно трохи налаштувати, але пропонує широкий спектр інструментів для зберігання, пошуку, дослідження, аналізу та візуалізації даних про навколишнє середовище.
JamesS

Відповіді:


13

Якщо ви вже знаєте свій шлях навколо Python та SQL, створити веб-сайт за допомогою веб-фрейма python буде не надто складно. Дві прості - cherry.py та web.py - приходять на думку. Я думаю, що вивчити свій шлях навколо реляційного об’єкта Django може бути більше роботи, ніж варто.

У Python є бібліотека під назвою psycopg2 (http://initd.org/psycopg/ та підручник: http://wiki.postgresql.org/wiki/Psycopg2_Tutorial ), яка дозволяє легко запускати запити на PostGRESQL / PostGIS. Він також має модуль CSV (http://docs.python.org/library/csv.html), який зробить створення вашого CSV із зазначеного запиту легким вітром.

Як казали інші люди, створення карти на передній частині додає нитки складності. Вам потрібно буде щось на зразок OpenLayers для відображення карт, а також щось на зразок MapServer або GeoServer для створення зображень карт із вашої бази даних (або інших джерел даних). Це, мабуть, було б краще як другий крок.

Наразі "все", здається, вам потрібно, - це одна веб-сторінка: форма, яка дозволяє вибрати параметри параметрів запитів. Вони натискають «подати», параметри запиту надсилаються на сервер (Apache був би хорошим вибором), який потім запускає ваш сценарій, який запитує базу даних, створює відповідний файл CSV і повертає його в браузер. Легко як py;)


2
Вам не потрібен MapServer / GeoServer для створення зображень. Ви можете просто отримати дані безпосередньо з PostGIS і відобразити їх як векторні дані на своїй карті. Однак, залежно від складності ваших даних, ви можете передати значну кількість даних. Це залежить від ситуації. Також показ їх як векторних даних дає можливість натиснути на об’єкт, щоб показати / редагувати його дані.
Mr_Chimp

@mr_chimp О, це хороший момент. Моє занепокоєння стосувалося фонового шару, але можна просто використовувати Google Maps, OSM або ін. Насправді я схильний вважати, що векторний шар - це як правило приємніше рішення (для користувача), але, як ви зазначаєте, є обмеження. І звичайно, найпростішим способом передати вектори було б, щоб щось на зразок MapServer або GeoServer обслуговувало їх;)
canisrufus

Як завжди це справа використання правильного інструменту для роботи. Оскільки у JamesS вже є база даних PostGIS, він може просто захопити дані звідти. Якщо я щось не забуваю, налаштування MapServer / що завгодно було б зайвим кроком (хоча, звичайно, це був би найшвидший спосіб).
Mr_Chimp

8

GeoDjango

Це досить просто в налаштуванні та отримує деякі основні функціональні можливості. Це Python, тож принаймні ви знайомі з мовою. Це може бути зайвим для ваших потреб. Але, якщо ви хочете колись розробити сайт, у вас є зріла основа, на якій можна будувати.


5

Якщо ви не хочете / не повинні створити карту. Все, що вам потрібно, це веб-сервер і мова програмування (я віддаю перевагу Apache, тому що його просто використовувати і налаштовувати, але є й інші варіанти), а потім Postgres з PostGIS або іншою базою даних.

Якщо ваші файли excel відформатовані, імпорт даних у базу даних повинен бути простим. Ви можете написати сценарій, який може генерувати оператори INSERT. Запитання, які ви описуєте, звучать так, як вони також керовані.

Якщо / коли ви хочете зробити карту частини, Apache, GeoServer і OpenLayers було б простим і безкоштовним рішенням. GeoServer (як відомо) може легко використовувати PostGIS для WMS або іншого вихідного формату. Все, що вам потрібно зробити - це додати магазин, який підключається до PostGIS, а потім додати шари з таблиць у PostGIS.

Іншими безкоштовними засобами картографування, на які можна подивитися, є Mapserver та MapGuide. MapGuide Open Source робить дуже цікаві речі, але їх складніше, а його документація трохи відстає.

У MySQL також є просторове розширення, але воно не має стільки просторових функцій та функцій, які виконує PostGIS.

Якщо ви знайомі з python, я би подивився на GeoDjango ... Я особисто про це не знаю багато, але чув хороші речі


4

Ви можете знайти огляд проблем дизайну та розробки програм веб-картографування, а також повністю задокументований вихідний код екологічного веб-додатка для картографування на основі Карт Google та просторово-часової бази даних PostgreSQL / PostGIS, в моїй відносно недавній магістерській дисертації з комп’ютерних наук: " Розробка та розробка прототипу, що стосується управління просторово-часовими екологічними векторними даними, аналізом та доставкою за допомогою технології Open Source. Загальні рамки та тематичні дослідження, орієнтовані на управління підземними водами в прибережній області "

Дисертацію можна завантажити з http://www.giscience.it/it/pdf/DissertationMscComputerScience_CrestazEzio_Supervisors.pdf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.