2013-08-25 38 views
62

Tôi đang cố gắng làm quen với API Maps API để làm quen với nó hơn và tôi đang cố gắng bắt đầu bản đồ ở vị trí hiện tại của người dùng. Sử dụng câu lệnh map.setMyLocationEnabled(true);, tôi có thể hiển thị vị trí hiện tại của mình trên bản đồ. Thao tác này cũng thêm nút vào giao diện người dùng để căn giữa bản đồ vào vị trí hiện tại của tôi.Android API Google Maps V2 Phóng to Vị trí Hiện tại

Tôi muốn mô phỏng nút đó trong mã của tôi. Tôi quen thuộc với các lớp học LocationManagerLocationListener và nhận ra rằng việc sử dụng chúng là một giải pháp thay thế khả thi, nhưng chức năng trung tâm và phóng to vị trí của người dùng dường như đã được xây dựng thông qua nút.

Nếu API có phương pháp hiển thị vị trí hiện tại của người dùng, chắc chắn phải có cách dễ dàng hơn để căn giữa vị trí hơn là sử dụng các lớp học LocationManager/LocationListener, phải không?

+0

Điểm chính ở đây là để có được vị trí địa lý của vị trí hiện tại. Bạn có thể sử dụng thư viện GPS để có được điều đó. Một khi bạn có geocoordinates, tầm thường của nó. Tham khảo phần sau để biết thêm chi tiết: https://stackoverflow.com/questions/17519198/how-to-get-the-current-location-latitude-and-longitude-in-android/17519248#17519248 – user846316

Trả lời

12
youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16)); 

16 là mức zoom

+1

Nhưng làm cách nào để tôi lấy currentLocation mà không cần sử dụng LocationManager và LocationListener? Hay điều đó là không thể? – user139260

+0

không thể theo kiến ​​thức của tôi. và tôi đề nghị bạn không nên sử dụng trình quản lý vị trí. Ứng dụng khách của Vị trí của người dùng có mức tiêu thụ điện năng cao và mức tiêu thụ pin thấp và dễ triển khai.http: //developer.android.com/google/play-services/location.html vừa được đưa ra bởi google –

+1

Vị trí địa điểm = map.getMyLocation (); Bản đồ là đối tượng GoogleMap – Venkat

39

Sau khi bạn instansiated đối tượng bản đồ (từ đoạn) thêm này -

private void centerMapOnMyLocation() { 

    map.setMyLocationEnabled(true); 

    location = map.getMyLocation(); 

    if (location != null) { 
     myLocation = new LatLng(location.getLatitude(), 
       location.getLongitude()); 
    } 
    map.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 
      Constants.MAP_ZOOM)); 
} 

nếu bạn cần bất kỳ sự hướng dẫn chỉ cần hỏi nhưng nó cần được tự explantory - chỉ cần instansiate đối tượng myLocation cho một đối tượng mặc định ...

+1

Tôi có cùng một vấn đề, nhưng khi tôi cố gắng sử dụng map.getMyLocation() nó cảnh báo tôi rằng phương pháp này không được chấp nhận. Điều gì sẽ là đúng cách để làm điều đó ngay bây giờ? – Pam

+13

"getMyLocation() Phương pháp này không còn được dùng. Thay vào đó, hãy sử dụng LocationClient.LocationClient cung cấp tính năng tìm vị trí và mức sử dụng năng lượng được cải thiện và được sử dụng bởi dấu chấm màu xanh "Vị trí của tôi". Xem MyLocationDemoActivity trong thư mục ứng dụng mẫu ví dụ như mã ví dụ hoặc Hướng dẫn dành cho nhà phát triển vị trí. ”(Được lấy từ trang web dành cho nhà phát triển Android) Lần tiếp theo chỉ đọc API nếu có gì đó không được chấp nhận có thay thế cho nó – crazyPixel

+5

LocationClient Bạn phải sử dụng LocationServices thay vì –

93

Hãy thử mã này:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 

Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false)); 
if (location != null) 
{ 
    map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 13)); 

    CameraPosition cameraPosition = new CameraPosition.Builder() 
     .target(new LatLng(location.getLatitude(), location.getLongitude()))  // Sets the center of the map to location user 
     .zoom(17)     // Sets the zoom 
     .bearing(90)    // Sets the orientation of the camera to east 
     .tilt(40)     // Sets the tilt of the camera to 30 degrees 
     .build();     // Creates a CameraPosition from the builder 
    map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));  
} 
+1

nếu vị trí == null..Xin vui lòng giúp – jyomin

+0

