ทำให้ฟีเจอร์ข้อมูลตอบสนองต่อเหตุการณ์ mousemove และ click แล้วใช้เหตุการณ์ดังกล่าวเพื่อเปลี่ยนลักษณะที่ปรากฏของฟีเจอร์ตามการโต้ตอบของผู้ใช้
เปิดใช้เหตุการณ์เลเยอร์ชุดข้อมูล
ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้เหตุการณ์ในเลเยอร์ชุดข้อมูล
ลงทะเบียนเลเยอร์ชุดข้อมูลสำหรับการแจ้งเตือนเหตุการณ์โดยเรียกใช้ฟังก์ชัน
addListener()ในเลเยอร์ชุดข้อมูลสำหรับแต่ละเหตุการณ์ที่ต้องการลงทะเบียน ในตัวอย่างนี้ แผนที่ยังได้รับ Listener ด้วยTypeScript
datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } });
JavaScript
datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } });
เพิ่มโค้ดตัวจัดการเหตุการณ์เพื่อจัดรูปแบบฟีเจอร์ที่เลือกตามประเภทการโต้ตอบ
TypeScript
// Note, 'globalid' is an attribute in this Dataset. function handleClick(event: google.maps.FeatureMouseEvent) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event: google.maps.FeatureMouseEvent) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; }
JavaScript
// Note, 'globalid' is an attribute in this Dataset. function handleClick(event) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; }
ใช้ฟังก์ชันการจัดรูปแบบฟีเจอร์เพื่อใช้รูปแบบ ฟังก์ชันการจัดรูปแบบฟีเจอร์ที่แสดงที่นี่จะใช้รูปแบบตามเงื่อนไขตามประเภทการโต้ตอบ โดยกำหนดรูปแบบไว้ 3 รูปแบบ ได้แก่ รูปแบบหนึ่งเพื่อทำให้เส้นขอบเป็นตัวหนาเมื่อเกิดเหตุการณ์
mousemoveอีกรูปแบบหนึ่งเพื่อเปลี่ยนพื้นหลังเมื่อเกิดเหตุการณ์clickและรูปแบบเริ่มต้นTypeScript
const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params: google.maps.FeatureStyleFunctionOptions) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleMouseMove; } return styleDefault; }
JavaScript
const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleMouseMove; } return styleDefault; }
โค้ดตัวอย่างที่สมบูรณ์
TypeScript
const mapElement = document.querySelector('gmp-map')!; let innerMap: google.maps.Map; let lastInteractedFeatureIds: string[] = []; let lastClickedFeatureIds: string[] = []; let datasetLayer: google.maps.FeatureLayer; // Note, 'globalid' is an attribute in this Dataset. function handleClick(event: google.maps.FeatureMouseEvent) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event: google.maps.FeatureMouseEvent) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for NYC park data. const datasetId = 'a75dd002-ad20-4fe6-af60-27cd2ed636b4'; datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } }); } const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params: google.maps.FeatureStyleFunctionOptions) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleMouseMove; } return styleDefault; } void init();
JavaScript
const mapElement = document.querySelector('gmp-map'); let innerMap; let lastInteractedFeatureIds = []; let lastClickedFeatureIds = []; let datasetLayer; // Note, 'globalid' is an attribute in this Dataset. function handleClick(event) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for NYC park data. const datasetId = 'a75dd002-ad20-4fe6-af60-27cd2ed636b4'; datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } }); } const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleMouseMove; } return styleDefault; } void init();