ฉันจะตั้งค่าตำแหน่งเริ่มต้นและระดับการซูมสำหรับ google map api v2 ได้อย่างไร


90

เมื่อแผนที่ของฉันแสดงแผนที่จะเริ่มต้นที่ตำแหน่งคงที่ (ใกล้แอฟริกา) เสมอ

จากนั้นฉันใช้รหัสต่อไปนี้เพื่อจัดกึ่งกลางแผนที่ไปยังตำแหน่งที่ฉันต้องการ

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

คำถามของฉันคือฉันสามารถตั้งค่าตำแหน่งเริ่มต้นและระดับการซูมก่อนที่แผนที่จะแสดงได้หรือไม่?

เพราะฉันไม่ต้องการให้ผู้ใช้ของฉันเห็นภาพเคลื่อนไหวในตอนเริ่มต้น

ขอบคุณ.


qustion นี้ช่วยได้ .... แม้ว่าจะไม่ได้เปิดใช้งานตำแหน่ง ... animateCamera ชี้ไปที่ที่ไหนสักแห่งในแอฟริกา ... สาย! ... moveCameraเป็นทางออกที่ดีที่สุดสำหรับสิ่งนี้
Devrath

3
ฮ่าฮ่าฮ่าฮ่าฮ่า ....... +1 สำหรับคำถามนี้คุณถามใจฉัน : D ... "มันมักจะเริ่มต้นที่ตำแหน่งคงที่ (ใกล้แอฟริกา)" ........ rofll ..... ขอบคุณแม้ว่า
akash89

2
@ akash89 มันเริ่มต้นจาก LatLng (0.0,0.0) ตามที่คาดไว้: google.com/maps/@0,0,5zฉันไม่แน่ใจว่าอะไรทำให้คุณกลิ้งบนพื้นหัวเราะตามตัวอักษร (ถ้าฉันไม่เข้าใจผิด) แต่ ฉันมีความสุขที่คุณมีความสุข :)
Navid Vafaei

คำตอบ:


174

คุณสามารถใช้สิ่งนี้เพื่อซูมได้โดยตรงโดยไม่มีภาพเคลื่อนไหว:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );

ขอบคุณมันเป็นเพียงสิ่งที่ฉันต้องการ
:)

ฉันมีละติจูด / ลองจิจูดต่ำสุดและละติจูด / ลองจิจูดสูงสุดแล้วจะตั้งค่าอย่างไร ???
Pratik Butani

คุณสามารถเพิ่มคำถามใหม่เพื่อให้ฉันสามารถโพสต์คำตอบแบบเต็มให้คุณ แต่ในระยะสั้นคุณจะต้องใช้ LatLngBounds.Builder เพื่อสร้างขอบเขตและใช้สิ่งนั้น
Moh Sakkijha

1
@Saksak ปัญหาของฉันคือฉันกำลังรอ GPS เพื่อคว้าMyLocationเพื่อที่ฉันจะได้ย้ายและซูมแผนที่ไปยังตำแหน่งของผู้ใช้ เนื่องจากแผนที่ถูกเริ่มต้นใน XML ฉันจึงไม่สามารถหาวิธีป้องกันไม่ให้เกิดการกระโดดได้ ตามหลักการแล้วฉันจะซ่อนแผนที่จนกว่าMyLocationจะพบแล้วจึงแสดง
theblang

เมื่อฉันวางแผนที่มันทำให้ฉันมีข้อผิดพลาดและบอกให้ฉันสร้างตัวแปร 'แผนที่' เป็นไปได้ไหมที่จะนำเข้าหรืออะไร?
Hanzawa Naoki

86

ดูเอกสารที่นี่:

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

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

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

หากคุณกำลังทำแบบเป็นโปรแกรมคุณสามารถทำสิ่งต่อไปนี้:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));

1
คำตอบที่ดี. อันที่จริงคำถามนี้เหมาะกับคำถามนี้มากกว่า
MightySeal

2
ใน xml ฉันได้รับข้อผิดพลาดผ้าสำลีUnexpected namespace prefix "map" found for tag fragment
มูฮัมหมัดบาบาร์

หากถึงแม้จะใช้ xmlns: map = "schemas.android.com/apk/res-auto" คุณก็ยังคงพบข้อผิดพลาดเดิม ลองเพิ่ม xmlns นี้: tools = " schemas.android.com/tools " และใช้ "tools:" แทน "map:"
Guillaume Ilitch Tchaïkovsky

ลิงก์ไปยังเอกสารพร้อมตัวเลือกทั้งหมด: developers.google.com/maps/documentation/android-sdk/…
Albert Vila Calvo

กำลังมองหาแอตทริบิวต์เค้าโครงทำงานได้อย่างสมบูรณ์ ขอบคุณ
Abhishek Garg

5

ในกรณีที่คุณต้องการโหลดGoogle Mapในขั้นต้นโดยใช้Locationโปรแกรมคุณสามารถใช้ส่วนของโค้ดนี้ได้

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

เพิ่มรหัสชิ้นนี้สำหรับ layout

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

สิ่งนี้จะโหลดGoogleMapโดยเฉพาะLocationโดยตรงเช่น initialLatLng


3

ฉันสร้างหมายเลขอ้างอิงSupportMapFragmentและการตั้งค่าของvisibilityการใช้View.INVISIBLE SupportMapFragment.getView().setVisibility()จากนั้นในการonLocationChangedเรียกกลับที่ชั้นเรียนของฉันดำเนินการฉันตรวจสอบว่าINVISIBLEและตั้งค่าVISIBLEเป็นจริงหรือไม่ วิธีนี้จะกำจัดการกระโดดที่คุณเห็นขณะบรรทุกในขณะที่ให้คุณเริ่มต้นตำแหน่งเริ่มต้นแบบไดนามิก ในกรณีของฉันฉันกำลังศูนย์กลางกล้องไปรอบ ๆ สถานที่ตั้งของผู้ใช้จึงจะเรียกว่าทันทีเพราะ onLocationChangedsetMyLocationEnabled(true)

ความต้องการของคุณอาจแตกต่างออกไป แต่ไม่ว่าจะด้วยวิธีใดคุณก็เพียงแค่ตั้งค่าการเปิดเผยINVISIBLEและหาตำแหน่งที่VISIBLEเหมาะสมหลังจากโหลดข้อมูลที่เหมาะสมแล้ว


2

คุณสามารถใช้ Directy CameraUpdate โดยใช้ latlong แบบคงที่

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.