@jyomin Kiểm tra tại đây để biết câu trả lời của tôi về cách lấy vị trí của người dùng. Nó sử dụng phương pháp trên với một chút không an toàn để kiểm tra vị trí tốt nhất có thể tiếp theo của người dùng. http://stackoverflow.com/a/14511032/845038 Điều đó có thể khắc phục được một null bằng cách kiểm tra vị trí tốt nhất tiếp theo. – DMCApps

+0

Giải pháp này đơn giản và chỉ hoạt động. Cảm ơn bạn. – Enkk

1

này đang làm việc Vị trí hiện tại với zoom cho Google Map V2

double lat= location.getLatitude(); 
double lng = location.getLongitude(); 
LatLng ll = new LatLng(lat, lng); 
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 20)); 
+3

'vị trí' đang ném lỗi:' Không thể xác định biểu tượng 'vị trí'' – beckah

+0

Câu hỏi là cách lấy toạ độ vị trí hiện tại và answer is here: http://stackoverflow.com/a/17519248/846316 – user846316

3
private void setUpMapIfNeeded(){ 
    if (mMap == null){ 
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();//invoke of map fragment by id from main xml file 

    if (mMap != null) { 
     mMap.setMyLocationEnabled(true);//Makes the users current location visible by displaying a blue dot. 

     LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);//use of location services by firstly defining location manager. 
     String provider=lm.getBestProvider(new Criteria(), true); 

     if(provider==null){ 
      onProviderDisabled(provider); 
       } 
     Location loc=lm.getLastKnownLocation(provider); 


     if (loc!=null){ 
      onLocationChanged(loc); 
     } 
     } 
    } 
} 

    // Initialize map options. For example: 
    // mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 

@Override 
public void onLocationChanged(Location location) { 

    LatLng latlng=new LatLng(location.getLatitude(),location.getLongitude());// This methods gets the users current longitude and latitude. 

    mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));//Moves the camera to users current longitude and latitude 
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlng,(float) 14.6));//Animates camera and zooms to preferred state on the user's current location. 
} 

    // TODO Auto-generated method stub 

+0

Vui lòng thêm một số giải thích về mã của bạn làm gì và cách mã của bạn trả lời câu hỏi và vui lòng định dạng đúng. Chuyển đổi tab thành dấu cách trước khi sao chép mã thành SO, vì tab thường không được hiển thị như mong đợi. –

+0

Giải pháp trên tải lên một mảnh bản đồ và hiển thị vị trí trung tâm của vị trí hiện tại của người dùng sử dụng mức thu phóng mong muốn trong trường hợp này là (14.6) @AdiInbar – imm3000

+0

Vui lòng bao gồm giải thích trong câu trả lời thay vì trả lời trong nhận xét và định dạng mã. (FYI, tôi đã không yêu cầu lợi ích cá nhân. Tôi đã gặp câu trả lời của bạn trong bài đánh giá Bài đánh giá chất lượng thấp và đã khuyên bạn cải thiện nó để tránh các phiếu giảm giá khác và xóa phiếu bầu.) –

15
mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 
     @Override 
     public void onMyLocationChange(Location location) { 

       CameraUpdate center=CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude())); 
       CameraUpdate zoom=CameraUpdateFactory.zoomTo(11); 
       mMap.moveCamera(center); 
       mMap.animateCamera(zoom); 

     } 
    }); 
+1

Thật không may, phương pháp này hiện không được chấp nhận: ( – Antonio

5

thử mã này:

private GoogleMap mMap; 


LocationManager locationManager; 


private static final String TAG = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(map); 
    mapFragment.getMapAsync(this); 

    arrayPoints = new ArrayList<LatLng>(); 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 


    mMap = googleMap; 


    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 


    LatLng myPosition; 


    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    googleMap.setMyLocationEnabled(true); 
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String provider = locationManager.getBestProvider(criteria, true); 
    Location location = locationManager.getLastKnownLocation(provider); 


    if (location != null) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     LatLng latLng = new LatLng(latitude, longitude); 
     myPosition = new LatLng(latitude, longitude); 


     LatLng coordinate = new LatLng(latitude, longitude); 
     CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 19); 
     mMap.animateCamera(yourLocation); 
    } 
} 

}

Đừng quên thêm quyền trên AndroidManifest.xml.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
+0

Chào mừng bạn đến Stack Overflow! Trong khi đoạn mã này có thể trả lời câu hỏi, tốt nhất là hãy mô tả vấn đề là gì và cách mã của bạn giải quyết vấn đề đã cho. crack một câu trả lời tuyệt vời trên Stack Overflow: http://stackoverflow.com/help/how-to-answer – dirtydanee

Các vấn đề liên quan