ภาพรวม
บทแนะนำนี้จะแสดงวิธีแสดงข้อมูลเป็นภาพใน Google Maps ในฐานะ ตัวอย่างเช่น แผนที่ในบทแนะนำนี้แสดงภาพข้อมูลเกี่ยวกับตำแหน่งของ แผ่นดินไหวและขนาดของอุปกรณ์ เรียนรู้เทคนิคที่จะใช้กับข้อมูลของคุณเอง ของคุณ และสร้างเรื่องราวที่ทรงประสิทธิภาพใน Google Maps ดังเช่นตัวอย่างด้านล่างนี้
2 เฟรมแรกที่เห็นด้านบน (จากซ้ายไปขวา) แสดงแผนที่ที่มี พื้นฐาน เครื่องหมาย และวงกลมที่มีขนาด เฟรมสุดท้ายจะแสดงแผนที่ความหนาแน่น
นำเข้าข้อมูลของคุณ
บทแนะนำนี้ใช้
ข้อมูลแผ่นดินไหวแบบเรียลไทม์จาก
สำนักงานสำรวจธรณีวิทยาแห่งสหรัฐอเมริกา (USGS) เว็บไซต์ USGS นำเสนอ
ข้อมูลในรูปแบบจำนวนมาก ซึ่งคุณสามารถคัดลอกไปยังโดเมนของคุณเพื่อเข้าถึงข้อมูลภายในเครื่องได้
ตามแอปพลิเคชันของคุณ คำขอบทแนะนำนี้
JSONP จากเซิร์ฟเวอร์ USGS โดยตรงโดย
การเพิ่มแท็ก script
ต่อท้ายส่วนหัวของเอกสาร
// Create a script tag and set the USGS URL as the source. 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);
วางเครื่องหมายพื้นฐาน
ตอนนี้คุณได้ดึงข้อมูลเกี่ยวกับตำแหน่งแผ่นดินไหวจาก USGS แล้ว ในแอปพลิเคชันของคุณ คุณสามารถแสดงข้อมูลนั้นใน แผนที่ ส่วนนี้จะแสดงวิธีการสร้างแผนที่ที่ใช้ข้อมูลที่นำเข้าเพื่อ วางเครื่องหมายพื้นฐานที่จุดศูนย์กลางแผ่นดินไหวของทุกตำแหน่งที่เกิดแผ่นดินไหว
ส่วนด้านล่างแสดงรหัสทั้งหมดที่คุณต้องสร้างแผนที่ใน Google Analytics
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>
ลองใช้ตัวอย่าง
ใช้รูปร่างและแผนที่ความหนาแน่นเพื่อปรับแต่งแผนที่
ส่วนนี้จะแสดงวิธีอื่นๆ ในการปรับแต่งชุดข้อมูลที่สมบูรณ์บนแผนที่ ลองพิจารณาแผนที่ที่สร้างขึ้นในส่วนก่อนหน้านี้ของบทแนะนำนี้ แสดงเครื่องหมายในทุกสถานที่ที่เกิดแผ่นดินไหว คุณสามารถปรับแต่งเครื่องหมายเพื่อให้แสดงภาพข้อมูลเพิ่มเติม เช่น สถานที่ที่ เกิดแผ่นดินไหวมากที่สุด และขนาดหรือความลึก
ต่อไปนี้เป็นตัวเลือกบางอย่างในการกำหนดค่าเครื่องหมายพื้นฐาน:
ใช้ขนาดแวดวง:
คุณสามารถวาดวงกลม (หรือรูปร่างอื่นๆ) ที่มีขนาดที่สัมพันธ์กับ ขนาดของแผ่นดินไหวโดยใช้ สัญลักษณ์ ในลักษณะนี้ แผ่นดินไหวขนาดใหญ่จะแสดงเป็นวงแหวนที่ใหญ่ที่สุดบน แผนที่ใช้แผนที่ความหนาแน่น:
เลเยอร์แผนที่ความร้อนในไลบรารีการแสดงข้อมูลผ่านภาพช่วยให้ วิธีแสดงการกระจายตัวของแผ่นดินไหว แผนที่ความหนาแน่นใช้สีเพื่อ แสดงความหนาแน่นของจุดต่างๆ ทำให้ง่ายต่อการเลือกบริเวณที่มี กิจกรรม แผนที่ความหนาแน่นยังใช้WeightedLocations
ได้ด้วย เช่น แผ่นดินไหวขนาดใหญ่จะแสดงอย่างโดดเด่นในแผนที่ความร้อน
ขนาดของวงกลม
แผนที่ด้านล่างแสดงเครื่องหมายที่กำหนดเองโดยใช้วงกลม ขนาดของวงกลม จะเพิ่มขึ้นตามขนาดของแผ่นดินไหวในตำแหน่งนั้นๆ
ส่วนด้านล่างแสดงรหัสทั้งหมดที่คุณต้องสร้างแผนที่ด้วย เครื่องหมายวงกลมที่กำหนดเอง
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 2, center: { lat: -33.865427, lng: 151.196123 }, 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); map.data.setStyle((feature) => { const magnitude = feature.getProperty("mag") as number; return { icon: getCircle(magnitude), }; }); } function getCircle(magnitude: number) { return { path: google.maps.SymbolPath.CIRCLE, fillColor: "red", fillOpacity: 0.2, scale: Math.pow(2, magnitude) / 2, strokeColor: "white", strokeWeight: 0.5, }; } function eqfeed_callback(results: any) { map.data.addGeoJson(results); } 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: { lat: -33.865427, lng: 151.196123 }, 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); map.data.setStyle((feature) => { const magnitude = feature.getProperty("mag"); return { icon: getCircle(magnitude), }; }); } function getCircle(magnitude) { return { path: google.maps.SymbolPath.CIRCLE, fillColor: "red", fillOpacity: 0.2, scale: Math.pow(2, magnitude) / 2, strokeColor: "white", strokeWeight: 0.5, }; } function eqfeed_callback(results) { map.data.addGeoJson(results); } 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 Circles</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>
ลองใช้ตัวอย่าง
แผนที่ความหนาแน่น
แผนที่ความหนาแน่นช่วยให้ผู้ชมเข้าใจการกระจายของแผ่นดินไหวได้ง่ายขึ้น รายงานโดย USGS แทนที่จะวางเครื่องหมายบนจุดศูนย์กลางแต่ละจุด แผนที่ความหนาแน่นใช้สีและรูปร่างเพื่อแสดงการกระจายของข้อมูล ด้วยวิธีนี้ เช่น สีแดงหมายถึงพื้นที่ที่มีแผ่นดินไหวสูง
ส่วนด้านล่างแสดงรหัสทั้งหมดที่คุณต้องสร้างแผนที่นี้
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 2, center: { lat: -33.865427, lng: 151.196123 }, 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); } function eqfeed_callback(results: any) { const heatmapData: google.maps.LatLng[] = []; 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]); heatmapData.push(latLng); } const heatmap = new google.maps.visualization.HeatmapLayer({ data: heatmapData, dissipating: false, 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: { lat: -33.865427, lng: 151.196123 }, 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); } function eqfeed_callback(results) { const heatmapData = []; 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]); heatmapData.push(latLng); } const heatmap = new google.maps.visualization.HeatmapLayer({ data: heatmapData, dissipating: false, 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 Heatmap</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&libraries=visualization&v=weekly" defer ></script> </body> </html>
ลองใช้ตัวอย่าง
ข้อมูลเพิ่มเติม
อ่านเพิ่มเติมเกี่ยวกับหัวข้อต่อไปนี้