Карты стали полезными для многих бизнесов. 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 (загрузить штаты и провинции), чтобы загрузить архив. После загрузки разархивируйте файл, вы должны увидеть такой результат: