Простой Python. Современный стиль программирования (Любанович) - страница 249

Карты

Карты стали полезными для многих бизнесов. Python очень хорошо рисует карты, поэтому мы потратим немного времени на эту тему. Менеджеры любят графики, и если вы можете быстро нарисовать красивую карту сайта вашей организации, это вам не повредит.

В ранние дни существования Интернета я посещал экспериментальный сайт по созданию карт у Xerox. Когда появились крупные сайты вроде Google Maps, они стали откровением (к тому же вызывали мысль: «Почему я не подумал об этом и не заработал миллионы?»). Теперь службы картографии и службы, основанные на определении местоположения, практически везде, они особенно удобны в мобильных устройствах.

Здесь пересекается множество терминов: картография, GIS (geographic information system — географическая информационная система), GPS (Global Positioning System — глобальная система позиционирования), анализ геопространства и многие другие. Блог Geospatial Python (http://bit.ly/geospatial-py) воплощает образ системы размером с «800-фунтовую гориллу» GDAL/OGR, GEOS и PROJ.4 (проекции) и вспомогательные системы, представленные как обезьяны.

Многие из этих служб имеют интерфейсы Python. Поговорим о некоторых из них, начиная с самых простых форматов.

Форматы

Мир картографии имеет множество форматов: векторный (линии), растровый (изображения), метаданные (слова) и их комбинации.

Esri, первая географическая система, изобрела формат шейп-файл более 20 лет назад. Файл формата шейп-файл содержит несколько файлов, содержащих как минимум следующую информацию:

•.shp — информация о фигуре (вектор);

•.shx — индекс формы;

•.dbf — база данных атрибутов.

Рассмотрим некоторые модули для работы с такими файлами.

• pyshp (https://code.google.com/p/pyshp/) — это библиотека для работы с шейп-файлами, написанная полностью на Python.

• shapely (http://toblerity.org/shapely/) решает геометрические вопросы наподобие «Какие строения в этом городе через 50 лет окажутся в зоне наводнения?».

• fiona (https://github.com/Toblerity/Fiona) оборачивает библиотеку OGR, которая работает с шейп-файлами и другими векторными форматами.

• kartograph (http://kartograph.org/) отрисовывает шейп-файлы в карты формата SVG на сервере или клиенте.

• basemap (http://matplotlib.org/basemap/) наносит двухмерные данные на карты и использует matplotlib.

• cartopy (http://scitools.org.uk/cartopy/docs/latest/) использует matplotlib и shapely для того, чтобы рисовать карты.

Получим шейп-файл для нашего следующего примера. Посетите страницу http://bit.ly/cultural-vectors. В разделе Admin 1 — States and Provinces нажмите зеленую кнопку download states and provinces (загрузить штаты и провинции), чтобы загрузить архив. После загрузки разархивируйте файл, вы должны увидеть такой результат: