กล้องและมุมมอง

เลือกแพลตฟอร์ม แอนดรอยด์ iOS JavaScript

แผนที่ใน Maps SDK สำหรับ Android สามารถเอียงและบิดได้ด้วยท่าทางสัมผัสง่ายๆ ซึ่งช่วยให้ผู้ใช้ปรับแผนที่ให้อยู่ในแนวที่เหมาะกับตนเองได้ ในการซูมทุกระดับ คุณสามารถเลื่อนแผนที่ หรือเปลี่ยนแปลง มุมมองที่มีเวลาในการตอบสนองต่ำมาก เนื่องมาจากร่องรอยที่เล็กลงของ ชิ้นส่วนแผนที่ที่ใช้เวกเตอร์

ตัวอย่างโค้ด

ที่เก็บ ApiDemos ใน GitHub มีตัวอย่างที่สาธิตฟีเจอร์กล้องดังนี้

บทนำ

Maps SDK สำหรับ Android จะแสดงพื้นผิวโลก (ทรงกลม) บนหน้าจอของอุปกรณ์ (ระนาบแบน) โดยใช้การฉายภาพ Mercator เช่นเดียวกับ Google Maps บนเว็บ ในทิศทางตะวันออกและตะวันตก แผนที่จะซ้ำไปเรื่อยๆ เนื่องจากโลกหมุนวนเป็นวงกลมอย่างราบรื่น แผนที่จะจำกัดอยู่ที่ประมาณ 85 องศาเหนือและ 85 องศาใต้ในทิศทางเหนือและใต้

หมายเหตุ: การฉายภาพเมอร์เคเตอร์มีความกว้างตามแนวลองจิจูดแบบจำกัด แต่มีความสูงตามแนวละติจูดแบบไม่จำกัด เรา "ตัด" ภาพแผนที่ฐานโดยใช้การฉาย Mercator ที่ประมาณ +/- 85 องศาเพื่อให้แผนที่ที่ได้เป็นรูปสี่เหลี่ยมจัตุรัส ซึ่งช่วยให้การเลือกชิ้นส่วนแผนที่ทำได้ง่ายขึ้น

Maps SDK สำหรับ Android ช่วยให้คุณเปลี่ยนมุมมองแผนที่ของผู้ใช้ได้โดยแก้ไขกล้องของแผนที่

การเปลี่ยนแปลงกล้องจะไม่ทำให้เกิดการเปลี่ยนแปลงใดๆ กับเครื่องหมาย การวางซ้อน หรืออื่นๆ ภาพกราฟิกที่คุณเพิ่มลงไป แต่คุณอาจต้องเปลี่ยนส่วนที่เพิ่มให้พอดี ได้ดียิ่งขึ้น

เนื่องจากคุณสามารถรับฟังท่าทางสัมผัสของผู้ใช้บนแผนที่ คุณจึงเปลี่ยนแผนที่เพื่อตอบสนองคำขอของผู้ใช้ได้ ตัวอย่างเช่น เมธอด Callback OnMapClickListener.onMapClick() ตอบสนองต่อ แตะครั้งเดียวบนแผนที่ เนื่องจากเมธอดจะได้รับละติจูดและลองจิจูด ของตำแหน่งที่แตะ คุณสามารถตอบสนองโดยเลื่อนหรือซูมไปยังจุดนั้น สามารถใช้วิธีที่คล้ายกันนี้ในการตอบกลับการแตะบนลูกโป่งของเครื่องหมายหรือ สำหรับการตอบสนองต่อท่าทางสัมผัสการลากบนเครื่องหมาย

นอกจากนี้ คุณยังฟังการเคลื่อนไหวของกล้องเพื่อให้แอปได้รับการแจ้งเตือนเมื่อกล้องเริ่มเคลื่อนไหว กำลังเคลื่อนไหว หรือหยุดเคลื่อนไหวได้ด้วย โปรดดูรายละเอียดในคำแนะนำเกี่ยวกับเหตุการณ์การเปลี่ยนแปลงของกล้อง

