Просте тематичне відображення форм-файлів за допомогою Python?


37

Я хочу візуалізувати географічні дані в Python, не використовуючи ArcGIS / ArcPy, і зробити карту.

В Інтернеті я знайшов, як зробити тематичну карту за допомогою Python :

Ось код, який я спробував:

import shpUtils
import matplotlib.pyplot as plt

shpRecords = shpUtils.loadShapefile('C:\\Users\\shapefile.shp')

for i in range(0,len(shpRecords)):
    x = []
    y = []
    for j in range(0,len(shpRecords[i]['shp_data']['parts'][0]['points'])):

    tempx = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['x'])
    tempy = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['y'])
    x.append(tempx)
    y.append(tempy)
    plt.fill(x,y)

plt.axis('equal')
plt.title("Testing")
plt.show()

Однак, коли я запускаю це, це дає мені випадкові кольори.

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

Це дуже незрозуміло у посиланні, поданому вище, де він лише обговорює використання кольорів ...

Мені, можливо, знадобляться додаткові модулі для цього, як декарт та PySAL ?

Відповіді:


62

Я не знаю ArcPy, але я працюю з формами файлів і растрами в Python роками

  1. Для обробки форм-файлів у Python існує багато модулів, таких як osgeo / ogr , Fiona , Pysal або Pyshp ( shpUtils є одним з них і не використовується найбільш часто) та інші, див. Pypi: GIS та приклади на gis.stackexchange та багато прикладів на Інтернет (не тільки англійською). Більшість з них набагато старші за ArcPy (або arcgisscripting) ...
  2. для обробки растра можна використовувати OSGeo / бібліотеку GDAL , стандарт
  3. Для обробки геопросторових геометрій існує форма
  4. Для побудови геометрії ви можете використовувати matplotlib та, можливо, декарт , "розширення" matplotlib для областей, але також багато, багато інших модулів, див. Pypi: Плоттування та такі модулі, як майаві для 3D-зображення (також matplotlib)
  5. Також є такі модулі, як mapnik, які безпосередньо дають вам можливості 1) прочитати файл форми і 4) побудувати графік за допомогою модуля Pycairo .

Після цього це як ГІС:

  • ви використовуєте модулі 1) для відкриття, збереження форм і проведення процедур з іншими модулями, такими як numpy або scipy, якщо хочете.
  • ви можете використовувати плавно для маніпуляцій та аналізу геометричних об'єктів (буфер тощо).
  • ви можете використовувати matplotlib для побудови геометрії, але matplotlib не знає, що ви хочете побудувати. Це ваша робота з модулями 1) або 3), щоб визначити, що планувати (атрибути тощо) та як.

Якщо я хочу візуалізувати один певний стовпчик мого файлу форм, як я можу це реалізувати в коді?

Отже, ви повинні вивчити matplotib та інші модулі. Ви повинні вивчити ArcPy, це те саме ... (в Інтернеті є багато відмінних навчальних посібників, особливо для matplolib, і ArcPy простіше, тому що це чистий Python).

Деякі приклади лише з Python

введіть тут опис зображення

Геологічна карта (формуляр багатокутника) з кольорами на основі атрибута

введіть тут опис зображення

3D-точки (форм-файл PointZ) з кольором на основі атрибута

введіть тут опис зображення

3D-точки (Файл форми форми з атрибутом z) та лінія 3D (поліфайл форми PolyLineZ) на DEM та на растрі, нанесеному на поверхню DEM.

введіть тут опис зображення

Топографічний профіль із значеннями z та кольорами на основі атрибутів (геологічних утворень = поперечний переріз) вихідного формату (полілінійний профіль)

введіть тут опис зображення

DEM (GeoTIFF) з модулем Mayavi2

введіть тут опис зображення

DEM (ESRI ascii grid, .asc) і точкові файли (з z як атрибут) з модулем visvis

введіть тут опис зображення

Свердловини (3D-буфер полілініїZ з кольорами на основі атрибута (геологічні утворення), з поверхнею сітки, обчисленою за допомогою модулів numpy та matplotlib з файлового формату (з z як атрибут), візуалізованого за допомогою модуля visvis


16

У мене були подібні проблеми, коли я хочу швидко візуалізувати форму файлів, і я завжди знаходив спосіб Matplotlib досить тривалий шлях для виконання такого невеликого завдання. Натомість я розробив модуль «Географічний візуалізатор Python» або коротко GeoVis. Оновлення: v0.2.0 зараз випускається з великою кількістю нових функціональних можливостей.

З його допомогою візуалізація форм не може бути простішою:

import geovis
geovis.ViewShapefile("C:/yourshapefile.shp")

Вуаля, карта відображається як зображення у вікні Tkinter, і ви також можете зберегти карту у файл зображення. Можливе також створення стилів, фарбування та додавання декількох шарів на карту, а в новітній версії ви також можете класифікувати за атрибутами та збільшувати масштаб певного регіону. На карті нижче геовіз завантажив і категорично забарвив всі світові провінції GADM приблизно за 5 хвилин. Ви можете завантажити GeoVis звідси , де ви також можете прочитати більше про те, як ним користуватися.

введіть тут опис зображення

Мета полягає в простому встановленні настільки ж простоті у використанні, тому GeoVis може бути використаний будь-хто, хто має Python і не потребує інших модулів, оскільки він може використовувати вбудований Tkinter Canvas як візуалізатор. Але настійно рекомендується мати або придбати або Aggdraw, PIL, або PyCairo, які також можна використовувати як візуалізатори і набагато швидші та якісніші.

"Backdraw" - це ваш файл форми, який не має проектуватися з системою координат lat / long - він ще не обробляє проекції чи перетворення.


14

Я зіткнувся з низкою навчальних посібників, що займаються цією темою, якими я хотів поділитися:

Ви також можете розглянути можливість використання R: Як створити привабливу карту хороплету в R?


1

У 2019 році найпростіший спосіб скласти тематичну карту з формулярного файлу в пітон - геопанди .

Приклад з документації: http://geopandas.org/mapping.html

import geopandas
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world['gdp_per_cap'] = world.gdp_md_est / world.pop_est
world.plot(column='gdp_per_cap')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.