Tworzenie zbioru danych to proces dwuetapowy:
Wyślij żądanie utworzenia zbioru danych.
Wyślij żądanie przesłania danych do zbioru danych.
Wymagania wstępne
Podczas tworzenia zbioru danych:
- Wyświetlane nazwy muszą być unikalne w obrębie projektu Google Cloud.
- Wyświetlane nazwy muszą mieć mniej niż 64 bajty (ponieważ te znaki 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ą być mniejsze 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 „?_”.
- Trójwymiarowe geometrie nie są obsługiwane. Obejmuje to sufiks „Z” w formacie WKT i 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 połączenie punktów, linii i wielokątów z opcjonalnymi otworami.
- Obiekty funkcji. Obiekt funkcji 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 o 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.
- Geometria punktów, linii i wielokątów jest obsługiwana.
- Wszystkie atrybuty danych są traktowane jako ciągi znaków.
- Ikony lub
<styleUrl>
zdefiniowane poza plikiem. - Linki sieciowe, takie jak
<NetworkLink>
- Nakładki na powierzchni, np.
<GroundOverlay>
- Geometrie 3D lub wszelkie tagi związane z wysokością, np.
<altitudeMode>
- Specyfikacje aparatu, takie jak
<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 według priorytetu:
latitude
,longitude
lat
,long
x
,y
wkt
(Znany tekst)address
,city
,state
,zip
address
- jedna kolumna zawierająca wszystkie informacje adresowe, np.
1600 Amphitheatre Parkway Mountain View, CA 94043
Twój plik zawiera np. kolumny o nazwach x
, y
i wkt
.
Ponieważ x
i y
mają wyższy priorytet (zgodnie z kolejnością obsługiwanych nazw kolumn z listy powyżej), wartości w kolumnach x
i y
są używane, a kolumna wkt
jest ignorowana.
Ponadto:
- Każda nazwa kolumny musi należeć do jednej kolumny. Oznacza to, że kolumna o nazwie
xy
nie może zawierać danych współrzędnych x i Y. Współrzędne x i y muszą znajdować się w osobnych kolumnach. - W nazwach kolumn nie jest rozróżniana wielkość liter.
- 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.
Obsługa błędów przesyłania danych
Podczas przesyłania danych do zbioru danych może wystąpić 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 Feature i 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 w kolumnie geometrii. 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
- jedna kolumna zawierająca wszystkie informacje adresowe, np.
1600 Amphitheatre Parkway Mountain View, CA 94043
- Jeśli kolumny geometryczne to
x
iy
, sprawdź, czy podane jednostki to długość i szerokość geograficzna. Niektóre publiczne zbiory danych używają różnych układów współrzędnych pod nagłówkamix
iy
. Jeśli zostaną użyte nieprawidłowe jednostki, zbiór danych może zostać zaimportowany, ale wyrenderowane dane mogą wskazywać punkty zbioru danych w nieoczekiwanych lokalizacjach.
wysyłania żądania utworzenia 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 określającą zbiór danych. Musisz:
Określ
displayName
zbioru danych. WartośćdisplayName
musi być unikalna dla wszystkich zbiorów danych.Ustaw wartość
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 postaci 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" }
Wyślij żądanie przesłania danych do zbioru danych
Gdy utworzysz zbiór danych, prześlij do niego dane z Google Cloud Storage lub z pliku lokalnego.
Prześlij dane z Cloud Storage
Aby przesyłać dane z Cloud Storage do zbioru danych, wyślij do punktu końcowego datasets żą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. Ma ona formatgs://GCS_BUCKET/FILE
.Użytkownik przesyłający żądanie musi mieć przypisaną rolę Przeglądający obiekty Cloud Storage lub dowolną inną rolę zawierającą uprawnienie
storage.objects.get
. Więcej informacji o zarządzaniu dostępem do Cloud Storage znajdziesz w omówieniu kontroli dostępu.Użyj właściwości
fileFormat
, aby określić format pliku danych w jednym z tych sposobów:FILE_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 taki format:
{ "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 datasets, 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, która określa 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 taki format:
{ "name": "projects/PROJECT_NUMBER_OR_ID/datasets/DATASET_ID@VERSION_NUMBER" }