ตำแหน่งของกล้อง

มุมมองแผนที่ถูกจำลองแบบกล้องที่มองลงไปยังระนาบแบน อันดับ ของกล้อง (ด้วยเหตุนี้การแสดงผลแผนที่) จะถูกกำหนดโดย พร็อพเพอร์ตี้ต่อไปนี้: เป้าหมาย (ตำแหน่งละติจูด/ลองจิจูด) ทิศทาง, เอียง, และซูม

แผนภาพพร็อพเพอร์ตี้ของกล้อง

เป้าหมาย (สถานที่ตั้ง)

เป้าหมายของกล้องคือตำแหน่งของศูนย์กลางแผนที่ ซึ่งระบุเป็นพิกัดละติจูดและลองจิจูด

ละติจูดต้องอยู่ระหว่าง -85 ถึง 85 องศา ค่าที่สูงกว่าหรือต่ำกว่าช่วงนี้จะถูกบีบให้อยู่ภายในค่าที่ใกล้เคียงที่สุดภายในช่วงนี้ ตัวอย่างเช่น การระบุละติจูด 100 จะตั้งค่าไว้ที่ 85 ลองจิจูด อยู่ในช่วง -180 ถึง 180 องศา (รวมค่าแรกและค่าสุดท้าย) ค่าที่สูงกว่าหรือต่ำกว่าค่านี้ จะถูกรวมให้อยู่ภายในช่วง (-180, 180) เช่น 480, 840 และ 1200 จะปัดเศษเป็น 120 องศาทั้งหมด

ทิศทาง (การวางแนว)

ทิศทางของกล้องจะระบุทิศทางของเข็มทิศ ซึ่งวัดเป็นองศาจากทิศเหนือจริง ซึ่งสอดคล้องกับขอบด้านบนของแผนที่ หากคุณลากเส้นแนวตั้งจากจุดศูนย์กลางของแผนที่ไปยังขอบด้านบนของแผนที่ ทิศทางจะสอดคล้องกับทิศทางของกล้อง (วัดเป็นองศา) สัมพันธ์กับทิศเหนือจริง

ทิศทาง 0 หมายความว่าด้านบนของแผนที่ชี้ไปยังทิศเหนือจริง ค่าทิศทาง 90 หมายถึงด้านบนของจุดบนแผนที่ที่ครบกำหนดในทิศตะวันออก (90 องศาบนเข็มทิศ) ค่า 180 หมายความว่าด้านบนของแผนที่ชี้ไปทางทิศใต้

แผนที่ API ช่วยให้คุณเปลี่ยนทิศทางของแผนที่ได้ ตัวอย่างเช่น ผู้ที่ขับรถมักจะหมุนแผนที่ถนนให้สอดคล้องกับทิศทางการเดินทาง ส่วนผู้เดินป่าที่ใช้แผนที่และเข็มทิศมักจะปรับแนวแผนที่เพื่อให้เส้นแนวตั้งชี้ไปทางทิศเหนือ

เอียง (มุมมอง)

การเอียงจะกำหนดตำแหน่งของกล้องบนส่วนโค้งเหนือตำแหน่งกึ่งกลางของแผนที่โดยตรง โดยวัดเป็นองศาจากจุดนัยน์ตา (ทิศทางที่ชี้อยู่ใต้กล้องโดยตรง) ค่า 0 ตรงกับภาพที่กล้องชี้ ค่าที่มากกว่า 0 สอดคล้องกับกล้องที่เอียงลงสู่ขอบฟ้าตามจำนวนองศาที่ระบุ เมื่อคุณเปลี่ยนมุมในการมอง ภาพแผนที่จะปรากฏขึ้นในมุมมองพร้อมกับจุดสนใจที่อยู่ไกลออกไป มีขนาดเล็กลง และจุดสนใจใกล้เคียงมีขนาดใหญ่ขึ้น ภาพต่อไปนี้แสดงกรณีนี้

