Ánh xạ chủ đề đơn giản của shapefile bằng Python?


37

Tôi muốn trực quan hóa dữ liệu địa lý trong Python, mà không cần sử dụng ArcGIS / ArcPy và tạo bản đồ.

Trên internet tôi đã tìm thấy cách tạo một bản đồ chuyên đề bằng Python :

Đây là một số mã mà tôi đã thử:

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()

Tuy nhiên, khi tôi chạy nó, nó cho tôi màu sắc ngẫu nhiên.

Nếu tôi muốn trực quan hóa một cột nhất định trong shapefile của mình, làm thế nào tôi có thể thực hiện điều này bằng cách sử dụng mã tương tự?

Điều này rất không rõ ràng trong liên kết được cung cấp ở trên, nơi anh ta chỉ thảo luận về việc sử dụng màu sắc ...

Tôi có lẽ sẽ cần thêm mô-đun để thực hiện điều này, như DescartesPySAL ?

Câu trả lời:


62

Tôi không biết ArcPy, nhưng tôi làm việc với shapefiles và raster trong Python trong nhiều năm

  1. Để xử lý các shapefile trong Python, có nhiều mô-đun như osgeo / ogr , Fiona , Pysal hoặc Pyshp ( shpUtils là một trong số chúng và không được sử dụng nhiều nhất), và các ví dụ khác, xem Pypi: GIS và các ví dụ trên gis.stackexchange và nhiều ví dụ trên Web (không chỉ bằng tiếng Anh). Hầu hết trong số họ đều già hơn nhiều so với ArcPy (hoặc arcgisscripting) ...
  2. để xử lý raster, bạn có thể sử dụng osgeo / gdal , tiêu chuẩn
  3. Để xử lý hình học không gian địa lý, có hình dạng
  4. Để vẽ đồ thị hình học, bạn có thể sử dụng matplotlib và có thể là descartes , "phần mở rộng" của matplotlib cho các khu vực, nhưng cũng có nhiều, nhiều mô-đun khác, xem Pypi: Vẽ sơ đồ và mô-đun như mayavi để thể hiện 3D (matplotlib cũng)
  5. Ngoài ra còn có các mô-đun như mapnik cung cấp cho bạn trực tiếp các khả năng của 1) đọc một shapefile và 4) vẽ đồ thị với mô-đun Pycairo .

Sau đó, nó giống như một hệ thống GIS:

  • bạn sử dụng các mô-đun 1) để mở, lưu các shapefiles và thực hiện các phương pháp điều trị với các mô-đun khác như numpy hoặc scipy, nếu bạn muốn.
  • bạn có thể sử dụng hình dạng để thao tác và phân tích các đối tượng hình học (bộ đệm, v.v.).
  • bạn có thể sử dụng matplotlib để vẽ đồ thị hình học, nhưng matplotlib không biết bạn muốn vẽ gì. Công việc của bạn là với các mô-đun 1) hoặc 3) để xác định nội dung cần vẽ (thuộc tính, v.v.) và cách thực hiện.

Nếu tôi muốn trực quan hóa một cột nhất định trong shapefile của mình, làm thế nào tôi có thể thực hiện điều này trong mã?

Vì vậy, bạn phải học matplotib và các mô-đun khác. Bạn phải học ArcPy, nó giống nhau ... (có rất nhiều hướng dẫn tuyệt vời trên web, đặc biệt là cho matplolib, và ArcPy dễ dàng hơn vì nó là Python thuần túy).

Một số ví dụ chỉ với Python

nhập mô tả hình ảnh ở đây

Bản đồ địa chất (đa giác shapefile) với màu sắc dựa trên một thuộc tính

nhập mô tả hình ảnh ở đây

Điểm 3D (shapefile PointZ) với màu dựa trên một thuộc tính

nhập mô tả hình ảnh ở đây

Các điểm 3D (shapefile điểm với z là thuộc tính) và đường 3D (shapefile PolyLineZ) trên DEM và trên raster được treo trên bề mặt DEM.

nhập mô tả hình ảnh ở đây

Cấu hình địa hình với các giá trị z và màu sắc dựa trên các thuộc tính (hình thành địa chất = Mặt cắt ngang) của shapefile gốc (Polyline shapefile)

nhập mô tả hình ảnh ở đây

DEM (GeoTIFF) với mô-đun Mayavi2

nhập mô tả hình ảnh ở đây

DEM (ESRI ascii lưới, .asc) và các shapefiles điểm (với thuộc tính z) với mô-đun visvis

nhập mô tả hình ảnh ở đây

Lỗ khoan (3D đệm của một polylineZ với màu sắc dựa trên một thuộc tính (hình thành địa chất), với một bề mặt lưới tính toán với các module NumPy và matplotlib từ một điểm shapefile (với z là một thuộc tính), hình dung với các module visvis


16

Tôi đã gặp vấn đề tương tự khi tôi muốn hình dung nhanh các shapefile và tôi luôn tìm thấy cách Matplotlib khá dài để thực hiện một nhiệm vụ nhỏ như vậy. Thay vào đó, tôi đã phát triển mô-đun "Python Geographic Visualizer" hoặc viết tắt là GeoVis. Cập nhật: v0.2.0 hiện đã có rất nhiều chức năng mới.

Với nó, hình dung các shapefiles không thể dễ dàng hơn:

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

Voila, bạn ánh xạ bật lên dưới dạng hình ảnh trong cửa sổ Tkinter và bạn cũng có thể lưu bản đồ vào tệp hình ảnh. Cũng có thể tạo kiểu, tô màu và thêm nhiều lớp vào bản đồ và trong phiên bản mới nhất, bạn cũng có thể phân loại dựa trên các thuộc tínhphóng to vào một khu vực cụ thể. Trong bản đồ bên dưới, geovis được tải và phân loại màu tất cả các tỉnh GADM của thế giới trong khoảng 5 phút. Bạn có thể tải xuống GeoVis từ đây , nơi bạn cũng có thể đọc thêm về cách sử dụng nó.

nhập mô tả hình ảnh ở đây

Mục đích là cài đặt dễ dàng, dễ sử dụng, do đó GeoVis có thể được sử dụng bởi bất kỳ ai có Python và không yêu cầu bất kỳ mô-đun nào khác vì nó có thể sử dụng Tkinter Canvas dựng sẵn làm trình kết xuất. Nhưng chúng tôi khuyên bạn nên có hoặc nhận Aggdraw, PIL hoặc PyCairo, cũng có thể được sử dụng làm trình kết xuất và nhanh hơn và chất lượng cao hơn nhiều.

Backdraw là shapefile của bạn phải được cung cấp với hệ thống tọa độ lat / long - nó chưa xử lý các phép chiếu hoặc biến đổi.


14

1

Năm 2019 , cách đơn giản nhất để tạo một bản đồ chuyên đề từ một shapefile ở trăn, là geopandas .

Một ví dụ từ tài liệu: 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')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.