Tworzenie zbioru danych składa się z 2 etapów:
Wyślij żądanie utworzenia zbioru danych.
Poproś o przesłanie danych do zbioru danych.
Wymagania wstępne
Podczas tworzenia zbioru danych:
- Nazwy wyświetlane muszą być niepowtarzalne w obrębie projektu Google Cloud.
- Wyświetlana nazwa musi mieć mniej niż 64 bajty (znaki te są reprezentowane w formacie UTF-8, dlatego w niektórych językach każdy znak może być reprezentowany przez wiele bajtów).
- Opisy muszą mieć mniej niż 1000 bajtów.
Podczas przesyłania danych:
- Obsługiwane typy plików to CSV, GeoJSON i KML.
- Maksymalny obsługiwany rozmiar pliku to 350 MB.
- Nazwy kolumn atrybutów nie mogą zaczynać się od ciągu „?_”.
- Trójwymiarowe geometrie nie są obsługiwane. Obejmuje to sufiks „Z” w formacie WKT oraz współrzędne wysokości w formacie GeoJSON.
Wymagania GeoJSON
Interfejs Maps Datasets API obsługuje bieżącą specyfikację GeoJSON. Interfejs Maps Datasets API obsługuje też pliki GeoJSON, które zawierają dowolny z tych typów obiektów:
- Obiekty geometryczne. Obiekt geometryczny to kształt przestrzenny określany jako suma punktów, linii i wielokątów z opcjonalnymi otworami.
- Obiekty funkcji. Obiekt cech zawiera geometrię i dodatkowe pary nazwa/wartość, których znaczenie jest charakterystyczne dla aplikacji.
- Kolekcje funkcji. Kolekcja cech to zbiór obiektów cech.
Interfejs Maps Datasets API nie obsługuje plików GeoJSON, które zawierają dane w układzie współrzędnych (CRS) innym niż WGS84.
Więcej informacji na temat GeoJSON znajdziesz w artykule Zgodność z RFC 7946.
Wymagania dotyczące plików KML
Interfejs Maps Datasets API ma następujące wymagania:
- Wszystkie adresy URL muszą być lokalne (lub względne) w stosunku do samego pliku.
- Obsługiwane są geometrie punktów, linii i wielokątów.
- Wszystkie atrybuty danych są traktowane jako ciągi znaków.
- Ikony lub
<styleUrl>
zdefiniowane poza plikiem. - Linki sieciowe, np.
<NetworkLink>
- warstwy nad powierzchnią, takie jak
<GroundOverlay>
- geometrie 3D lub tagi związane z wysokością, np.
<altitudeMode>
- Specyfikacje aparatu, np.
<LookAt>
- Style zdefiniowane w pliku KML.
Wymagania dotyczące pliku CSV
W przypadku plików CSV obsługiwane nazwy kolumn są wymienione poniżej w kolejności uzależnionej od ich priorytetu:
latitude
,longitude
lat
,long
x
,y
wkt
(Znany tekst)address
,city
,state
,zip
address
- Pojedyncza kolumna zawierająca wszystkie dane adresowe, np.
1600 Amphitheatre Parkway Mountain View, CA 94043
Twój plik zawiera np. kolumny o nazwie x
, y
i wkt
.
Ponieważ kolumny x
i y
mają wyższy priorytet, co wynika z kolejności obsługiwanych nazw kolumn na liście powyżej, używane są wartości z kolumn x
i y
, a kolumna wkt
jest ignorowana.
Ponadto:
- Każda nazwa kolumny musi należeć do jednej kolumny. Oznacza to, że nie możesz mieć kolumny o nazwie
xy
, która zawiera zarówno dane współrzędnych x, jak i y. Współrzędne x i y muszą znajdować się w osobnych kolumnach. - Wielkość liter w nazwach kolumn nie jest rozróżniana.
- Kolejność nazw kolumn nie ma znaczenia. Jeśli na przykład plik CSV zawiera kolumny
lat
ilong
, mogą one występować w dowolnej kolejności.
Postępowanie w przypadku błędów przesyłania danych
Podczas przesyłania danych do zbioru danych możesz napotkać jeden z częstych błędów opisanych w tej sekcji.
Błędy GeoJSON
Typowe błędy GeoJSON:
- Brak pola
type
lubtype
nie jest ciągiem znaków. Przesłany plik danych GeoJSON musi zawierać pole ciągu znaków o nazwietype
w każdej definicji obiektu cechy i definicji obiektu Geometry.
Błędy KML
Typowe błędy w formacie KML to:
- Plik danych nie może zawierać żadnych nieobsługiwanych funkcji KML wymienionych powyżej. W przeciwnym razie import danych może się nie udać.
Błędy pliku CSV
Typowe błędy w pliku CSV:
- W niektórych wierszach brakuje wartości kolumny geometrycznej. Wszystkie wiersze w pliku CSV muszą zawierać niepuste wartości kolumn geometrycznych. Kolumny geometryczne:
latitude
,longitude
lat
,long
x
,y
wkt
address
,city
,state
,zip
address
- Pojedyncza kolumna zawierająca wszystkie dane adresowe, np.
1600 Amphitheatre Parkway Mountain View, CA 94043
- Jeśli kolumny geometryczne to
x
iy
, upewnij się, że wybrane jednostki to długość i szerokość geograficzna. Niektóre publiczne zbiory danych korzystają z różnych układów współrzędnych w nagłówkachx
iy
. Jeśli zostaną użyte nieprawidłowe jednostki, zbiór danych może się zaimportować, ale wyrenderowane dane mogą wskazywać punkty zbioru danych w nieoczekiwanych lokalizacjach.
Prześlij prośbę o utworzenie zbioru danych
Utwórz zbiór danych, wysyłając żądanie POST
do punktu końcowego zbiorów danych:
https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets
Przekaż do żądania treść JSON, która określa zbiór danych. Musisz:
Określ
displayName
zbioru danych. WartośćdisplayName
musi być unikalna dla wszystkich zbiorów danych.Ustaw
usage
naUSAGE_DATA_DRIVEN_STYLING
.
Na przykład:
curl -X POST -d '{ "displayName": "My Test Dataset", "usage": "USAGE_DATA_DRIVEN_STYLING" }' \ -H 'X-Goog-User-Project: PROJECT_NUMBER_OR_ID' \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $TOKEN" \ https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets
Odpowiedź zawiera identyfikator zbioru danych w formacie projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID
wraz z dodatkowymi informacjami. Używaj identyfikatora zbioru danych przy wysyłaniu żądań aktualizacji lub modyfikacji zbioru danych.
{ "name": "projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46", "displayName": "My Test Dataset", "usage": [ "USAGE_DATA_DRIVEN_STYLING" ], "createTime": "2022-08-15T17:50:00.189682Z", "updateTime": "2022-08-15T17:50:00.189682Z" }
Prześlij prośbę o przesłanie danych do zbioru danych
Po utworzeniu zbioru danych prześlij do niego dane z Google Cloud Storage lub z pliku lokalnego.
Prześlij dane z Cloud Storage
Aby przesłać dane z Cloud Storage do zbioru danych, wyślij do punktu końcowego zbiorów danych żądanie POST
, które zawiera też identyfikator zbioru danych:
https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID:import
W treści żądania JSON:
Użyj
inputUri
, aby określić ścieżkę pliku do zasobu zawierającego dane w Cloud Storage. Ścieżka ma postaćgs://GCS_BUCKET/FILE
.Użytkownik wysyłający żądanie musi mieć rolę Wyświetlający obiekty Cloud Storage lub dowolną inną rolę z uprawnieniem
storage.objects.get
. Więcej informacji o zarządzaniu dostępem do Cloud Storage znajdziesz w artykule Omówienie kontroli dostępu.Użyj operatora
fileFormat
, aby określić format pliku danych w formacieFILE_FORMAT_GEOJSON
(plik GeoJson),FILE_FORMAT_KML
(plik KML) lubFILE_FORMAT_CSV
(plik CSV).
Na przykład:
curl -X POST -d '{ "gcs_source":{ "inputUri": "gs://my_bucket/my_csv_file", "fileFormat": "FILE_FORMAT_CSV" } }' \ -H 'X-Goog-User-Project: PROJECT_NUMBER_OR_ID' \ -H "content-type: application/json" \ -H "Authorization: Bearer $TOKEN" \ https://mapsplatformdatasets.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46:import
Odpowiedź ma postać:
{ "name": "projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID@VERSION_NUMBER" }
Prześlij dane z pliku
Aby przesłać dane z pliku, wyślij żądanie HTTP POST
do punktu końcowego zbiorów danych, które zawiera też identyfikator zbioru danych:
https://mapsplatformdatasets.googleapis.com/upload/v1/projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID:import
Prośba zawiera:
Nagłówek
Goog-Upload-Protocol
jest ustawiony namultipart
.Właściwość
metadata
określająca ścieżkę do pliku określającego typ danych do przesłania:FILE_FORMAT_GEOJSON
(plik GeoJSON),FILE_FORMAT_KML
(plik KML) lubFILE_FORMAT_CSV
(plik CSV).Zawartość tego pliku ma następujący format:
{"local_file_source": {"file_format": "FILE_FORMAT_GEOJSON"}}
Właściwość
rawdata
określająca ścieżkę do pliku GeoJSON, KML lub CSV zawierającego dane do przesłania.
W tym żądaniu do określenia ścieżki do 2 plików używana jest opcja curl -F
:
curl -X POST \ -H 'X-Goog-User-Project: PROJECT_NUMBER_OR_ID' \ -H "Authorization: Bearer $TOKEN" \ -H "X-Goog-Upload-Protocol: multipart" \ -F "metadata=@csv_metadata_file" \ -F "rawdata=@csv_data_file" \ https://mapsplatformdatasets.googleapis.com/upload/v1/projects/PROJECT_NUMBER_OR_ID/datasets/f57074a0-a8b6-403e-9df1-e9fc46:import
Odpowiedź ma postać:
{ "name": "projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID@VERSION_NUMBER" }