การแปลงจากแรสเตอร์เป็นเวกเตอร์

หากต้องการแปลงจากประเภทข้อมูล Image (แรสเตอร์) เป็น FeatureCollection (เวกเตอร์) ให้ใช้ image.reduceToVectors() นี่เป็นกลไกหลักในการเปลี่ยนเป็นเวกเตอร์ใน Earth Engine และอาจมีประโยชน์ในการสร้างภูมิภาคสำหรับอินพุตไปยังตัวลดประเภทอื่นๆ เมธอด reduceToVectors() จะสร้างขอบรูปหลายเหลี่ยม (หรือจะสร้างจุดศูนย์กลางหรือกล่องขอบเขตแทนก็ได้) ที่ขอบของกลุ่มพิกเซลที่เชื่อมต่อกันซึ่งมีสีเดียวกัน

ตัวอย่างเช่น รูปภาพแสงไฟยามค่ำคืนของญี่ปุ่นในปี 2012 ให้ตัวเลขไฟกลางคืนเป็นพร็อกซีสำหรับความเข้มข้นของการพัฒนา กําหนดโซนโดยใช้เกณฑ์ที่กำหนดเองในไฟกลางคืน รวมโซนเป็นภาพย่านความถี่เดียว เปลี่ยนโซนเป็นเวกเตอร์โดยใช้reduceToVectors()

เครื่องมือแก้ไขโค้ด (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');

การตั้งค่า Python

ดูข้อมูลเกี่ยวกับ Python API และการใช้ geemap สําหรับการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้า สภาพแวดล้อม Python

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

โปรดทราบว่าย่านความถี่แรกในอินพุตจะใช้เพื่อระบุภูมิภาคที่เป็นเนื้อเดียวกัน และย่านความถี่ที่เหลือจะลดลงตามตัวลดที่ระบุไว้ ซึ่งเอาต์พุตจะเพิ่มเป็นพร็อพเพอร์ตี้ไปยังเวกเตอร์ผลลัพธ์ พารามิเตอร์ geometry จะระบุขอบเขตที่ควรสร้างเวกเตอร์ โดยทั่วไปแล้ว คุณควรระบุโซนขั้นต่ำที่จะสร้างเวกเตอร์ นอกจากนี้ คุณควรระบุ scale และ crs เพื่อไม่ให้เกิดความคลุมเครือ ประเภทเอาต์พุตคือ ‘polygon’ ซึ่งรูปหลายเหลี่ยมจะก่อตัวจากโซนที่เหมือนกันของเพื่อนบ้านที่เชื่อมต่อกัน 4 จุด (นั่นคือ eightConnected เป็นเท็จ) พารามิเตอร์ 2 รายการสุดท้าย labelProperty และ reducer ระบุว่ารูปหลายเหลี่ยมเอาต์พุตควรได้รับพร็อพเพอร์ตี้ที่มีป้ายกำกับโซนและค่าเฉลี่ยของย่านความถี่ของแสงกลางคืนตามลำดับ

ผลลัพธ์ที่แมปควรมีลักษณะคล้ายกับพื้นที่โตเกียวที่แสดงในรูปที่ 1 การตรวจสอบรูปหลายเหลี่ยมเอาต์พุตบ่งชี้ว่ารูปหลายเหลี่ยมแต่ละรูปมีพร็อพเพอร์ตี้ที่จัดเก็บป้ายกำกับของโซน ({1, 2, 3}) และค่าเฉลี่ยของย่านความถี่ของแสงกลางคืน เนื่องจากมีการระบุตัวลดค่าเฉลี่ย

เอาต์พุต reduceToVectors
รูปที่ 1 โซนไฟกลางคืนในพื้นที่โตเกียว ญี่ปุ่น ขอบเขตเวกเตอร์จะแสดงเป็นสีดํา