코드 편집기 UI 또는 'earthengine' 명령줄 도구의 upload
명령어보다 더 유연하게 Google Earth Engine (EE)에 테이블을 업로드해야 하는 경우 '매니페스트'라는 JSON 파일을 사용하여 테이블 업로드를 설명하고 명령줄 도구의 upload table --manifest
명령어를 사용하면 됩니다.
1회 설정
- 매니페스트 업로드는 Google Cloud Storage에 있는 파일에서만 작동합니다. Google Cloud Storage를 사용하려면 아직 프로젝트가 없는 경우 Google Cloud 프로젝트를 만듭니다. 설정하려면 결제용 신용카드를 지정해야 합니다. 현재 EE 자체는 누구에게도 요금을 청구하지 않지만 EE에 파일을 업로드하기 전에 Google Cloud Storage로 파일을 전송하면 소액의 비용이 발생합니다. 일반적인 업로드 데이터 크기 (수십 또는 수백 기가바이트)의 경우 비용이 매우 낮습니다.
- 프로젝트 내에서 Cloud Storage API를 사용 설정하고 버킷을 만듭니다.
- Earth Engine Python 클라이언트를 설치합니다. 여기에는 데이터 업로드에 사용할
earthengine
명령줄 도구가 포함되어 있습니다. - 자동 업로드의 경우 프로젝트와 연결된 Google Cloud 서비스 계정을 사용하는 것이 좋습니다. 테스트에는 서비스 계정이 필요하지 않지만, 잠시 시간을 내어 서비스 계정 사용법을 숙지하세요.
저작물 ID 및 이름
Cloud 프로젝트의 애셋에는 projects/my_cloud_project/assets/my_asset
를 사용하세요.
이전 기존 프로젝트의 경우 매니페스트의 애셋 이름이 Earth Engine의 다른 위치에 표시되는 애셋 ID와 약간 달라야 합니다. 저작물 ID가 users/some_user
또는 projects/some_project
로 시작하는 저작물을 업로드하려면 매니페스트의 저작물 이름에 ID 앞에 projects/earthengine-legacy/assets/
문자열을 추가해야 합니다. 예를 들어 EE 애셋 ID users/username/my_table
는 projects/earthengine-legacy/assets/users/username/my_table
라는 이름을 사용하여 업로드해야 합니다.
예. 즉, projects/some_projects/some_asset
와 같은 ID가 projects
가 두 번 언급된 이름(projects/earthengine-legacy/assets/projects/some_projects/some_asset
)으로 변환됩니다.
이는 혼란스럽지만 Google Cloud API 표준을 준수하는 데 필요합니다.
매니페스트 사용
가능한 가장 간단한 매니페스트는 다음과 같습니다. gs://earthengine-test
라는 Google Cloud Storage 버킷에서 small.csv
라는 파일을 업로드합니다.
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/small.csv" ] } ] }
사용하려면 manifest.json
파일에 저장하고 다음을 실행합니다.
earthengine upload table --manifest /path/to/manifest.json
gs://earthengine-test/small.csv
파일이 존재하며 공개적으로 읽을 수 있습니다. 테스트에 사용할 수 있습니다.
셰이프파일 업로드의 경우 .shp 파일만 지정합니다. 다른 파일은 자동으로 감지됩니다.
여러 소스
소스당 하나의 파일로 여러 CSV 또는 셰이프파일 소스를 지정할 수 있습니다. 이 경우 각 CSV 파일의 구조가 동일해야 합니다. 예를 들어 region1.csv
및 region2.csv
라는 두 개의 CSV 파일이 있습니다.
id | shape |
---|---|
1 | {"type":"Point","coordinates":[-119,36]} |
2 | {"type":"Point","coordinates":[-118,37]} |
3 | {"type":"Point","coordinates":[-117,38]} |
id | shape |
---|---|
4 | {"type":"Point","coordinates":[-112,40]} |
5 | {"type":"Point","coordinates":[-111,41]} |
6 | {"type":"Point","coordinates":[-110,42]} |
구조는 동일하지만 콘텐츠는 다릅니다. Cloud Storage 버킷(gs://earthengine-test/region1.csv
gs://earthengine-test/region2.csv
sources
목록에 두 개의 항목이 있는 매니페스트를 만듭니다.
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/region1.csv" ] }, { "uris": [ "gs://earthengine-test/region2.csv" ] } ] }
시작 시간 및 종료 시간
특히 컬렉션에 포함된 경우 모든 저작물에 시작 시간과 종료 시간을 지정하여 데이터에 더 많은 맥락을 제공해야 합니다. 이 입력란은 필수 입력란은 아니지만 가능한 경우 항상 사용하는 것이 좋습니다.
시작 시간과 종료 시간은 일반적으로 소스 파일이 생성된 시간이 아니라 관찰 시간을 의미합니다.
종료 시간은 편의상 제외 경계로 취급됩니다. 예를 들어 정확히 하루 동안 적용되는 확장 소재의 경우 시작 시간과 종료 시간에 연속된 두 날짜의 자정(예: 1980-01-31T00:00:00 및 1980-02-01T00:00:00)을 사용합니다. 저작물에 재생 시간이 없는 경우 종료 시간을 시작 시간과 동일하게 설정합니다. 매니페스트에서 시간을 ISO 8601 문자열로 나타냅니다. 날짜 값을 단순화하려면 종료 시간이 제외된다고 가정하는 것이 좋습니다 (예: 일일 확장 소재의 경우 다음날 자정).
예:
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://bucket/table_20190612.csv" ] } ], "startTime": "1980-01-31T00:00:00Z", "endTime": "1980-02-01T00:00:00Z" }
매니페스트 구조 참조
다음 JSON 구조에는 가능한 모든 테이블 업로드 매니페스트 필드가 포함됩니다. 다음 매니페스트 필드 정의 섹션에서 필드 정의를 찾습니다.
{ "name": <string>, "sources": [ { "uris": [ <string> ], "charset": <string>, "maxErrorMeters": <double>, "maxVertices": <int32>, "crs": <string>, "geodesic": <boolean>, "primaryGeometryColumn": <string>, "xColumn": <string>, "yColumn": <string>, "dateFormat": <string>, "csvDelimiter": <string>, "csvQualifier": <string>, } ], "uriPrefix": <string>, "startTime": { "seconds": <integer> }, "endTime": { "seconds": <integer> }, "properties": { <unspecified> } }
매니페스트 필드 정의
이름
string
만들려는 확장 소재의 이름입니다.
name
의 형식은 'projects/*/assets/**'입니다(예: projects/earthengine-legacy/assets/users/USER/ASSET
).
소스
list
테이블 파일 및 해당 사이드카의 속성을 정의하는 필드 목록입니다. 자세한 내용은 다음 sources
사전 요소 필드를 참고하세요.
sources[i].uris
list
처리할 데이터의 URI 목록입니다. 현재 Google Cloud Storage URI만 지원됩니다. 각 URI는 gs://bucket-id/object-id
형식으로 지정되어야 합니다.
기본 객체는 목록의 첫 번째 요소여야 하며 사이드카는 그 뒤에 나열되어야 합니다. 각 URI 앞에 TableManifest.uri_prefix
가 추가됩니다(설정된 경우).
sources[i].charset
string
문자열 디코딩에 사용할 기본 문자 집합의 이름입니다. 비어 있으면 기본적으로 문자 집합 'UTF-8'이 가정됩니다.
sources[i].maxErrorMeters
double
좌표계 간에 도형을 변환할 때 허용되는 최대 오류(미터)입니다. 비워 두면 기본적으로 최대 오류는 1미터입니다.
sources[i].maxVertices
int32
최대 정점 수입니다. 0이 아니면 도형이 공간적으로 서로 연결되지 않은 여러 부분으로 각각 이 한도 이하로 세분화됩니다.
sources[i].crs
string
지정되지 않은 도형의 좌표 참조 시스템을 지정하는 기본 CRS 코드 또는 WKT 문자열입니다. 비워 두면 기본값은 EPSG:4326입니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.
sources[i].geodesic
boolean
달리 지정되지 않은 도형의 가장자리를 해석하기 위한 기본 전략입니다. false인 경우 투영에서 가장자리가 직선입니다. true이면 지구 표면에서 가장 짧은 경로를 따라 모서리가 곡선이 됩니다. 비워 두면 CRS가 투영된 좌표계인 경우 기본값은 false입니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.
sources[i].primaryGeometryColumn
string
도형 열이 2개 이상인 경우 행의 기본 도형으로 사용할 도형 열입니다.
비워두고 도형 열이 두 개 이상 있는 경우, 발견된 첫 번째 도형 열이 사용됩니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.
sources[i].xColumn
string
점 도형을 추론하기 위한 숫자 x 좌표 열의 이름입니다. yColumn
도 지정되어 있고 두 열에 모두 숫자 값이 포함된 경우 CRS에 지정된 좌표계의 x,y 값으로 점 도형 열이 구성됩니다. 공백으로 두고 CRS가 투영된 좌표계를 지정하지 않으면 기본값은 'longitude'입니다. 이 필드를 비워두고 CRS가 투영된 좌표계를 지정하면 기본값은 빈 문자열이 되고 점 도형이 생성되지 않습니다.
생성된 점 도형 열의 이름은 {xColumn}_{yColumn}_N
입니다. 여기서 {xColumn}_{yColumn}
라는 열이 이미 있는 경우 {xColumn}_{yColumn}_N
가 고유하도록 N이 추가됩니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.
sources[i].yColumn
string
점 도형을 추론하기 위한 숫자 y 좌표 열의 이름입니다. xColumn
도 지정되어 있고 두 열에 모두 숫자 값이 포함된 경우 CRS에 지정된 좌표계의 x,y 값으로 점 도형 열이 구성됩니다. 이 필드를 비워두고 CRS가 투영된 좌표계를 지정하지 않으면 기본값은 'latitude'입니다. 이 필드를 비워두고 CRS가 투영된 좌표계를 지정하면 기본값은 빈 문자열이 되고 점 도형이 생성되지 않습니다.
생성된 점 도형 열의 이름은 {xColumn}_{yColumn}_N
입니다. 여기서 {xColumn}_{yColumn}
라는 열이 이미 있는 경우 {xColumn}_{yColumn}_N
가 고유하도록 N이 추가됩니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.
sources[i].dateFormat
string
날짜를 인코딩하는 필드를 파싱하는 형식입니다. 형식 패턴은 Joda-Time DateTimeFormat 클래스 문서에 설명된 대로여야 합니다. 비워 두면 날짜가 문자열로 가져옵니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.
sources[i].csvDelimiter
string
CSV 파일을 처리할 때 행의 열 값 간에 구분자로 사용되는 단일 문자입니다. 공백으로 두면 기본값은 ','
입니다.
CSV 소스만 해당합니다.
sources[i].csvQualifier
string
CSV 파일을 처리할 때 열 값을 묶는 문자('따옴표 문자'라고도 함)입니다. 공백으로 두면 기본값은 "
입니다.
CSV 소스만 해당합니다.
열 값이 한정자로 묶이지 않으면 선행 및 후행 공백이 잘립니다. 예를 들면 다음과 같습니다.
..., test,... <== this value is not qualified becomes the string value: "test" <== leading whitespace is stripped
...," test",... <== this value IS qualified with quotes becomes the string value: " test" <== leading whitespace remains!
uriPrefix
string
매니페스트에 정의된 모든 uris
앞에 추가되는 선택적 접두사입니다.
startTime
integer
저작물과 연결된 타임스탬프입니다(있는 경우). 일반적으로 데이터가 수집된 시간에 해당합니다. 한 달 또는 1년 동안의 평균 값과 같이 시간 간격에 해당하는 애셋의 경우 이 타임스탬프는 해당 간격의 시작에 해당합니다. 에포크(1970-01-01) 이후의 초 및 (선택사항) 나노초로 지정됩니다. UTC 시간대라고 가정합니다.
endTime
integer
한 달 또는 1년 동안의 평균 값과 같이 시간 간격에 해당하는 애셋의 경우 이 타임스탬프는 해당 간격의 끝 (제외)에 해당합니다. 에포크(1970-01-01) 이후의 초 및 (선택사항) 나노초로 지정됩니다. UTC 시간대라고 가정합니다.
속성
dictionary
키-값 쌍의 임의의 평면 사전입니다. 키는 문자열이어야 하며 값은 숫자 또는 문자열일 수 있습니다. 사용자 업로드 저작물에는 아직 목록 값이 지원되지 않습니다.
columnDataTypeOverrides
dictionary
자동 유형 감지가 제대로 작동하지 않으면 열 이름을 키로, COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC, COLUMN_DATA_TYPE_LONG 상수 중 하나를 값으로 사용하여 이 필드를 사용하세요.
제한사항
JSON 매니페스트 크기
JSON 매니페스트 파일 크기 제한은 10MB입니다. 업로드할 파일이 많은 경우 데이터 세트를 설명하는 데 필요한 문자 수를 줄이는 방법을 고려하세요. 예를 들어 uriPrefix
필드를 사용하여 uris
목록의 각 URI에 GCP 버킷 경로를 제공할 필요가 없습니다. 크기를 더 줄여야 한다면 파일 이름을 줄여 보세요.