Chuyển đổi đường quét sang vectơ

Để chuyển đổi từ loại dữ liệu Image (mảng điểm) sang loại dữ liệu FeatureCollection (vectơ), hãy sử dụng image.reduceToVectors(). Đây là cơ chế chính để vectơ hoá trong Earth Engine và có thể hữu ích cho việc tạo các vùng để nhập vào các loại bộ giảm khác. Phương thức reduceToVectors() tạo các cạnh đa giác (không bắt buộc là tâm điểm hoặc hộp giới hạn) tại ranh giới của các nhóm đồng nhất gồm các pixel được kết nối.

Ví dụ: hãy xem xét hình ảnh ánh sáng ban đêm của Nhật Bản năm 2012. Hãy để số kỹ thuật số của đèn ngủ đóng vai trò là proxy cho cường độ phát triển. Xác định các vùng bằng cách sử dụng ngưỡng tuỳ ý trên đèn ngủ, kết hợp các vùng thành một hình ảnh đơn băng, vectơ hoá các vùng bằng reduceToVectors():

Trình soạn thảo mã (JavaScript)

// Load a Japan boundary from the Large Scale International Boundary dataset.
var japan = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
  .filter(ee.Filter.eq('country_na', 'Japan'));

// Load a 2012 nightlights image, clipped to the Japan border.
var nl2012 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012')
  .select('stable_lights')
  .clipToCollection(japan);

// Define arbitrary thresholds on the 6-bit nightlights image.
var zones = nl2012.gt(30).add(nl2012.gt(55)).add(nl2012.gt(62));
zones = zones.updateMask(zones.neq(0));

// Convert the zones of the thresholded nightlights to vectors.
var vectors = zones.addBands(nl2012).reduceToVectors({
  geometry: japan,
  crs: nl2012.projection(),
  scale: 1000,
  geometryType: 'polygon',
  eightConnected: false,
  labelProperty: 'zone',
  reducer: ee.Reducer.mean()
});

// Display the thresholds.
Map.setCenter(139.6225, 35.712, 9);
Map.addLayer(zones, {min: 1, max: 3, palette: ['0000FF', '00FF00', 'FF0000']}, 'raster');

// Make a display image for the vectors, add it to the map.
var display = ee.Image(0).updateMask(0).paint(vectors, '000000', 3);
Map.addLayer(display, {palette: '000000'}, 'vectors');

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Load a Japan boundary from the Large Scale International Boundary dataset.
japan = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017').filter(
    ee.Filter.eq('country_na', 'Japan')
)

# Load a 2012 nightlights image, clipped to the Japan border.
nl_2012 = (
    ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012')
    .select('stable_lights')
    .clipToCollection(japan)
)

# Define arbitrary thresholds on the 6-bit nightlights image.
zones = nl_2012.gt(30).add(nl_2012.gt(55)).add(nl_2012.gt(62))
zones = zones.updateMask(zones.neq(0))

# Convert the zones of the thresholded nightlights to vectors.
vectors = zones.addBands(nl_2012).reduceToVectors(
    geometry=japan,
    crs=nl_2012.projection(),
    scale=1000,
    geometryType='polygon',
    eightConnected=False,
    labelProperty='zone',
    reducer=ee.Reducer.mean(),
)

# Display the thresholds.
m = geemap.Map()
m.set_center(139.6225, 35.712, 9)
m.add_layer(
    zones,
    {'min': 1, 'max': 3, 'palette': ['0000FF', '00FF00', 'FF0000']},
    'raster',
)

# Make a display image for the vectors, add it to the map.
display_image = ee.Image(0).updateMask(0).paint(vectors, '000000', 3)
m.add_layer(display_image, {'palette': '000000'}, 'vectors')
m

Xin lưu ý rằng dải đầu tiên trong dữ liệu đầu vào được dùng để xác định các vùng đồng nhất và các dải còn lại được giảm theo bộ giảm được cung cấp, đầu ra của bộ giảm này được thêm vào dưới dạng thuộc tính cho các vectơ kết quả. Tham số geometry chỉ định phạm vi tạo vectơ. Nhìn chung, bạn nên chỉ định một vùng tối thiểu để tạo vectơ. Bạn cũng nên chỉ định scalecrs để tránh nhầm lẫn. Loại đầu ra là ‘polygon’, trong đó các đa giác được tạo thành từ các vùng đồng nhất của các đỉnh kề nhau được kết nối bốn chiều (tức là eightConnected là sai). Hai tham số cuối cùng, labelPropertyreducer, chỉ định rằng các đa giác đầu ra sẽ nhận được một thuộc tính có nhãn vùng và giá trị trung bình của(các) dải đèn đường ban đêm tương ứng.

Kết quả được lập bản đồ sẽ có dạng như khu vực Tokyo trong Hình 1. Việc kiểm tra các đa giác đầu ra cho thấy mỗi đa giác có một thuộc tính lưu trữ nhãn của vùng ({1, 2, 3}) và giá trị trung bình của dải đèn đường ban đêm, vì bộ giảm giá trị trung bình được chỉ định.

Kết quả của reduceToVectors
Hình 1. Các khu vực có đèn chiếu sáng ban đêm ở Tokyo, Nhật Bản. Ranh giới vectơ được hiển thị bằng màu đen.