หัวข้อนี้อธิบายวิธีกำหนดค่าแผนที่ที่เพิ่มลงในแอป Android โดยใช้ Maps SDK สำหรับ Android
ภาพรวม
หลังจากเพิ่มแผนที่ลงในแอปแล้ว คุณจะกําหนดการตั้งค่าเริ่มต้นและรันไทม์ของแผนที่ได้ ต้องกำหนดการตั้งค่าเริ่มต้นโดยพิจารณาว่า
คุณได้เพิ่มคอนเทนเนอร์แผนที่ (SupportMapFragment
หรือ
MapView
) แบบคงที่หรือแบบไดนามิก หากเพิ่มคอนเทนเนอร์แผนที่แบบคงที่ คุณจะกำหนดการตั้งค่าแผนที่เริ่มต้นได้ในไฟล์เลย์เอาต์
หากเพิ่มแบบไดนามิก คุณจะกำหนดการตั้งค่าเริ่มต้นได้ใน OnCreate
callback ด้วยออบเจ็กต์ GoogleMapOptions
โปรดดูรายละเอียดเกี่ยวกับการเพิ่มคอนเทนเนอร์แผนที่ที่หัวข้อเพิ่มแผนที่
การตั้งค่าแผนที่เบื้องต้นมีดังนี้
- ตำแหน่งของกล้อง ซึ่งรวมถึงตำแหน่ง การซูม การเอียง และการเอียง ดูรายละเอียดเกี่ยวกับตำแหน่งกล้องได้ที่กล้องและมุมมอง
- ประเภทแผนที่
- คอมโพเนนต์ UI เพื่อแสดง เช่น ปุ่มซูมและเข็มทิศ
- ท่าทางสัมผัสที่จะเปิดใช้
- มีการเปิดใช้โหมด Lite หรือไม่
คุณสามารถกําหนดการตั้งค่าเหล่านี้และการตั้งค่าเพิ่มเติมบางอย่างได้เมื่อรันไทม์โดยอัปเดตออบเจ็กต์ GoogleMap
ในคอลแบ็ก onMapReady
การตั้งค่าเพิ่มเติมได้รับการกําหนดค่าผ่านวิธีการของ
GoogleMap
เช่น คลาสที่กำหนดค่า
เลเยอร์การจราจรและระยะห่างจากขอบของแผนที่
ตัวอย่าง
ในโค้ดตัวอย่างด้านล่างและภาพหน้าจอด้านบน แผนที่ กำหนดค่าด้วยการตั้งค่าต่อไปนี้
การตั้งค่าเริ่มต้นจะได้รับการกำหนดค่าในไฟล์เลย์เอาต์ ดังนี้
- เปิดใช้การควบคุมการซูม
- เปิดใช้การควบคุมด้วยท่าทางสัมผัสเพื่อหมุน
- ตั้งค่าการเอียงแผนที่เป็น 30
การตั้งค่ารันไทม์
- เล็งกล้องไปที่เกียวโต ญี่ปุ่น
- เปิดใช้แผนที่ประเภทผสม
- เปิดเลเยอร์การจราจร
การตั้งค่าเบื้องต้น
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="true" map:uiRotateGestures="true" map:cameraTilt="30" />
การตั้งค่ารันไทม์
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Update the map configuration at runtime. @Override public void onMapReady(GoogleMap googleMap) { // Set the map coordinates to Kyoto Japan. LatLng kyoto = new LatLng(35.00116, 135.7681); // Set the map type to Hybrid. googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // Add a marker on the map coordinates. googleMap.addMarker(new MarkerOptions() .position(kyoto) .title("Kyoto")); // Move the camera to the map coordinates and zoom in closer. googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto)); googleMap.moveCamera(CameraUpdateFactory.zoomTo(15)); // Display traffic. googleMap.setTrafficEnabled(true); } }
ก่อนเริ่มต้น
ก่อนเริ่มต้น คุณสามารถสร้างโปรเจ็กต์และเพิ่มแผนที่พื้นฐานผ่านตัวเลือกต่อไปนี้ได้
สร้างแอปโดยใช้เทมเพลต Maps สำหรับ Android Studio เทมเพลต Maps จะกำหนดค่าโปรเจ็กต์และเพิ่มแผนที่พื้นฐานโดยอัตโนมัติ ใช้ส่วนย่อยแล้ว เป็นคอนเทนเนอร์แผนที่ และจะเพิ่มแบบคงที่ โปรดดูรายละเอียดที่หัวข้อเริ่มต้นใช้งาน
กําหนดค่าโปรเจ็กต์ด้วยตนเองสําหรับ SDK และเพิ่มแผนที่พื้นฐาน ทำให้คุณสามารถใช้เทมเพลต Android ใดก็ได้และเพิ่ม เข้ากับแอปที่มีอยู่
กำหนดค่าแผนที่หลังจากเพิ่มแบบคงที่
ส่วนนี้อธิบายวิธีตั้งค่าสถานะเริ่มต้นของแผนที่หากคุณได้เพิ่มแผนที่ไว้ ไปยังไฟล์เลย์เอาต์แบบคงที่
Maps SDK สำหรับ Android กำหนดชุดแอตทริบิวต์ XML ที่กำหนดเองสำหรับ
SupportMapFragment
หรือ MapView
ที่ใช้กำหนดค่าเริ่มต้นได้
สถานะของแผนที่ได้โดยตรงจากไฟล์การออกแบบ แอตทริบิวต์ต่อไปนี้
ถูกกำหนดในปัจจุบัน:
mapType
— ประเภทแผนที่ที่จะแสดง ค่าที่ใช้ได้มีดังนี้none
,normal
,hybrid
,satellite
และterrain
cameraTargetLat
cameraTargetLng
cameraZoom
cameraBearing
cameraTilt
— ตำแหน่งเริ่มต้นของกล้อง โปรดดู สำหรับรายละเอียดในคำแนะนำเกี่ยวกับกล้องและมุมมองuiZoomControls
,uiCompass
— ระบุว่าจะแสดงตัวควบคุมการซูมและเข็มทิศหรือไม่ ดูรายละเอียดได้ที่UiSettings
uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
— ระบุว่าจะเปิดใช้ท่าทางสัมผัสที่เฉพาะเจาะจงหรือไม่ โปรดดูUiSettings
เพื่อดูรายละเอียดzOrderOnTop
— บ่งชี้ว่าพื้นผิวของมุมมองแผนที่จะแสดงที่ด้านบนของหน้าต่างแผนที่ ตัวควบคุมแผนที่ และวัตถุในหน้าต่างหรือไม่ โปรดดู SurfaceView.setZOrderOnTop(boolean) สำหรับรายละเอียดuseViewLifecycle
— ใช้ได้กับออบเจ็กต์SupportMapFragment
เท่านั้น ระบุ ควรเชื่อมโยงวงจรของแผนที่กับมุมมองของส่วนย่อยหรือ ส่วนย่อยของตัวเอง ดูรายละเอียดที่นี่liteMode
—true
เพื่อเปิดใช้โหมด Lite หรือfalse
mapColorScheme
— ระบุรูปแบบสีสำหรับแผนที่ภูมิประเทศปกติ ค่าต่างๆ ได้แก่light
(ค่าเริ่มต้น),dark
และfollow_system
ซึ่งหมายความว่าใช้ การตั้งค่าระบบปัจจุบันตามการตั้งค่าอุปกรณ์สำหรับUI_NIGHT_MODE_MASK
ดูข้อมูลเพิ่มเติมได้ที่รูปแบบสีแผนที่
หากต้องการใช้แอตทริบิวต์ที่กำหนดเองเหล่านี้ภายในไฟล์เลย์เอาต์ ไฟล์ดังกล่าวต้องมีประกาศเนมสเปซต่อไปนี้ คุณสามารถเลือกเนมสเปซใดก็ได้
ไม่จำเป็นต้องเป็น map
:
xmlns:map="http://schemas.android.com/apk/res-auto"
จากนั้นเพิ่มแอตทริบิวต์ที่มีคำนำหน้า map:
ลงในไฟล์เลย์เอาต์
ไฟล์เลย์เอาต์ต่อไปนี้กำหนดค่าออบเจ็กต์ SupportMapFragment
ด้วยแอตทริบิวต์ที่กำหนดเอง
แมปของแอตทริบิวต์ คุณใช้แอตทริบิวต์เดียวกันกับออบเจ็กต์ MapView
ได้ด้วย
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:mapColorScheme="dark"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
กำหนดค่าแผนที่หลังจากเพิ่มแบบไดนามิก
ส่วนนี้จะอธิบายวิธีการตั้งค่าสถานะเริ่มต้นของแผนที่หากคุณได้เพิ่มเข้ามา กับแอปของคุณแบบไดนามิก
หากเพิ่ม SupportMapFragment
หรือ MapView
แบบไดนามิก คุณจะตั้งค่าสถานะเริ่มต้นของแผนที่ในออบเจ็กต์ GoogleMapOptions
ได้ ตัวเลือกที่ใช้ได้มีดังต่อไปนี้
คุณสร้าง GoogleMapOptions
ได้โดยทำดังนี้
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
จากนั้นกําหนดค่าดังนี้
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
หากต้องการใช้ตัวเลือกเหล่านี้เมื่อคุณสร้างแผนที่ ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
- หากคุณใช้
SupportMapFragment
ให้ใช้SupportMapFragment.newInstance(GoogleMapOptions options)
วิธีเริ่มต้นแบบคงที่เพื่อสร้างส่วนย่อยและส่งในการตั้งค่า - หากคุณใช้
MapView
ให้ใช้ เครื่องมือสร้างMapView(Context, GoogleMapOptions)
และส่งในการตั้งค่า
แปลแผนที่
องค์ประกอบของข้อความเมื่อคุณเพิ่ม MapView
หรือ SupportMapFragment
ลงในแอป
บนแผนที่จะแสดงในภาษาที่เหมาะสมตามอุปกรณ์ของผู้ใช้
การตั้งค่าและตำแหน่ง คุณจำกัดภาษาที่แอปใช้ให้เป็นภาษาต่อไปนี้ได้
ของภาษาที่รองรับทั้งหมด ด้วยการเพิ่ม resConfigs
รายการลงใน Gradle
ซึ่งมีประโยชน์ในการนําภาษาที่ไม่ได้ใช้ออก และช่วยลดขนาดไบนารีของแอปด้วย เช่น
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
อ่านเพิ่มเติมเกี่ยวกับการแปลแอป Android ของคุณ
ตั้งค่าเลเยอร์การเข้าชม
คุณสามารถแสดงข้อมูลการจราจรบนแผนที่ได้โดยเปิดใช้เลเยอร์การจราจร คุณสามารถเปิดและปิดใช้เลเยอร์การเข้าชมได้โดยเรียกใช้เมธอด setTrafficEnabled()
และตรวจสอบว่าเลเยอร์การเข้าชมเปิดอยู่หรือไม่โดยเรียกใช้เมธอด isTrafficEnabled()
ภาพหน้าจอต่อไปนี้แสดงแผนที่ที่เปิดใช้งานเลเยอร์การจราจร
ตั้งค่าประเภทแผนที่
หากต้องการกำหนดประเภทแผนที่ ให้เรียกเมธอด setMapType
ตัวอย่างเช่น หากต้องการแสดงแผนที่ดาวเทียม ให้ทำดังนี้
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
ภาพต่อไปนี้จะเปรียบเทียบแผนที่ภูมิประเทศปกติ แบบผสม และภูมิประเทศ
ตั้งค่าสิ่งปลูกสร้าง 3 มิติ
เมื่อมองในระยะใกล้ หลายๆ เมืองจะมีสิ่งปลูกสร้าง 3 มิติซึ่งมองเห็นได้โดย
ในภาพด้านล่างของเมืองแวนคูเวอร์ ประเทศแคนาดา คุณสามารถปิดใช้งานสิ่งปลูกสร้าง 3 มิติได้โดย
การโทร
GoogleMap.setBuildingsEnabled(false)
ตั้งค่าแผนที่ในอาคาร
เมื่อซูมระดับสูง แผนที่จะแสดงผังอาคารสำหรับพื้นที่ในอาคาร เช่น สนามบิน ศูนย์การค้า ร้านค้าปลีกขนาดใหญ่ และสถานีขนส่งสาธารณะ แปลนอาคารเหล่านี้เรียกว่าแผนที่ในอาคาร ใช้สำหรับป้าย "ปกติ"
และ "ดาวเทียม" ประเภทแผนที่ (GoogleMap.MAP_TYPE_NORMAL
และ
GoogleMap.MAP_TYPE_SATELLITE
) โดยจะเปิดใช้โดยอัตโนมัติเมื่อผู้ใช้
ซูมเข้า และจะหายไปเมื่อแผนที่ถูกซูมออก
การแจ้งเตือนการเลิกใช้งาน: ในรุ่นที่จะเปิดตัวในอนาคต แผนที่ในอาคารจะใช้ได้เฉพาะในแผนที่ประเภท normal
เท่านั้น ตั้งแต่รุ่นที่เผยแพร่ในอนาคตนั้น แผนที่ในอาคารจะไม่รองรับในแผนที่ satellite
, terrain
หรือ hybrid
แม้ระบบจะไม่รองรับสภาพแวดล้อมในอาคาร isIndoorEnabled()
จะยังคงแสดงผลค่าที่ตั้งไว้ผ่าน setIndoorEnabled()
ต่อไป เช่นเดียวกับที่ทำอยู่ในปัจจุบัน โดยค่าเริ่มต้น setIndoorEnabled
คือ true
บันทึกประจำรุ่นจะช่วยให้
คุณจะทราบเมื่อการสนับสนุนภายในอาคารไม่พร้อมใช้งานในแผนที่ประเภทดังกล่าว
ข้อมูลสรุปเกี่ยวกับฟังก์ชันการทำงานของแผนที่ในอาคารใน API มีดังนี้
- คุณปิดใช้แผนที่ในอาคารได้โดยโทรไปที่
GoogleMap.setIndoorEnabled(false)
โดยค่าเริ่มต้น แผนที่ในอาคารจะถูกเปิดใช้งานไว้ แผนที่ในอาคารจะแสดงในแผนที่เดียวในแต่ละครั้ง โดยค่าเริ่มต้น นี่คือแผนที่แรกที่เพิ่มลงในแอปของคุณ ถึง แสดงแผนที่ในอาคารบนแผนที่อื่น ปิดใช้งานบนแผนที่แรก จากนั้น เรียกsetIndoorEnabled(true)
ในแผนที่ที่ 2 - หากต้องการปิดใช้เครื่องมือเลือกระดับเริ่มต้น (เครื่องมือเลือกชั้น) ให้เรียกใช้
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อการโต้ตอบกับแผนที่ OnIndoorStateChangeListener
— กำหนด Listeners ที่ตรวจจับเมื่ออาคารอยู่ในโฟกัส หรือมีการเปิดใช้งานชั้นในอาคาร โปรดดูรายละเอียดที่การโต้ตอบกับแผนที่getFocusedBuilding
— เรียกข้อมูลอาคารที่อยู่ใน โฟกัส จากนั้นค้นหาระดับที่ใช้งานอยู่โดยเรียกใช้IndoorBuilding.getActiveLevelIndex()
- การจัดรูปแบบแผนที่ฐานไม่มีผลต่อแผนที่ในอาคาร
ตั้งค่าการเสริมพื้นที่ในแผนที่
วิดีโอนี้แสดงตัวอย่างระยะห่างจากขอบในแผนที่
แผนที่ Google ได้รับการออกแบบให้เต็มพื้นที่ทั้งภูมิภาคที่ระบุโดยองค์ประกอบคอนเทนเนอร์ ซึ่งมักจะเป็น MapView
หรือ SupportMapFragment
ลักษณะหลายประการของลักษณะที่แผนที่ปรากฏและทํางานจะกําหนดโดยขนาดของคอนเทนเนอร์ ดังนี้
- เป้าหมายของกล้องจะแสดงตรงกลางของพื้นที่ที่มีระยะห่างจากขอบ
- การควบคุมแผนที่จะวางตามขอบของแผนที่
- ข้อมูลทางกฎหมาย เช่น ข้อความลิขสิทธิ์ หรือโลโก้ Google ปรากฏขึ้น ที่ขอบด้านล่างของแผนที่
คุณสามารถเพิ่มระยะห่างจากขอบรอบขอบแผนที่ได้โดยใช้
GoogleMap
setPadding()
แผนที่จะ
เติมเต็มคอนเทนเนอร์ทั้งหมดต่อไป แต่ข้อความและการควบคุมการวางตำแหน่ง แผนที่
และการเคลื่อนไหวของกล้องจะทำงานเสมือนว่าได้วางไว้ใน
พื้นที่เล็กลง การเปลี่ยนแปลงนี้ส่งผลให้เกิดการเปลี่ยนแปลงต่อไปนี้
- การเคลื่อนไหวของกล้องผ่านการเรียก API หรือการกดปุ่ม (เช่น เข็มทิศ ตำแหน่ง ปุ่มซูม) จะสัมพัทธ์กับส่วนที่เพิ่มพื้นที่
- เมธอด
getCameraPosition
จะแสดงจุดกึ่งกลางของบริเวณที่มีระยะห่างจากขอบ - เมธอด
Projection
และgetVisibleRegion
จะแสดงผลพื้นที่ที่เพิ่มค่าให้เต็ม - ตัวควบคุม UI จะเลื่อนออกจากขอบของคอนเทนเนอร์ตามจำนวนพิกเซลที่ระบุ
Padding มีประโยชน์เมื่อออกแบบ UI ที่ซ้อนทับกับบางส่วนของ แผนที่ ในภาพต่อไปนี้ แผนที่จะมีระยะห่างจากขอบด้านบนและ ขอบขวา ตัวควบคุมแผนที่ที่มองเห็นได้และข้อความทางกฎหมายจะปรากฏตาม ขอบของบริเวณที่มีแผ่นกั้น ซึ่งแสดงเป็นสีเขียว ในขณะที่แผนที่จะเคลื่อนต่อไปยัง เติมให้เต็มคอนเทนเนอร์ ดังที่แสดงเป็นสีฟ้า ในตัวอย่างนี้ คุณสามารถแสดงเมนูที่ด้านขวาของแผนที่ได้โดยไม่บดบังตัวควบคุมแผนที่
รูปแบบสีของแผนที่
สำหรับแผนที่ประเภทปกติและภูมิประเทศ คุณสามารถตั้งค่ารูปแบบสีแผนที่ได้ เปลี่ยนแบบไดนามิกเป็นมืด สว่าง หรือใช้การตั้งค่าระบบปัจจุบัน ตัวอย่างเช่น คุณสามารถเปลี่ยนรูปแบบสีแผนที่ให้เข้มหรือจางลงโดยขึ้นอยู่กับช่วงเวลาของวัน หรือ การใช้งานอุปกรณ์ในร่มหรือกลางแจ้ง
โดยค่าเริ่มต้น แผนที่จะใช้โหมดสว่าง ค่าปัจจุบันของการตั้งค่าระบบจะอิงตาม
ในการตั้งค่าอุปกรณ์สำหรับ UI_NIGHT_MODE_MASK
Kotlin
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
Java
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));
คุณสลับรูปแบบสีได้โดยใช้วิธี GoogleMap.setMapColorScheme()
เพื่อตั้งค่าสไตล์ปัจจุบันเป็นโหมดมืด โหมดสว่าง หรือตามการตั้งค่าของระบบ
Kotlin
googleMap.setMapColorScheme(MapColorScheme.DARK) googleMap.setMapColorScheme(MapColorScheme.LIGHT) googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)
Java
googleMap.setMapColorScheme(MapColorScheme.DARK); googleMap.setMapColorScheme(MapColorScheme.LIGHT); googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);
กำหนดค่าสีพื้นหลัง
เมื่อทำงานในโหมดมืดหรือสลับไปมาระหว่างมุมมองแผนที่ การ
กำหนดค่าสีพื้นหลังของแผนที่ตามค่าเริ่มต้น ซึ่งทำได้โดยการตั้งค่าพร็อพเพอร์ตี้ตัวเลือกการแมป backgroundColor
Kotlin
private val googleMapOptions: GoogleMapOptions = GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
Java
private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
คุณยังใช้การจัดรูปแบบแผนที่ในระบบคลาวด์เพื่อกำหนดค่า สีพื้นหลัง สีพื้นหลังที่ตั้งค่าไว้ในการจัดสไตล์แผนที่จะมีลำดับความสำคัญสูงกว่าสีพื้นหลังในอุปกรณ์ ดูข้อมูลเพิ่มเติมได้ที่เปลี่ยนสีพื้นหลังของแอปสำหรับการจัดสไตล์แผนที่แบบระบบคลาวด์