This example creates three different presentation styles for a dataset from the USGS recent earthquakes feed.
Check out the reference documentation for the data layer.
Default style
Default style: map
Default style: code example
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data: any) { map.data.addGeoJson(data); } 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"), { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json", ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); } 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>Default Data Layer: Earthquakes</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>
Try Sample
Simple style
Simple style: map
Simple style: code example
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); // Add a basic style. map.data.setStyle((feature) => { const mag = Math.exp(parseFloat(feature.getProperty("mag") as string)) * 0.1; return /** @type {google.maps.Data.StyleOptions} */ { icon: { path: google.maps.SymbolPath.CIRCLE, scale: mag, fillColor: "#f00", fillOpacity: 0.35, strokeWeight: 0, }, }; }); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data: any) { map.data.addGeoJson(data); } 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"), { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json", ); document.getElementsByTagName("head")[0].appendChild(script); // Add a basic style. map.data.setStyle((feature) => { const mag = Math.exp(parseFloat(feature.getProperty("mag"))) * 0.1; return /** @type {google.maps.Data.StyleOptions} */ { icon: { path: google.maps.SymbolPath.CIRCLE, scale: mag, fillColor: "#f00", fillOpacity: 0.35, strokeWeight: 0, }, }; }); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); } 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>Simple Data Layer: Earthquakes</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>
Try Sample
Advanced style
Advanced style: map
Advanced style: code example
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { center: { lat: 20, lng: -160 }, zoom: 2, styles: mapStyle, }); map.data.setStyle(styleFeature); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data: any) { map.data.addGeoJson(data); } function styleFeature(feature: google.maps.Data.Feature) { const low = [151, 83, 34]; // color of mag 1.0 const high = [5, 69, 54]; // color of mag 6.0 and above const minMag = 1.0; const maxMag = 6.0; // fraction represents where the value sits between the min and max let mag = feature.getProperty("mag") as number; const fraction = (Math.min(mag, maxMag) - minMag) / (maxMag - minMag); const color = interpolateHsl(low, high, fraction); return { icon: { path: google.maps.SymbolPath.CIRCLE, strokeWeight: 0.5, strokeColor: "#fff", fillColor: color, fillOpacity: 2 / mag, // while an exponent would technically be correct, quadratic looks nicer scale: Math.pow(mag, 2), }, zIndex: Math.floor(mag), }; } function interpolateHsl(lowHsl: number[], highHsl: number[], fraction: number) { const color: number[] = []; for (let i = 0; i < 3; i++) { // Calculate color based on the fraction. color.push((highHsl[i] - lowHsl[i]) * fraction + lowHsl[i]); } return "hsl(" + color[0] + "," + color[1] + "%," + color[2] + "%)"; } const mapStyle: google.maps.MapTypeStyle[] = [ { featureType: "all", elementType: "all", stylers: [{ visibility: "off" }], }, { featureType: "landscape", elementType: "geometry", stylers: [{ visibility: "on" }, { color: "#fcfcfc" }], }, { featureType: "water", elementType: "labels", stylers: [{ visibility: "off" }], }, { featureType: "water", elementType: "geometry", stylers: [{ visibility: "on" }, { hue: "#5f94ff" }, { lightness: 60 }], }, ]; 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"), { center: { lat: 20, lng: -160 }, zoom: 2, styles: mapStyle, }); map.data.setStyle(styleFeature); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json", ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); } function styleFeature(feature) { const low = [151, 83, 34]; // color of mag 1.0 const high = [5, 69, 54]; // color of mag 6.0 and above const minMag = 1.0; const maxMag = 6.0; // fraction represents where the value sits between the min and max let mag = feature.getProperty("mag"); const fraction = (Math.min(mag, maxMag) - minMag) / (maxMag - minMag); const color = interpolateHsl(low, high, fraction); return { icon: { path: google.maps.SymbolPath.CIRCLE, strokeWeight: 0.5, strokeColor: "#fff", fillColor: color, fillOpacity: 2 / mag, // while an exponent would technically be correct, quadratic looks nicer scale: Math.pow(mag, 2), }, zIndex: Math.floor(mag), }; } function interpolateHsl(lowHsl, highHsl, fraction) { const color = []; for (let i = 0; i < 3; i++) { // Calculate color based on the fraction. color.push((highHsl[i] - lowHsl[i]) * fraction + lowHsl[i]); } return "hsl(" + color[0] + "," + color[1] + "%," + color[2] + "%)"; } const mapStyle = [ { featureType: "all", elementType: "all", stylers: [{ visibility: "off" }], }, { featureType: "landscape", elementType: "geometry", stylers: [{ visibility: "on" }, { color: "#fcfcfc" }], }, { featureType: "water", elementType: "labels", stylers: [{ visibility: "off" }], }, { featureType: "water", elementType: "geometry", stylers: [{ visibility: "on" }, { hue: "#5f94ff" }, { lightness: 60 }], }, ]; 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>Advanced Data Layer: Earthquakes</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>