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');
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
은 false). 마지막 두 매개변수인 labelProperty
및 reducer
는 출력 다각형이 각각 구역 라벨과 야간 조명 범위의 평균이 포함된 속성을 수신해야 함을 지정합니다.
매핑된 결과는 그림 1과 같이 도쿄 지역과 비슷하게 표시됩니다. 출력 다각형을 검사하면 평균 감소기가 지정되어 있으므로 각 다각형에 영역 ({1, 2, 3}) 라벨과 야간 조명 범위의 평균을 저장하는 속성이 있음을 알 수 있습니다.
