GIS

Google Earth Engine: 도형 내 균일 랜덤 포인트 생성 방법 소개

유병혁 2024. 9. 4. 09:24

안녕하세요? 이번 글은 Google Earth Engine에서 주어진 기하 도형 내 균일하게 임의의 점들을 생성하는 방법을 소개해 보겠습니다. ee.FeatureCollection.randomPoints 함수를 사용하시면 됩니다.

 

ee.FeatureCollection.randomPoints  |  Google Earth Engine  |  Google for Developers

Export.classifier

developers.google.com

import ee
import geemap

# Earth Engine 인증
ee.Authenticate()

# Earth Engine 초기화
ee.Initialize(project='ee-foss4g')

 

먼저, 랜덤 포인트의 지리적 경계를 제한하기 위한 ee.Geometry 객체를 정의합니다. 여기서는 앞서 행정경계에서 추출한 대한민국 영역을 정의해 보겠습니다.

 

QGIS: 행정경계를 단일 경계로 병합하기

안녕하세요? 이번 글은 QGIS를 이용하여 다수 피처로 구성된 행정경계를 단일 경계로 병합하는 방법을 정리해 보겠습니다. 해당 방법은 융해(Dissolve) 기능을 통해 처리할 수 있는데요, 그 외에 고

foss4g.tistory.com

xmin = 125.0765578311700068
ymin = 33.1124998462386984
xmax = 131.8727812628719960
ymax = 38.4000004985049017

# 랜덤 포인트의 지리적 경계를 제한하기 위한 ee.Geometry 객체
region = ee.Geometry.Rectangle(
    coords=[xmin, ymin, xmax, ymax], proj='EPSG:4326', geodesic=False
)

m = geemap.Map(layout={'height':'400px', 'width':'800px'})
m.addLayer(region, {'color': 'yellow'}, "Region")
m.centerObject(region, 6)
m

 

참고로 geodesic(측지선)이 false로 설정되면 모서리들이 투영에서 직선으로 표시되지만, true로 설정되면 지구 표면에서 최단 경로를 따르도록 곡선으로 표시됩니다. 입력값이 숫자일 경우 true로 설정되므로 직선 표시를 위해서는 false를 지정해 주어야 합니다.

# 랜덤 포인트의 지리적 경계를 제한하기 위한 ee.Geometry 객체
region = ee.Geometry.Rectangle(
    coords=[xmin, ymin, xmax, ymax], proj='EPSG:4326', geodesic=True
)

 

이제 해당 지역 내에서 100개의 랜덤 포인트를 생성해 보겠습니다.

# 해당 지역 내에서 100개의 랜덤 포인트 생성
random_points = ee.FeatureCollection.randomPoints(
    region=region, points=100, seed=0, maxError=1
)

m = geemap.Map(layout={'height':'400px', 'width':'800px'})
m.addLayer(region, {'color': 'yellow'}, "Region")
m.add_layer(random_points, {'color': 'black'}, 'Random points')
m.centerObject(region, 6)
m

 

코드를 재사용해서 변산반도국립공원 지역 내에서 100개의 랜덤 포인트를 생성해 봅니다. 다음과 같이 Google Earth Engine에서 랜덤 포인트를 생성할 때 사용하시면 되겠습니다.

# WDPA 데이터셋 불러오기
wdpa = ee.FeatureCollection("WCMC/WDPA/current/polygons")
region = wdpa.filter(ee.Filter.eq('WDPAID', 30712))

# 해당 지역 내에서 100개의 랜덤 포인트 생성
random_points = ee.FeatureCollection.randomPoints(
    region=region, points=100, seed=0, maxError=1
)

m = geemap.Map(layout={'height':'400px', 'width':'800px'})
m.addLayer(region, {'color': 'yellow'}, "Region")
m.add_layer(random_points, {'color': 'black'}, 'Random points')
m.centerObject(region, 11)
m