ในรูปภาพด้านล่าง มุมมองคือ 0 องศา รูปภาพแรกแสดงภาพแผนภาพคร่าวๆ ของเรื่องนี้ โดยตำแหน่ง 1 คือตำแหน่งของกล้อง และตำแหน่ง 2 คือตำแหน่งแผนที่ปัจจุบัน แผนที่ที่แสดงผลจะแสดงอยู่ด้านล่าง

ภาพหน้าจอของแผนที่ที่มีกล้องอยู่ในมุมมอง 0 องศาที่ระดับการซูม 18
แผนที่ที่แสดงพร้อมมุมมองเริ่มต้นของกล้อง
แผนภาพที่แสดงตำแหน่งเริ่มต้นของกล้องโดยตรงเหนือตำแหน่งแผนที่ในมุม 0 องศา
มุมมองเริ่มต้นของกล้อง

ในภาพด้านล่าง มุมในการดูคือ 45 องศา โปรดสังเกตว่ากล้องถ่ายรูป เคลื่อนไปทางกึ่งกลางตามแนวโค้งระหว่างเหนือศีรษะตรง (0 องศา) และพื้น (90 องศา) ไปยังตำแหน่ง 3 กล้องยังคงเล็งไปที่จุดศูนย์กลางของแผนที่ แต่พื้นที่ดังกล่าว แสดงแทนด้วยบรรทัดในตำแหน่ง 4 แล้ว

ภาพหน้าจอของแผนที่ที่มีกล้องอยู่ในมุมมอง 45 องศาที่ระดับการซูม 18
แผนที่ที่แสดงโดยมีมุมมอง 45 องศา
แผนภาพที่แสดงมุมมองของกล้องซึ่งตั้งไว้ที่ 45 องศา โดยที่ยังตั้งระดับการซูมไว้ที่ 18 องศา
มุมมองของกล้อง 45 องศา

แผนที่ในภาพหน้าจอนี้ยังคงอยู่ตรงกลางจุดเดียวกับในแผนที่เดิม แต่มีฟีเจอร์อื่นๆ ปรากฏขึ้นที่ด้านบนของแผนที่ ขณะที่คุณ เพิ่มมุมกล้องออกไปเกิน 45 องศา ฟีเจอร์ต่างๆ ระหว่างกล้องกับแผนที่ ตำแหน่งแสดงใหญ่ขึ้นตามสัดส่วน ในขณะที่จุดสนใจอยู่นอกเหนือจากตำแหน่งแผนที่ มีขนาดเล็กลงตามสัดส่วน ซึ่งทำให้เกิดเอฟเฟกต์ 3 มิติ

ซูม

ระดับการซูมของกล้องจะเป็นตัวกำหนดขนาดของแผนที่ เมื่อซูมที่ใหญ่ขึ้น ดูรายละเอียดเพิ่มเติมได้บนหน้าจอในขณะที่อยู่ในระดับการซูมที่เล็กลง ในโลกได้มากขึ้นบนหน้าจอ ที่ระดับการซูม 0 ขนาดขององค์ประกอบ แผนที่โลกมีความกว้างประมาณ 256dp (ความหนาแน่นของพิกเซลอิสระ)

การขยายระดับการซูม 1 จะเพิ่มความกว้างของโลกบนหน้าจอเป็น 2 เท่า ดังนั้น ที่ระดับการซูม N ความกว้างของโลกจึงเป็นประมาณ 256 * 2N dp เช่น เมื่อซูมระดับ 2 โลกทั้งใบจะกว้างประมาณ 1024 dp

