Разработка геоприложений на языке Python
Покупка
Издательство:
ДМК Пресс
Автор:
Вестра Эрик
Перевод:
Логунов А. В.
Год издания: 2017
Кол-во страниц: 446
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-437-3
Артикул: 712481.01.99
Доступ онлайн
В корзину
Написание геопространственных программ предполагает решение таких задач, как группирование данных по географическому положению, хранение и анализ больших массивов информации, выполнение сложных расчетов и построение красочных интерактивных карт. Книга предоставляет обзор главных геопространственных понятий, источников геоданных и наборов инструментов для геообработки. Рассмотрены приемы хранения и доступа к пространственным данным. Показано создание собственного интерфейса со скользящей картой в рамках веб-приложения. Подробно описано создание редактора геоданных на основе географического модуля GeoDjango для веб-платформы Djaogo. Издание адресовано опытным разработчикам на языке Python, которые хотели бы освоить концепции геопрограммирования, методы получения и работы с геоданными, решать пространственные задачи и конструировать сложные картографические приложения.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
- ВО - Магистратура
- 05.04.03: Картография и геоинформатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Эрик Вестра Разработка геоприложений на языке Python
Erik Westra Python Geospatial Development Develop sophisticated mapping applications from scratch using Python 3 tools for geospatial development Third Edition BIRMINGHAM – MUMBAI
Эрик Вестра Разработка геоприложений на языке Python Разработка сложных картографических приложений с нуля с использованием геоинструментальных средств Python 3 Третье издание Москва, 2017
УДК 528.92:004.9Python ББК 26.17с В38 Вестра Э. В38 Разработка геоприложений на языке Python / пер. с англ. А. В. Логунова. – М.: ДМК Пресс, 2017. – 446 с.: ил. ISBN 978-5-97060-437-3 Написание геопространственных программ предполагает решение таких задач, как группирование данных по географическому положению, хранение и анализ больших массивов информации, выполнение сложных расчетов и построение красочных интерактивных карт. Книга предоставляет обзор главных геопространственных понятий, источников геоданных и наборов инструментов для геообработки. Рассмотрены приемы хранения и доступа к пространственным данным. Показано создание собственного интерфейса со скользящей картой в рамках веб-приложения. Подробно описано создание редактора геоданных на основе географического модуля GeoDjango для веб-платформы Django. Издание адресовано опытным разработчикам на языке Python, которые хотели бы освоить концепции геопрограммирования, методы получения и работы с геоданными, решать пространственные задачи и конструировать сложные картографические приложения. УДК 528.92:004.9Python ББК 26.17с Copyright © Packt Publishing 2016. First published in the English language under the title ‘Python Geospatial Development – Third Edition – (9781785288937)’ Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-78528-893-7 (анг.) Copyright © 2016 Packt Publishing ISBN 978-5-97060-437-3 (рус.) © Оформление, издание, перевод, ДМК Пресс, 2017
Содержание Об авторе ...................................................................... 11 О рецензенте ................................................................. 12 Предисловие ................................................................. 13 Глава 1. Разработка геопрограмм на Python ........................ 27 Python ......................................................................................................................................................27 Python 3 ..............................................................................................................................................29 Разработка геопространственных программ ..............................................................................30 Сферы применения геоприложений .............................................................................................33 Анализ геоданных ...........................................................................................................................33 Визуализация геоданных .............................................................................................................35 Создание геопространственных мэшапов ..............................................................................37 Последние достижения ......................................................................................................................38 Заключение ............................................................................................................................................41 Глава 2. Геоинформационные системы ............................... 42 Ключевые понятия ГИС ....................................................................................................................42 Географическое положение .........................................................................................................42 Расстояние.........................................................................................................................................46 Единицы измерения.......................................................................................................................48 Картографические проекции ......................................................................................................50 Системы координат ........................................................................................................................56 Геодезические датумы ...................................................................................................................59 Географические фигуры ..............................................................................................................60 Форматы данных ГИС .......................................................................................................................62 Работа с данными ГИС вручную ....................................................................................................64 Получение данных ..........................................................................................................................65 Инсталляция библиотеки GDAL ..............................................................................................65 Заключение ............................................................................................................................................74 Глава 3. Библиотеки Python для геопрограммирования ......... 75 Чтение и запись геоданных ..............................................................................................................75 Пакет GDAL/OGR .........................................................................................................................75 Инсталляция пакета GDAL/OGR ............................................................................................76 Концепция библиотеки GDAL ..................................................................................................76 Пример использования .................................................................................................................82 Концепция библиотеки OGR .....................................................................................................85
Содержание Пример использования .................................................................................................................86 Документация по GDAL/OGR ..................................................................................................88 Работа с проекциями ..........................................................................................................................89 Библиотека pyproj ..........................................................................................................................89 Инсталляция библиотеки ............................................................................................................89 Концепция библиотеки ................................................................................................................91 Пример использования .................................................................................................................93 Документация ..................................................................................................................................94 Геоанализ и геообработка .................................................................................................................95 Библиотека Shapely ........................................................................................................................95 Инсталляция библиотеки ............................................................................................................95 Концепция библиотеки ................................................................................................................97 Пример использования .................................................................................................................99 Документация ...............................................................................................................................100 Визуализация геоданных ...............................................................................................................101 Библиотека Mapnik .....................................................................................................................101 Инсталляция библиотеки .........................................................................................................102 Концепция библиотеки .............................................................................................................103 Пример использования ..............................................................................................................105 Документация ...............................................................................................................................107 Заключение .........................................................................................................................................107 Глава 4. Источники геоданных ......................................... 109 Источники геоданных в векторном формате ..........................................................................110 Геоданные проекта OpenStreetMap .......................................................................................110 База данных TIGER ....................................................................................................................113 Геоданные веб-сайта Natural Earth ........................................................................................117 Географическая база данных GSHHG ..................................................................................119 Набор данных границ стран мира ..........................................................................................121 Источники геоданных в растровом формате ...........................................................................122 Геоданные проекта Landsat .......................................................................................................123 Геоданные веб-сайта Natural Earth ........................................................................................127 Геоданные проекта GLOBE .....................................................................................................130 Национальный набор данных рельефа ................................................................................132 Источники геоданных других типов ..........................................................................................136 База данных сервера географических названий GEOnet ..............................................136 Данные информационной системы географических названий США.......................138 Выбор источника геоданных .........................................................................................................140 Заключение .........................................................................................................................................140 Глава 5. Решение задач с геоданными на Python ................. 142 Необходимые условия .....................................................................................................................142 Общие задачи с использованием геоданных ...........................................................................143
Содержание 7 Задача: вычисление ограничительной рамки для всех стран мира .....................................................................................................................143 Задача: вычисление границы между Таиландом и Мьянмой .......................................145 Задача: анализ высот на основе цифровой карты местности .......................................147 Смена датумов и проекций ............................................................................................................153 Задача: смена проекции для совмещения файлов фигур с географическими и UTM-координатами ................................................................................................................153 Задача: перевод из одного датума в другой для совмещения свежих данных TIGER со старыми ......................................................................................................................157 Выполнение геопространственных расчетов ..........................................................................160 Задача: идентификация национальных парков внутри и в окрестностях городских агломераций..............................................................................................................161 Конвертирование и стандартизация единиц геометрии и расстояния ..........................166 Задача: вычисление длины границы между Тайландом и Мьянмой .........................166 Задача: нахождение точки в 132.7 км к западу от г. Шошоун, шт. Калифорния .......173 Упражнения ........................................................................................................................................174 Заключение .........................................................................................................................................176 Глава 6. Пространственные базы данных ........................... 177 СУБД с поддержкой пространственных данных ...................................................................177 Пространственные индексы ..........................................................................................................178 Знакомство с PostGIS......................................................................................................................181 Инсталляция СУБД PostgreSQL ...........................................................................................183 Инсталляция расширения PostGIS .......................................................................................184 Установка адаптера psycopg2 ...................................................................................................185 Настройка СУБД ..............................................................................................................................186 Создание учетной записи пользователя Postgres .............................................................186 Создание базы данных ...............................................................................................................187 Разрешение доступа к базе данных .......................................................................................187 Включить поддержку пространственных данных ...........................................................187 Использование расширения PostGIS ........................................................................................187 Документация по PostGIS ........................................................................................................191 Продвинутый функционал PostGIS .....................................................................................191 Наиболее успешные практические приемы .............................................................................192 Рекомендуем: используйте базу данных для отслеживания пространственных привязок ....................................................................................................192 Рекомендуем: используйте для данных приемлемую пространственную привязку ..........................................................................................................................................194 Рекомендуем: избегайте динамических трансформаций внутри запроса ...............196 Рекомендуем: не создавайте геометрии внутри запроса ................................................197 Рекомендуем: грамотно используйте пространственные индексы ............................198 Рекомендуем: учитывайте пределы оптимизатора запросов своей СУБД .............198 Заключение .........................................................................................................................................201
Содержание Глава 7. Генерирование карт при помощи Python и библиотеки Mapnik ...................................................... 202 Введение в библиотеку Mapnik ....................................................................................................202 Создание образца карты .................................................................................................................209 Понятия библиотеки Mapnik ........................................................................................................214 Источники данных ......................................................................................................................214 Правила, фильтры и стили .......................................................................................................217 Символизаторы ............................................................................................................................220 Карты и слои ..................................................................................................................................229 Визуализация карты ...................................................................................................................230 Заключение .........................................................................................................................................232 Глава 8. Работа с пространственными данными .................. 234 Описание приложения DISTAL ..................................................................................................234 Проектирование и конструирование базы данных ...............................................................238 Скачивание и импорт данных .......................................................................................................242 Набор данных границ стран мира ..........................................................................................242 Географическая база данных береговых линий GSHHG ...............................................243 Географические названия США .............................................................................................244 Географические названия остальных мест ..........................................................................246 Реализация приложения DISTAL ...............................................................................................249 Сценарий «выбрать страну» ....................................................................................................251 Сценарий «выбрать область» .................................................................................................253 Сценарий «показать результаты» .........................................................................................263 Использование приложения DISTAL ..................................................................................268 Заключение .........................................................................................................................................269 Глава 9. Совершенствование приложения DISTAL ................ 270 Обработка линии антимеридиана ...............................................................................................270 Решение проблемы масштабирования ......................................................................................276 Производительность ........................................................................................................................280 Поиск проблемы ...........................................................................................................................280 Улучшение производительности ............................................................................................282 Использование сегментов береговых линий ......................................................................291 Анализ повышения производительности ............................................................................292 Заключение .........................................................................................................................................293 Глава 10. Инструменты для разработки геопространственных веб-приложений ............................. 294 Инструментарий и методика для геопространственных веб-приложений ..................294 Веб-приложения ..........................................................................................................................295 Веб-службы ....................................................................................................................................300
Содержание 9 Стэк «скользящей карты».........................................................................................................305 Геопространственные веб-протоколы ...................................................................................306 Анализ трех конкретных инструментов ...................................................................................308 Протокол TMS ..............................................................................................................................308 Библиотека OpenLayers .............................................................................................................313 Модуль GeoDjango ......................................................................................................................317 Заключение .........................................................................................................................................325 Глава 11. Собираем все вместе – полнофункциональная картографическая система ............................................. 326 О системе ShapeEditor.....................................................................................................................326 Проектирование системы ShapeEditor ......................................................................................330 Импорт файла фигур ..................................................................................................................330 Выбор геообъекта .........................................................................................................................332 Правка геообъекта .......................................................................................................................334 Экспорт файла фигур .................................................................................................................334 Необходимые компоненты ............................................................................................................334 Настройка базы данных ..................................................................................................................335 Настройка проекта ShapeEditor ...................................................................................................335 Определение приложений ShapeEditor ....................................................................................337 Создание общего приложения shared ........................................................................................337 Определение моделей данных ......................................................................................................339 Объект Shapefile ...........................................................................................................................339 Объект Attribute ...........................................................................................................................340 Объект Feature ..............................................................................................................................340 Объект AttributeValue ................................................................................................................341 Файл models.py ............................................................................................................................341 Знакомство с подсистемой администрирования ...................................................................344 Заключение .........................................................................................................................................350 Глава 12. ShapeEditor – импорт и экспорт файлов фигур ...... 351 Реализация режима просмотра списка файлов фигур ........................................................351 Импорт файлов фигур .....................................................................................................................355 Форма для импорта файлов фигур ........................................................................................355 Извлечение выгруженного файла фигур из архива ........................................................358 Импорт содержимого файла фигур .......................................................................................361 Очистка ...........................................................................................................................................368 Экспорт файлов фигур ..............................................................................................................369 Заключение .........................................................................................................................................376 Глава 13. ShapeEditor – выбор и правка геообъектов ........... 377 Выбор геообъекта для правки .......................................................................................................378 Реализация сервера сборных цифровых карт ....................................................................378
Содержание Отображение карты при помощи библиотеки OpenLayers ..........................................398 Перехват нажатий кнопкой мыши .........................................................................................404 Реализация режима просмотра «Найти геообъект» ........................................................406 Правка геообъектов ..........................................................................................................................412 Добавление геообъектов .................................................................................................................418 Удаление геообъектов ......................................................................................................................421 Удаление файлов фигур ..................................................................................................................423 Использование системы ShapeEditor ........................................................................................424 Дальнейшие усовершенствования и улучшения ...................................................................424 Заключение .........................................................................................................................................425 Глоссарий сокращений и основных терминов .................... 427 Сокращения ........................................................................................................................................427 Термины ...............................................................................................................................................430 Предметный указатель ................................................... 436
Об авторе Эрик Вестра уже больше 25 лет является профессиональным разработчиком программного обеспечения, который в течение последнего десятилетия работает почти исключительно с Python. Первоначальный интерес Эрика к проектированию графического интерфейса пользователя привел к разработке одной из самых продвинутых систем срочной курьерской доставки, используемых службами и компаниями курьерской доставки по всему миру. В последние годы Эрик участвует в разработке и реализации систем по подбору поставщиков для потребителей товаров и услуг по целому ряду регионов с широкой географией и с использованием разных систем обмена мгновенными сообщениями и платежных систем. Эта работа включает в себя создание геокодеров в реальном масштабе времени и режимов просмотра постоянно меняющихся данных географических карт. Эрик проживает в Новой Зеландии и работает на компании, расположенные по всему миру. Кроме того, он является автором выпущенных в издательстве Packt книг «Геоанализ на Python» и «Создание картографических приложений» на основе QGIS, а также предстоящей публикации «Модульное программирование на языке Python». Я хотел бы поблагодарить Рут за ее великолепие, а моих дочерей – за их терпение. Без вас ничего из этого не было бы возможным.
О рецензенте Лу Може получил образование в области информатики очень давно в Университете штата Мичиган, где учился использовать программное обеспечение для разработки циклотрона. Затем он в течение 34 лет проработал в компании IBM и потом продолжил карьеру, работая на несколько консалтинговых фирм, включая долгосрочное сотрудничество с железнодорожной отраслью индустрии. В настоящее время он консультирует компанию Keyhole Software, расположенную в Ливуд, шт. Канзас. Прошлой весной для этой компании он создал программный инструмент MockOlaр для каркасного прототипирования на основе операций перетаскивания. Лу программирует на C++, Java и более новых языках и в настоящее время интересуется микросервисами, Docker, Node.js, NoSQL, геопространственными системами, функциональным программированием, мобильными и одностраничными веб-приложениями – любым новым языком или платформой. Лу иногда ведет блог, посвященный программным технологиям. Он является соавтором трех книг по информатике, написал два учебных руководства по XML для IBM DeveloperWorks и учебное руководство по LDAP для журнала WebSphere. Кроме того, Лу является соавтором нескольких сертификационных тестов по J2EE для IBM, а также рецензентом ряда других издателей.
Предисловие С ростом популярности картографических веб-сайтов и пространственно ориентированных устройств и приложений методы разработки геопространственного программного обеспечения образовали быстро развивающуюся область информатики – геоинформатику. Будучи разработчиком на Python, вы не можете позволить себе отстать от новейших тенденций. В сегодняшнем информированном о местоположении мире каждый разработчик на Python может извлечь выгоду из понимания концепций и методики разработки геопространственных приложений. Работа с геопространственными данными бывает непростой, потому что она связана с математическими моделями земной поверхности. Но поскольку Python – это мощный язык программирования с большим количеством высокоуровневых программных инструментов, он идеально подходит для разработки геопространственных приложений. Эта книга познакомит вас с инструментами языка Python, которые требуются для разработки геопространственных приложений. Она проведет вас по ключевым геопространственным понятиям, таким как географическое положение, расстояние, единицы измерения, картографические проекции, геодезические датумы и форматы геопространственных данных. Затем мы займемся изучением ряда программных библиотек Python и воспользуемся ими и общедоступными геопространственными данными для решения самых разнообразных задач. Книга предоставляет углубленный анализ методов хранения пространственных данных в базе данных и приемов использования пространственных баз данных в качестве инструментов для решения широкого диапазона геопространственных задач. В ней подробно рассматриваются методы генерирования карт при помощи инструмента визуализации цифровых карт – программной библиотеки Mapnik. Кроме того, книга поможет вам создать высокотехнологичное геопространственное веб-приложение с функционалом редактирования карты на основе географического модуля GeoDjango для веб-платформы Django, программной библиотеки Mapnik и геопространственного расширения PostGIS для СУБД PostgreSQL. К концу книги вы научитесь интегрировать пространственный функционал в свои собственные приложения и создавать полнофункциональные картографические приложения с нуля. Эта книга представляет собой практическое руководство, которое научит вас приемам получения доступа к геоданным, управления ими и их визуализации, используя широкий диапазон инструментов Python для разработки геоинформационных систем (ГИС). О чем эта книга рассказывает Глава 1 «Разработка геопрограмм на Python» предлагает обзор языка программирования Python и концепций, лежащих в основе процесса разработки геопро
Предисловие странственного приложения. Кроме того, будут затронуты основные прецеденты использования разработок геопространственных приложений, последние достижения и тенденции ближайшего будущего в данной области. Глава 2 «Геоинформационные системы» посвящена ознакомлению с базовыми понятиями, включая географическое положение, расстояние, единицы измерения, картографические проекции, географические фигуры, геодезические датумы и форматы геоданных, и затем обсуждению процесса работы с геоданными в ручном режиме. Глава 3 «Библиотеки Python для геопрограммирования» разбирает основные биб лиотеки Python, предназначенные для разработки геоприложений, в том числе функционал библиотек, способы их установки, важные понятия, необходимые для понимания работы библиотек, и способы их применения. Глава 4 «Источники геоданных» посвящена исследованию главных общедоступных источников геоданных, характеристике имеющейся в распоряжении информации, используемым форматам данных и приемам импортирования данных после их скачивания. Глава 5 «Решение задач с геоданными на Python» посвящена применению ранее представленных библиотек для выполнения различных задач с использованием геоданных, включая смену картографических проекций, импорт и экспорт данных, конвертирование и стандартизацию единиц геометрий и расстояний, выполнение геопространственных расчетов. Глава 6 «Пространственные базы данных» вводит понятия, лежащие в основе пространственных баз данных, и затем подробно рассматривает расширение PostGIS для СУБД PostgreSQL с поддержкой пространственных данных, способы его установки и использования из программы на Python. Глава 7 «Генерирование карт при помощи Python и библиотеки Mapnik» предлагает подробный анализ инструмента картографирования Mapnik и приемов его применения для генерирования разнообразных карт. Глава 8 «Работа с пространственными данными» познакомит с процессом проектирования и реализации полнофункционального геоприложения под названием DISTAL, используя общедоступные геоданные, хранящиеся в пространственной базе данных. Глава 9 «Совершенствование приложения DISTAL» посвящена развитию функционала приложения из предыдущей главы для решения ряда задач, связанных с удобством использования и производительностью. Глава 10 «Инструменты для разработки геопространственных веб-приложений» исследует понятия платформ веб-приложений, веб-служб, библиотек пользовательского интерфейса на JavaScript и скользящих карт. Данная глава познакомит с рядом стандартных веб-протоколов, используемых в геопространственных приложениях, и закончится обзором инструментария, при помощи которого в трех заключительных главах книги будет создано полнофункциональное картографическое приложение. Глава 11 «Собираем все вместе – полнофункциональная картографическая система» знакомит с полноценным и высокотехнологичным веб-приложением
Для кого эта книга 15 ShapeEditor, созданным с использованием геопространственного расширения PostGIS, библиотеки Mapnik и географического модуля GeoDjango. Работа начинается с проектирования законченного приложения и затем продолжается созданием моделей базы данных приложения ShapeEditor. Глава 12 «ShapeEditor – импорт и экспорт файлов фигур» продолжает реализацию системы ShapeEditor, концентрируясь на отображении списка импортированных файлов фигур и подпрограммах импорта и экспорта файлов фигур через веб-браузер. Глава 13 «ShapeEditor – выбор и правка геообъектов» завершает реализацию системы ShapeEditor добавлением подпрограмм, которые предлагают пользователю функционал для выбора и редактирования геообъектов внутри импортированного файла фигур. Он включает в себя создание специального сервера сборных цифровых карт и использование картографической библиотеки OpenLayers на JavaScript для визуализации геоданных на экране компьютера и взаимодействия с ними. Что требуется для этой книги Третье издание данной книги было расширено с целью поддержки Python 3, хотя, если хотите, вы можете продолжить пользоваться Python 2. Вам также понадобятся следующие инструменты и библиотеки, которые следует скачать и установить; подробные инструкции даны в соответствующих разделах книги: программный пакет GDAL/OGR; динамическая библиотека GEOS; библиотека Python Shapely; динамическая библиотека Proj; библиотека Python pyproj; СУБД PostgreSQL + программа администрирования pgAdmin III; геопространственное расширение PostGIS для СУБД PostgreSQL; адаптер СУБД PostgreSQL psycopg2 для Python; динамическая библиотека Mapnik; веб-платформа Django; географический модуль GeoDjango для веб-платформы Django; картографическая библиотека OpenLayers на JavaScript. Для кого эта книга Эта книга предназначена для опытных разработчиков на языке Python, которые хотели бы освоить свободно распространяемый инструментарий и методику разработки геопространственных приложений с целью создания своих собственных геоприложений либо интеграции геопространственной технологии в свои существующие программы на Python.
Предисловие Условные обозначения В этой книге вы найдете ряд текстовых стилей, которые выделяют различные виды информации. Вот некоторые примеры этих стилей и объяснение их значения. Фрагменты программного кода в тексте показаны следующим образом: «Набор данных gdal.Dataset представляет файл, который содержит данные в растровом формате». Блок кода выглядит следующим образом: import pyproj lat1,long1 = (37.8101274,-122.4104622) lat2,long2 = (37.80237485,-122.405832766082) geod = pyproj.Geod(ellps="WGS84") angle1,angle2,distance = geod.inv(long1, lat1, long2, lat2) print("Расстояние равно {:0.2f} метров".format(distance)) Когда требуется привлечь ваше внимание к конкретной части блока кода, соответствующие строки или элементы выделяются полужирным шрифтом: for value in values: if value != band.GetNoDataValue(): try: histogram[value] += 1 except KeyError: histogram[value] = 1 Любой ввод команды из командной строки или вывод результатов их вычисления оформляется следующим образом: % python3 calcBoundingBoxes.py Afghanistan (AFG) lat=29.4061..38.4721, long=60.5042..74.9157 Albania (ALB) lat=39.6447..42.6619, long=19.2825..21.0542 Algeria (DZA) lat=18.9764..37.0914, long=-8.6672..11.9865 Новые термины и важные слова показаны полужирным шрифтом. Слова, которые вы видите на экране, например в меню или диалоговых окнах, выглядят в тексте следующим образом: «Нажмите на гиперссылке Download Domestic Names, чтобы скачать национальные географические названия». Предупреждения или важные примечания появляются в этом поле. Подсказки и приемы появляются тут. Дополнения к тексту оригинала книги.
Доступ онлайн
В корзину