Panoramica
Scopri come importare dati GeoJSON da un'origine locale o remota e visualizzarli sulla mappa. Questo tutorial utilizza la mappa di seguito per illustrare varie tecniche per importare dati nelle mappe.
La sezione seguente mostra l'intero codice necessario per creare la mappa in questo tutorial.
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 2, center: new google.maps.LatLng(2.8, -187.3), mapTypeId: "terrain", }); // Create a <script> tag and set the USGS URL as the source. const script = document.createElement("script"); // This example uses a local copy of the GeoJSON stored at // http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp script.src = "https://developers.google.com/maps/documentation/javascript/examples/json/earthquake_GeoJSONP.js"; document.getElementsByTagName("head")[0].appendChild(script); } // Loop through the results array and place a marker for each // set of coordinates. const eqfeed_callback = function (results: any) { for (let i = 0; i < results.features.length; i++) { const coords = results.features[i].geometry.coordinates; const latLng = new google.maps.LatLng(coords[1], coords[0]); new google.maps.Marker({ position: latLng, map: map, }); } }; declare global { interface Window { initMap: () => void; eqfeed_callback: (results: any) => void; } } window.initMap = initMap; window.eqfeed_callback = eqfeed_callback;
JavaScript
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 2, center: new google.maps.LatLng(2.8, -187.3), mapTypeId: "terrain", }); // Create a <script> tag and set the USGS URL as the source. const script = document.createElement("script"); // This example uses a local copy of the GeoJSON stored at // http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp script.src = "https://developers.google.com/maps/documentation/javascript/examples/json/earthquake_GeoJSONP.js"; document.getElementsByTagName("head")[0].appendChild(script); } // Loop through the results array and place a marker for each // set of coordinates. const eqfeed_callback = function (results) { for (let i = 0; i < results.features.length; i++) { const coords = results.features[i].geometry.coordinates; const latLng = new google.maps.LatLng(coords[1], coords[0]); new google.maps.Marker({ position: latLng, map: map, }); } }; window.initMap = initMap; window.eqfeed_callback = eqfeed_callback;
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ #map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; }
HTML
<html>
<head>
<title>Earthquake Markers</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<div id="map"></div>
<!--
The `defer` attribute causes the script to execute after the full HTML
document has been parsed. For non-blocking uses, avoiding race conditions,
and consistent behavior across browsers, consider loading using Promises. See
https://developers.google.com/maps/documentation/javascript/load-maps-js-api
for more information.
-->
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
defer
></script>
</body>
</html>Caricamento di dati
Questa sezione mostra come caricare i dati dallo stesso dominio dell'applicazione API Maps JavaScript o da un dominio diverso.
Caricamento dei dati dallo stesso dominio
Il livello dati di Google Maps fornisce un contenitore per dati geospaziali arbitrari (incluso GeoJSON). Se i tuoi dati si trovano in un file ospitato sullo stesso dominio
dell'applicazione API Maps JavaScript, puoi caricarli
utilizzando il metodo map.data.loadGeoJson(). Il file deve trovarsi nello stesso dominio,
ma puoi ospitarlo in un sottodominio
diverso. Ad esempio, puoi effettuare una richiesta a files.example.com da
www.example.com.
map.data.loadGeoJson('data.json');
Caricamento dei dati tra i domini
Puoi anche richiedere dati da un dominio diverso dal tuo, se la configurazione del dominio lo consente. Lo standard per questa autorizzazione è chiamato condivisione delle risorse multiorigine (CORS). Se un dominio ha consentito le richieste multiorigine, l'intestazione della risposta deve includere la seguente dichiarazione:
Access-Control-Allow-Origin: *
Utilizza gli Strumenti per sviluppatori di Chrome (DevTools) per scoprire se un dominio ha attivato CORS.

Il caricamento dei dati da un dominio di questo tipo è uguale al caricamento di JSON dallo stesso dominio:
map.data.loadGeoJson('http://www.CORS-ENABLED-SITE.com/data.json');
Richiesta di JSONP
Per utilizzare questa tecnica, il dominio di destinazione deve supportare le richieste JSONP.
Per richiedere JSONP, utilizza createElement() per aggiungere un tag script
all'intestazione del documento.
var script = document.createElement('script');
script.src = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp';
document.getElementsByTagName('head')[0].appendChild(script);
Quando lo script viene eseguito, il dominio di destinazione passa i dati come argomento a un altro script, solitamente denominato callback(). Il dominio di destinazione definisce il nome dello script di callback, che è il primo nome nella pagina quando carichi l'URL di destinazione in un browser.
Ad esempio, carica
http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp
nella finestra del browser per visualizzare il nome del callback come eqfeed_callback.

Devi definire lo script di callback nel tuo codice:
function eqfeed_callback(response) {
map.data.addGeoJson(response);
}
Utilizza il metodo addGeoJson() per posizionare i dati GeoJSON analizzati sulla mappa.
Importare oggetti di geometria GeoJSON
Il metodo map.data.addGeoJson() richiede un oggetto GeoJSON Feature o FeatureCollection analizzato. Non accetta direttamente oggetti di geometria GeoJSON autonomi (Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon o GeometryCollection).
Se l'origine dati o la risposta dell'API restituisce un oggetto di geometria GeoJSON autonomo senza un wrapper "type": "Feature" di primo livello, devi inserirlo in un oggetto Feature prima di chiamare map.data.addGeoJson().
Ad esempio, se la geometria (ad esempio un Polygon) è un oggetto JavaScript analizzato, racchiudilo in un oggetto Feature:
const polygonGeometry = {
type: "Polygon",
coordinates: [
[
[-78.45, 35.82],
[-78.41, 35.73],
[-78.28, 35.66],
[-78.45, 35.82],
],
],
};
const geoJsonFeature = {
type: "Feature",
geometry: polygonGeometry,
};
map.data.addGeoJson(geoJsonFeature);
Se la geometria viene restituita come stringa formattata in JSON (ad esempio, il campo polygon restituito da un avviso meteo o da una risposta relativa a un confine), puoi anche aggiungere un'intestazione e un piè di pagina per formare un Feature GeoJSON valido prima di analizzarlo con JSON.parse():
const geojson_header = "{\"type\":\"Feature\", \"geometry\": ";
const geojson_footer = "}";
map.data.addGeoJson(
JSON.parse(geojson_header + polygon + geojson_footer));
Per ulteriori informazioni sull'utilizzo di geometrie e poligoni nel livello dati, consulta la guida per sviluppatori del livello dati.
Applicare uno stile ai dati
Puoi modificare l'aspetto dei dati aggiungendo dati GeoJSON a un oggetto Map. Per saperne di più sullo stile dei dati, consulta la guida per gli sviluppatori.
Scopri di più
- GeoJSON è un formato aperto ampiamente utilizzato per la codifica di dati geografici, basato su JSON (JavaScript Object Notation). Gli strumenti e i metodi JavaScript progettati per i dati JSON funzionano anche con GeoJSON. Per saperne di più, consulta la guida per gli sviluppatori.
- JSONP sta per JSON con padding. È un metodo di comunicazione utilizzato nei programmi JavaScript eseguiti nei browser web per richiedere dati da un server in un dominio diverso.