|
VNU LogoHCMUSSH Logo

[Bài 4] Phân tích không gian cơ bản - Buffer, Intersect và Union

01/04/2025
CHIA SẺ:
[Bài 4] Phân tích không gian cơ bản - Buffer, Intersect và Union

 


Bạn đã bao giờ tự hỏi làm sao để:
🔵 Xác định vùng ảnh hưởng 1km quanh các trạm y tế?
🟢 Tìm khu vực chồng lấn giữa đất rừng và khu dân cư?
🟡 Gộp nhiều khu đất riêng lẻ thành 1 vùng thống nhất?
Tất cả sẽ được giải quyết chỉ bằng vài dòng code Python cực kỳ đơn giản!

1. Chuẩn bị "vũ khí"

Trước khi bắt đầu, hãy chắc chắn bạn đã có:

python

import geopandas as gpd

from shapely.geometry import Polygon

import matplotlib.pyplot as plt

# Tạo dữ liệu mẫu (có thể thay bằng shapefile thực tế)

polys1 = gpd.GeoSeries([
       Polygon([(0,0), (2,0), (2,2), (0,2)]),
       Polygon([(2,2), (4,2), (4,4), (2,4)])
])

polys2 = gpd.GeoSeries([
      
Polygon([(1,1), (3,1), (3,3), (1,3)]),
      Polygon([(3,3), (5,3), ( 5,5), (3,5)])
])

2. Buffer - Vùng đệm thần thánh

Ứng dụng: Xác định vùng ảnh hưởng, vùng phủ sóng

python

# Tạo buffer 0.5 đơn vị từ các polygon gốc

buffer_zone = polys1.buffer(0.5)

# Visualize

fig, ax = plt.subplots() polys1.plot(ax=ax, color='blue',  alpha=0.5) buffer_zone.plot(ax=ax, color='red', alpha=0.3) plt.title("Buffer 0.5 đơn vị") plt.show()

3. Intersect - Tìm khu vực chồng lấn

Ứng dụng: Xác định khu vực giao thoa giữa các lớp dữ liệu

python

# Chuyển sang GeoDataFrame

gdf1 = gpd.GeoDataFrame(geometry=polys1)
gdf2
= gpd.GeoDataFrame(geometry=polys2)

# Tính intersect

intersect = gpd.overlay(gdf1, gdf2, how='intersection')

# Visualize

fig, ax = plt.subplots()
gdf1
.plot(ax=ax, color='blue', alpha=0.5)
gdf2
.plot(ax=ax, color='green', alpha=0.5)
intersect
.plot(ax=ax, color='red')
plt
.title("Khu vực giao nhau (Intersect)")
plt
.show()

4. Union - Hợp nhất không gian

Ứng dụng: Gộp nhiều khu vực nhỏ thành vùng lớn

python

# Tính union

union = gpd.overlay(gdf1, gdf2, how='union')

# Visualize

fig, ax = plt.subplots()
union.plot(ax=ax, cmap='tab20', edgecolor='black')
plt
.title("Hợp nhất (Union)")
plt.show()

 

📌 Bài tập tự làm:

  1. Tạo buffer 1km quanh các trường học trong shapefile của bạn

  2. Tìm khu vực giao nhau giữa đất nông nghiệp và khu dân cư

  3. Hợp nhất các thửa đất riêng lẻ thành vùng quy hoạch

 

💡 Pro tip: Dùng explode() khi muốn tách các đa giác trong kết quả union!

 

Bài tiếp theo: [Bài 5] Làm việc với dữ liệu raster bằng Rasterio 

Bài trước: [Bài 3] Xử lý dữ liệu địa lý với thư viện Geopandas

 

 

5. Tài liệu tham khảo

  1. Bivand, R. S., Pebesma, E., & Gómez-Rubio, V. (2013). Applied spatial data analysis with R (2nd ed.). Springer. https://doi.org/10.1007/978-1-4614-7618-4

  2. Graser, A. (2019). Learning QGIS 3.x (2nd ed.). Packt Publishing.

  3. Open Geospatial Consortium. (2021). Simple feature access - Part 1: Common architecture. OGC 06-103r4. https://www.ogc.org/standard/sfa/

  4. Shapely Development Team. (2022). Shapely documentationhttps://shapely.readthedocs.io/

  5. QGIS Development Team. (2023). QGIS User Guidehttps://docs.qgis.org/3.28/en/docs/user_manual/

CHIA SẺ:
Ngày cập nhật: 01/04/2025

Bài viết liên quan