ภาพรวม
คุณสามารถตั้งค่าการเอียงและการหมุน (ส่วนหัว) บนแผนที่เวกเตอร์
โดยรวมพร็อพเพอร์ตี้ heading
และ tilt
เมื่อเริ่มต้นแผนที่ และ
โดยเรียกเมธอด setTilt
และ setHeading
ในแผนที่ ดังต่อไปนี้
ตัวอย่างเช่น เพิ่มปุ่มบางปุ่มลงในแผนที่ซึ่งแสดงการปรับการเอียงแบบเป็นโปรแกรม
และส่วนหัวได้ทีละ 20 องศา
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: 37.7893719, lng: -122.3942, }, zoom: 16, heading: 320, tilt: 47.5, mapId: "90f87356969d889c", } ); const buttons: [string, string, number, google.maps.ControlPosition][] = [ ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER], ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER], ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER], ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER], ]; buttons.forEach(([text, mode, amount, position]) => { const controlDiv = document.createElement("div"); const controlUI = document.createElement("button"); controlUI.classList.add("ui-button"); controlUI.innerText = `${text}`; controlUI.addEventListener("click", () => { adjustMap(mode, amount); }); controlDiv.appendChild(controlUI); map.controls[position].push(controlDiv); }); const adjustMap = function (mode: string, amount: number) { switch (mode) { case "tilt": map.setTilt(map.getTilt()! + amount); break; case "rotate": map.setHeading(map.getHeading()! + amount); break; default: break; } }; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 37.7893719, lng: -122.3942, }, zoom: 16, heading: 320, tilt: 47.5, mapId: "90f87356969d889c", }); const buttons = [ ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER], ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER], ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER], ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER], ]; buttons.forEach(([text, mode, amount, position]) => { const controlDiv = document.createElement("div"); const controlUI = document.createElement("button"); controlUI.classList.add("ui-button"); controlUI.innerText = `${text}`; controlUI.addEventListener("click", () => { adjustMap(mode, amount); }); controlDiv.appendChild(controlUI); map.controls[position].push(controlDiv); }); const adjustMap = function (mode, amount) { switch (mode) { case "tilt": map.setTilt(map.getTilt() + amount); break; case "rotate": map.setHeading(map.getHeading() + amount); break; default: break; } }; } window.initMap = initMap;
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; } .ui-button { background-color: #fff; border: 0; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); margin: 10px; padding: 0 0.5em; font: 400 18px Roboto, Arial, sans-serif; overflow: hidden; height: 40px; cursor: pointer; } .ui-button:hover { background: rgb(235, 235, 235); }
HTML
<html> <head> <title>Tilt and Rotation</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>
ลองใช้ตัวอย่าง
การใช้ท่าทางสัมผัสของเมาส์และแป้นพิมพ์
หากเปิดใช้การเอียงและหมุน (ส่วนหัว) ของผู้ใช้ (อย่างใดอย่างหนึ่ง) แบบเป็นโปรแกรมหรือใน Google Cloud Console) ผู้ใช้ก็จะปรับการเอียงได้ และการหมุนโดยใช้เมาส์และแป้นพิมพ์
- ใช้เมาส์ กดปุ่ม Shift ค้างไว้ จากนั้นคลิกและลากเมาส์ ขึ้นและลงเพื่อปรับการเอียง ขวาและซ้ายเพื่อปรับทิศทาง
- การใช้แป้นพิมพ์ กดแป้น Shift ค้างไว้ แล้วใช้แป้นขึ้นและลง ปุ่มลูกศรสำหรับปรับการเอียง และแป้นลูกศรขวาและซ้ายเพื่อปรับ ส่วนหัว
การปรับการเอียงและทิศทางแบบเป็นโปรแกรม
ใช้เมธอด setTilt()
และ setHeading()
เพื่อปรับการเอียงแบบเป็นโปรแกรม
และทิศทางบนแผนที่เวกเตอร์ ทิศทางที่กล้องหันไป
องศาตามเข็มนาฬิกาโดยเริ่มจากทิศเหนือ ดังนั้น map.setHeading(90)
จะหมุนแผนที่
ให้หันหน้าไปทางทิศตะวันออก มุมเอียงจะวัดจากจุดจอมฟ้า ดังนั้น
map.setTilt(0)
มองไปทางด้านล่าง ในขณะที่ map.setTilt(45)
จะให้ผลลัพธ์
ในมุมมองเอียง
- เรียกใช้
setTilt()
เพื่อตั้งค่ามุมเอียงของแผนที่ ใช้getTilt()
เพื่อรับ ค่าการเอียงปัจจุบัน - เรียก
setHeading()
เพื่อตั้งค่าส่วนหัวของแผนที่ ใช้getHeading()
เพื่อรับ ค่าส่วนหัวปัจจุบัน
หากต้องการเปลี่ยนศูนย์กลางแผนที่โดยคงการเอียงและทิศทางไว้ ให้ใช้
map.setCenter()
หรือ map.panBy()
โปรดทราบว่าช่วงของมุมที่ใช้ได้จะแตกต่างกันไปตามการซูมปัจจุบัน ค่าที่อยู่นอกช่วงนี้จะถูกบีบให้เป็นค่าที่อนุญาตในปัจจุบัน
คุณยังใช้เมธอด moveCamera
เพื่อเปลี่ยนส่วนหัวแบบเป็นโปรแกรมได้ด้วย
เอียง จัดกึ่งกลาง และซูม ดูข้อมูลเพิ่มเติม
ผลกระทบต่อวิธีการอื่นๆ
เมื่อใช้การเอียงหรือการหมุนกับแผนที่ ลักษณะการทำงานของ Maps JavaScript API อื่นๆ ที่ได้รับผลกระทบ
map.getBounds()
จะแสดงผลกรอบล้อมรอบที่เล็กที่สุดที่มี ภูมิภาคที่มองเห็นได้ เมื่อใช้การเอียง ขอบเขตที่แสดงผลอาจแสดง ขอบเขตที่ใหญ่กว่าพื้นที่ที่มองเห็นได้ของวิวพอร์ตของแผนที่map.fitBounds()
จะรีเซ็ตการเอียงและมุ่งหน้าไปที่ 0 ก่อนที่จะปรับให้พอดี ขอบเขตmap.panToBounds()
จะรีเซ็ตการเอียงและมุ่งหน้าไปที่ 0 ก่อนที่จะเลื่อน ขอบเขตmap.setTilt()
ยอมรับค่าใดก็ได้ แต่จำกัดการเอียงสูงสุดตาม ระดับการซูมแผนที่ปัจจุบันmap.setHeading()
ยอมรับค่าใดๆ และจะแก้ไขค่านั้นเพื่อให้พอดีกับ ช่วง [0, 360]