ระดับการซูมไม่จำเป็นต้องเป็นจำนวนเต็ม ช่วงการซูม ระดับที่แผนที่อนุญาตจะขึ้นอยู่กับหลายปัจจัย รวมถึงเป้าหมาย ประเภทแผนที่และขนาดหน้าจอ ระบบจะแปลงตัวเลขที่อยู่นอกช่วงเป็นค่าที่ถูกต้องถัดไปซึ่งอาจเป็นระดับการซูมต่ำสุดหรือระดับการซูมสูงสุด ระดับความละเอียดโดยประมาณที่คุณคาดว่าจะเห็นในแต่ละระดับการซูมมีดังนี้

  • 1: โลก
  • 5: ผืนดินขนาดใหญ่/ทวีป
  • 10: เมือง
  • 15: ถนน
  • 20: อาคาร
รูปภาพต่อไปนี้แสดงลักษณะที่ปรากฏของระดับการซูมต่างๆ
ภาพหน้าจอของแผนที่ที่ระดับการซูม 5
แผนที่ที่ระดับการซูม 5
ภาพหน้าจอของแผนที่ที่ระดับการซูม 15
แผนที่ที่ระดับการซูม 15
ภาพหน้าจอของแผนที่ที่ระดับการซูม 20
แผนที่ที่ระดับการซูม 20

การย้ายกล้อง

Maps API ช่วยให้คุณเปลี่ยนส่วนของโลกที่จะแสดงในแผนที่ได้ ซึ่งทำได้โดยเปลี่ยนตำแหน่งของกล้อง (ตรงข้ามกับ ย้ายแผนที่)

เมื่อเปลี่ยนกล้อง คุณจะมีตัวเลือกในการทำให้ภาพ การเคลื่อนที่ของกล้อง ภาพเคลื่อนไหวจะสอดประสานระหว่างกล้องที่ใช้อยู่ และแอตทริบิวต์กล้องใหม่ นอกจากนี้ คุณยังควบคุม ของภาพเคลื่อนไหว

หากต้องการเปลี่ยนตำแหน่งของกล้อง คุณต้องระบุตำแหน่งที่ต้องการย้ายกล้องโดยใช้ CameraUpdate Maps API ช่วยให้คุณสร้างCameraUpdateได้หลายประเภทโดยใช้CameraUpdateFactory โดยมีตัวเลือกดังต่อไปนี้

การเปลี่ยนระดับการซูมและการตั้งค่าการซูมขั้นต่ำ/สูงสุด

CameraUpdateFactory.zoomIn() และ CameraUpdateFactory.zoomOut() จะแสดง CameraUpdate ที่เปลี่ยนระดับการซูม 1.0 ในขณะที่ พร็อพเพอร์ตี้อื่นๆ ทั้งหมดให้เหมือนกัน

CameraUpdateFactory.zoomTo(float) จะแสดง CameraUpdate ที่เปลี่ยนระดับการซูมเป็นค่าที่ระบุ และยังคงคุณสมบัติอื่นๆ ทั้งหมดไว้เหมือนเดิม

CameraUpdateFactory.zoomBy(float) และ CameraUpdateFactory.zoomBy(float, Point) จะให้ CameraUpdate ที่เพิ่ม (หรือลดหากค่าเป็นลบ) ระดับการซูมตามค่าที่ระบุ ส่วนหลังจะตรึงจุดหนึ่งๆ บนหน้าจอให้อยู่ในตำแหน่งเดิม (ละติจูด/ลองจิจูด) และอาจเปลี่ยนตำแหน่งของกล้องเพื่อให้บรรลุเป้าหมายนี้

การตั้งค่าระดับการซูมขั้นต่ำและ/หรือสูงสุดที่ต้องการอาจเป็นสิ่งที่เป็นประโยชน์ ตัวอย่างเช่น กรณีนี้มีประโยชน์ในการควบคุมประสบการณ์ของผู้ใช้หากแอปแสดงพื้นที่ที่กําหนดไว้รอบๆ จุดที่น่าสนใจ หรือหากคุณใช้การซ้อนทับไทล์ที่กําหนดเองซึ่งมีชุดระดับการซูมที่จํากัด

Kotlin

private lateinit var map: GoogleMap

    map.setMinZoomPreference(6.0f)
    map.setMaxZoomPreference(14.0f)

      

Java

private GoogleMap map;
    map.setMinZoomPreference(6.0f);
    map.setMaxZoomPreference(14.0f);

      

โปรดทราบว่ามีข้อควรพิจารณาด้านเทคนิคที่อาจป้องกันไม่ให้ API ทำงาน การทำให้ผู้ใช้ซูมต่ำหรือสูงเกินไป เช่น ดาวเทียมหรือภูมิประเทศ อาจมีการซูมสูงสุดต่ำกว่าชิ้นส่วนแผนที่ฐาน

การเปลี่ยนตำแหน่งกล้อง

การเปลี่ยนแปลงตำแหน่งทั่วไปมี 2 วิธี CameraUpdateFactory.newLatLng(LatLng) จะแสดง CameraUpdate ที่เปลี่ยนละติจูดและลองจิจูดของกล้อง และเก็บคุณสมบัติอื่นๆ ทั้งหมดไว้ CameraUpdateFactory.newLatLngZoom(LatLng, float) แสดง CameraUpdate ที่เปลี่ยนการตั้งค่า ละติจูด ลองจิจูด และการซูม พร้อมทั้งรักษาคุณสมบัติอื่นๆ ทั้งหมดไว้

หากต้องการเปลี่ยนตำแหน่งกล้องอย่างยืดหยุ่นเต็มที่ ให้ใช้ CameraUpdateFactory.newCameraPosition(CameraPosition) ซึ่งจะให้ CameraUpdate ที่ย้ายกล้องไปยังตำแหน่งที่ต้องการ สามารถรับ CameraPosition ได้โดยตรงโดยใช้ new CameraPosition() หรือกับ CameraPosition.Builder โดยใช้ new CameraPosition.Builder()

การแพนกล้อง (การเลื่อน)

CameraUpdateFactory.scrollBy(float, float) จะให้ CameraUpdate ที่เปลี่ยนละติจูดและลองจิจูดของกล้องเพื่อให้แผนที่เลื่อนตามจำนวนพิกเซลที่ระบุ ค่า x เป็นบวกจะทำให้กล้องเคลื่อนที่ไปยัง เพื่อให้แผนที่ดูเหมือนว่าย้ายไปทางซ้าย Y ที่เป็นบวก จะทำให้กล้องเคลื่อนที่ลง และดูเหมือนว่าแผนที่จะเคลื่อนที่ ขึ้น ในทางกลับกัน ค่า x ที่เป็นค่าลบจะทำให้กล้องเคลื่อนที่ไปทางซ้าย ดูเหมือนว่าแผนที่จะมีการเลื่อนไปด้านขวาและค่า y เป็นลบทำให้ เพื่อเลื่อนขึ้น การเลื่อนจะสัมพันธ์กับการวางแนวปัจจุบันของกล้อง เช่น ถ้ากล้องหมุนไปทางทิศ 90 องศา ให้หันไปทางทิศตะวันออก มีค่าเป็น "ขึ้น"

การกำหนดขอบเขต

การกำหนดขอบเขตของแผนที่

บางครั้งการย้าย กล้องที่บริเวณทั้งหมดของสิ่งที่สนใจสามารถมองเห็นได้ ระดับการซูม ตัวอย่างเช่น หากคุณกำลังแสดงปั๊มน้ำมันทั้งหมดภายใน จากตำแหน่งปัจจุบันของผู้ใช้ไป 5 ไมล์ คุณอาจต้องขยับกล้องแบบนี้ ว่าทุกชิ้นมองเห็นได้บนหน้าจอ วิธีการคือ คำนวณค่า LatLngBounds ที่คุณต้องการให้ปรากฏบนหน้าจอ จากนั้นคุณสามารถใช้ CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int padding) เพื่อรับ CameraUpdate ซึ่งจะเปลี่ยนตำแหน่งกล้องเพื่อให้ LatLngBounds ที่ระบุพอดีกับแผนที่โดยสมบูรณ์ โดยพิจารณาการเว้นวรรค (เป็นพิกเซล) ที่ระบุ CameraUpdate ที่ส่งคืน ต้องแน่ใจว่าระยะห่าง (เป็นพิกเซล) ระหว่างขอบเขตที่กำหนดและขอบของ แผนที่จะมีขนาดเท่ากับระยะห่างจากขอบที่ระบุไว้เป็นอย่างน้อย โปรดทราบว่าการเอียงและ ทิศทางของแผนที่จะเป็น 0 ทั้งคู่

Kotlin

val australiaBounds = LatLngBounds(
    LatLng((-44.0), 113.0),  // SW bounds
    LatLng((-10.0), 154.0) // NE bounds
)
map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0))

      

Java

LatLngBounds australiaBounds = new LatLngBounds(
    new LatLng(-44, 113), // SW bounds
    new LatLng(-10, 154)  // NE bounds
);
map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0));

      

การจัดศูนย์กลางแผนที่ภายในพื้นที่

ในบางกรณี คุณอาจต้องการให้กล้องอยู่ตรงกลางภายในขอบเขตแทน รวมถึงขอบที่สุดโต่ง เช่น ในการทำให้กล้องจับภาพประเทศหนึ่งๆ ตรงกลางขณะซูมอย่างต่อเนื่อง ในกรณีนี้ คุณสามารถใช้วิธีการที่คล้ายกัน โดยสร้าง LatLngBounds และใช้ CameraUpdateFactory.newLatLngZoom(LatLng latLng, float zoom) กับ LatLngBoundsgetCenter() วิธี เมธอด getCenter() จะแสดงผลจุดศูนย์กลางทางภูมิศาสตร์ของ LatLngBounds

Kotlin

val australiaBounds = LatLngBounds(
    LatLng((-44.0), 113.0),  // SW bounds
    LatLng((-10.0), 154.0) // NE bounds
)
map.moveCamera(CameraUpdateFactory.newLatLngZoom(australiaBounds.center, 10f))

      

Java

LatLngBounds australiaBounds = new LatLngBounds(
    new LatLng(-44, 113), // SW bounds
    new LatLng(-10, 154)  // NE bounds
);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(australiaBounds.getCenter(), 10));

      

การโอเวอร์โหลดเมธอด newLatLngBounds(boundary, width, height, padding) ช่วยให้คุณระบุความกว้างและความสูงของสี่เหลี่ยมผืนผ้าเป็นพิกเซลได้ โดยมีจุดประสงค์เพื่อให้สอดคล้องกับขนาดของแผนที่ สี่เหลี่ยมผืนผ้าจะอยู่ในตําแหน่งซึ่งตรงกับจุดศูนย์กลางของมุมมองแผนที่ (เพื่อให้สี่เหลี่ยมผืนผ้าตรงกับมุมมองแผนที่หากระบุขนาดเดียวกันกับมุมมองแผนที่) แสดงผล CameraUpdate จะย้ายกล้องตามที่มีการกำหนด LatLngBounds จะอยู่ตรงกลางของหน้าจอภายในสี่เหลี่ยมผืนผ้าที่กำหนดที่ ระดับการซูมที่ดีที่สุดเท่าที่จะเป็นไปได้ โดยคำนึงถึงระยะห่างจากขอบที่จำเป็น

หมายเหตุ: โปรดใช้เฉพาะวิธีที่ง่ายกว่าเท่านั้น newLatLngBounds(boundary, padding) เพื่อสร้าง CameraUpdate หากจะนำมาใช้เพื่อย้าย กล้องหลังจากแผนที่ผ่านเลย์เอาต์ ในระหว่างการจัดวาง API คำนวณขอบเขตการแสดงผลของแผนที่ซึ่งจำเป็นต่อการสร้าง ฉายภาพที่กรอบล้อมรอบ ในทางกลับกัน คุณสามารถใช้ CameraUpdate ที่แสดงผลโดยเมธอดที่ซับซ้อนกว่า newLatLngBounds(boundary, width, height, padding) ได้ทุกเมื่อ แม้กระทั่งก่อนที่แผนที่จะได้รับการเลย์เอาต์ เนื่องจาก API จะคํานวณขอบเขตการแสดงผลจากอาร์กิวเมนต์ที่คุณส่ง

การจำกัดการแพนกล้องของผู้ใช้ไปยังพื้นที่ที่กำหนด

ในสถานการณ์ข้างต้น คุณจะกำหนดขอบเขตของแผนที่ได้ แต่ผู้ใช้จะเลื่อนหรือเลื่อนออกนอกขอบเขตเหล่านี้ได้ คุณอาจต้องจำกัดขอบเขตจุดศูนย์กลางละติจูด/ลองจิจูดของจุดโฟกัสของแผนที่ (เป้าหมายของกล้อง) เพื่อให้ผู้ใช้เลื่อนและเลื่อนดูได้ภายในขอบเขตเหล่านี้เท่านั้น ตัวอย่างเช่น แอปค้าปลีกสำหรับศูนย์การค้าหรือสนามบินอาจต้องจำกัดแผนที่ให้ เพื่อช่วยให้ผู้ใช้เลื่อนและแพนภายในขอบเขตเหล่านั้นได้

Kotlin

// Create a LatLngBounds that includes the city of Adelaide in Australia.
val adelaideBounds = LatLngBounds(
    LatLng(-35.0, 138.58),  // SW bounds
    LatLng(-34.9, 138.61) // NE bounds
)

// Constrain the camera target to the Adelaide bounds.
map.setLatLngBoundsForCameraTarget(adelaideBounds)

      

Java

// Create a LatLngBounds that includes the city of Adelaide in Australia.
LatLngBounds adelaideBounds = new LatLngBounds(
    new LatLng(-35.0, 138.58), // SW bounds
    new LatLng(-34.9, 138.61)  // NE bounds
);

// Constrain the camera target to the Adelaide bounds.
map.setLatLngBoundsForCameraTarget(adelaideBounds);

      

แผนภาพต่อไปนี้แสดงสถานการณ์เมื่อเป้าหมายของกล้องถูกจำกัดให้อยู่ในบริเวณที่ใหญ่กว่าวิวพอร์ตเล็กน้อย ผู้ใช้สามารถ เลื่อนและแพน โดยที่เป้าหมายของกล้องยังคงอยู่ภายในพื้นที่ที่มีขอบเขต เครื่องหมายกากบาทแสดงถึงเป้าหมายของกล้อง

แผนภาพแสดง LatLngBounds ของกล้องที่ใหญ่กว่าวิวพอร์ต

แผนที่จะแสดงเต็มวิวพอร์ต แม้ว่าจะทำให้วิวพอร์ตแสดง พื้นที่ที่อยู่นอกขอบเขตที่กำหนด ตัวอย่างเช่น หากคุณวางตำแหน่งเป้าหมายกล้องไว้ที่มุมของพื้นที่ที่กําหนด พื้นที่ที่อยู่นอกมุมจะปรากฏในวิวพอร์ต แต่ผู้ใช้จะเลื่อนเข้าไปในพื้นที่นั้นไม่ได้ แผนภาพต่อไปนี้แสดงสถานการณ์นี้ เครื่องหมายกากบาทแสดงเป้าหมายของกล้อง

แผนภาพแสดงเป้าหมายของกล้องที่วางอยู่ที่มุมขวาล่างของ LatLngBounds ของกล้อง

ในแผนภาพต่อไปนี้ เป้าหมายของกล้องมีขอบเขตที่จำกัดมาก ซึ่งทำให้ผู้ใช้มีโอกาสในการเลื่อนหรือเลื่อนแผนที่เพียงเล็กน้อย ไม้กางเขน แสดงถึงเป้าหมายของกล้อง

แผนภาพแสดงขอบเขตละติจูดและลองจิจูดของกล้องถ่ายรูปที่เล็กกว่า
      วิวพอร์ต

อัปเดตมุมมองกล้อง

หากต้องการใช้ CameraUpdate กับแผนที่ คุณสามารถย้ายตำแหน่ง ทันที หรือทำให้กล้องเคลื่อนไหวอย่างราบรื่น เพื่อย้ายกล้อง ทันทีด้วย CameraUpdate ที่ระบุ คุณสามารถโทรหา GoogleMap.moveCamera(CameraUpdate)

คุณสามารถสร้างประสบการณ์ของผู้ใช้ให้น่าพอใจมากขึ้น โดยเฉพาะการเล่นสั้นๆ โดยการทำให้การเปลี่ยนแปลงเปลี่ยนแปลง หากต้องการทำเช่นนี้แทนการโทร ให้กด GoogleMap.moveCamera โทร GoogleMap.animateCamera แผนที่จะย้ายไปยังแอตทริบิวต์ใหม่อย่างราบรื่น รูปแบบที่ละเอียดที่สุดของเมธอดนี้คือ GoogleMap.animateCamera(cameraUpdate, duration, callback) มีอาร์กิวเมนต์ 3 รายการ ได้แก่

cameraUpdate
CameraUpdate อธิบายตำแหน่งที่จะย้ายกล้อง
callback
ออบเจ็กต์ที่ใช้ GoogleMap.CancellableCallback อินเทอร์เฟซทั่วไปสำหรับการจัดการงานนี้มีวิธีการ 2 วิธี `onCancel()` และ `onFinished()` สำหรับภาพเคลื่อนไหว เมธอดใน สถานการณ์ต่อไปนี้
onFinish()
เรียกใช้หากภาพเคลื่อนไหวเล่นจนจบโดยไม่หยุดชะงัก
onCancel()

เรียกใช้หากภาพเคลื่อนไหวถูกขัดจังหวะด้วยการทริกเกอร์ stopAnimation() หรือเริ่มการเคลื่อนไหวของกล้องใหม่

หรือกรณีนี้อาจเกิดขึ้นได้หากคุณโทรติดต่อ GoogleMap.stopAnimation()

duration
ระยะเวลาที่ต้องการของภาพเคลื่อนไหวเป็นมิลลิวินาทีในรูปแบบ int

ข้อมูลโค้ดต่อไปนี้จะแสดงวิธีทั่วไปบางส่วนในการย้าย กล้อง

Kotlin

val sydney = LatLng(-33.88, 151.21)
val mountainView = LatLng(37.4, -122.1)

// Move the camera instantly to Sydney with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15f))

// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomIn())

// Zoom out to zoom level 10, animating with a duration of 2 seconds.
map.animateCamera(CameraUpdateFactory.zoomTo(10f), 2000, null)

// Construct a CameraPosition focusing on Mountain View and animate the camera to that position.
val cameraPosition = CameraPosition.Builder()
    .target(mountainView) // Sets the center of the map to Mountain View
    .zoom(17f)            // Sets the zoom
    .bearing(90f)         // Sets the orientation of the camera to east
    .tilt(30f)            // Sets the tilt of the camera to 30 degrees
    .build()              // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition))

      

Java

LatLng sydney = new LatLng(-33.88,151.21);
LatLng mountainView = new LatLng(37.4, -122.1);

// Move the camera instantly to Sydney with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15));

// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomIn());

// Zoom out to zoom level 10, animating with a duration of 2 seconds.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);

// Construct a CameraPosition focusing on Mountain View and animate the camera to that position.
CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(mountainView )      // Sets the center of the map to Mountain View
    .zoom(17)                   // Sets the zoom
    .bearing(90)                // Sets the orientation of the camera to east
    .tilt(30)                   // Sets the tilt of the camera to 30 degrees
    .build();                   // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));