2015-07-27 1 views
6

Я хочу создать карту со статическим маркером, чтобы всегда показывать местоположение центра экрана. Я создал маркер в макете с выделенным изображением в центре. Теперь мне нужно получить координаты координаты центра и преобразовать их в адрес. затем отобразите выбранное местоположение в текстовом виде как мое выбранное местоположение. Нужна помощьКак получить расположение экрана на экране карты Google?

ответ

6
protected void userLocationMap() { 

     mapFragment = ((SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map)); 
     googleMap = mapFragment.getMap(); 
     int status = GooglePlayServicesUtil 
       .isGooglePlayServicesAvailable(getBaseContext()); 

     if (status != ConnectionResult.SUCCESS) { 
///if play services are not available 
      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, 
        requestCode); 
      dialog.show(); 

     } else { 

      // Enabling MyLocation Layer of Google Map 
      googleMap.setMyLocationEnabled(true); 

      // Creating a LatLng object for the current location 
      LatLng latLng = new LatLng(latitude, longitude); 
      // Showing the current location in Google Map 
      googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
      // Zoom in the Google Map 
      googleMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 
      Log.i("latitude", "==========" + latitude); 
////locationTextView holds the address string 
      locationTextView.setText(getCompleteAdressString(latitude, longitude)); 

      // create marker 
      MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("My Location"); 
      // adding marker 
      googleMap.addMarker(marker); 
     } 
    } 

и метод getcompleteAdress является ::::: ==>

private String getCompleteAddressString(double LATITUDE, double LONGITUDE) { 

     String strAdd = ""; 

     Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
     try { 
      List<Address> addresses = geocoder.getFromLocation(LATITUDE, 
        LONGITUDE, 1); 

      if (addresses != null) { 

       Address returnedAddress = addresses.get(0); 

       StringBuilder strReturnedAddress = new StringBuilder(""); 

       for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) { 

        strReturnedAddress 
          .append(returnedAddress.getAddressLine(i)).append(
            ","); 
       } 

       strAdd = strReturnedAddress.toString(); 

       Log.w("My Current loction address", 
         "" + strReturnedAddress.toString()); 
      } else { 
       Log.w("My Current loction address", "No Address returned!"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.w("My Current loction address", "Canont get Address!"); 
     } 
     return strAdd; 
    } 

Чтобы изменить местоположение, за клики по ====>

googleMap.setOnMapClickListener(new OnMapClickListener() { 

      @Override 
      public void onMapClick(LatLng point) { 
       Log.d("Map","Map clicked"); 
       marker.remove(); 
       double latitude = latLng.latitude; 
       double longitude = latLng.longitude; 
locationTextView.setText(getCompleteAdressString(latitude,longitude)); 
       drawMarker(point); 
      } 
     }); 
+0

Спасибо за помощь – MANCHAI

+0

, если вы удовлетворены любым из этих ответов, отметьте его как принятый. –

+0

Если вы не удовлетворены нашими ответами, сообщите нам, пожалуйста, –

22

Вы можете получить центральную точку карты в любое время с помощью этой функции на ваш GoogleMap переменного экземпляра

mMap.getCameraPosition().target 

Теперь, если вы хотите, чтобы получить центральную карту точки каждый раз меняемся, то вам необходимо реализовать OnCameraChangeListener прослушиватель и вызовите указанную выше строку, чтобы получить новую центральную точку.

+0

не могли бы вы привести пример или так? – MANCHAI

+1

Он работает очень хорошо, и код также чище, чем принятый ответ –

+0

@MANCHAI Например: double CameraLat = mMap.getCameraPosition(). Target.latitude; double CameraLong = mMap.getCameraPosition(). Target.longitude; – mehmet

0

мне удалось для создания карты для моего текущего местоположения. Но он дает координаты моего местоположения только один раз, и мне нужно найти место, перемещаясь в другое место. размещение моего кода

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.GoogleMap.OnCameraChangeListener; 
import com.google.android.gms.maps.GoogleMap.OnMapClickListener; 
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.CameraPosition; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.maps.GeoPoint; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.app.Dialog; 
import android.graphics.Canvas; 
import android.location.Address; 
import android.location.Criteria; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 


public class MapLocation extends FragmentActivity implements LocationListener { 

    GoogleMap googleMap; 
    MarkerOptions markerOptions; 
    LatLng latLng; 

    ImageView icon; 
    TextView selected; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_map); 

     icon = (ImageView)findViewById(R.id.icon_baby); 
     icon.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       finish(); 

      } 
     }); 


    // Getting Google Play availability status 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); 

     // Showing status 
     if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available 

      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); 
      dialog.show(); 

     }else { // Google Play Services are available 

      // Getting reference to the SupportMapFragment of activity_main.xml 
      SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

      // Getting GoogleMap object from the fragment 
      googleMap = fm.getMap(); 

      // Enabling MyLocation Layer of Google Map 
      googleMap.setMyLocationEnabled(true); 

      // Getting LocationManager object from System Service LOCATION_SERVICE 
      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

      // Creating a criteria object to retrieve provider 
      Criteria criteria = new Criteria(); 

      // Getting the name of the best provider 
      String provider = locationManager.getBestProvider(criteria, true); 

      // Getting Current Location 
      Location location = locationManager.getLastKnownLocation(provider); 

      if(location!=null){ 
       onLocationChanged(location); 
      } 
      locationManager.requestLocationUpdates(provider, 20000, 0, this); 
     } 
    } 
    //@Override 
    public void onLocationChanged(Location location) { 

     TextView tvLocation = (TextView) findViewById(R.id.selected_location); 

     // Getting latitude of the current location 
     double latitude = location.getLatitude(); 

     // Getting longitude of the current location 
     double longitude = location.getLongitude(); 

     // Creating a LatLng object for the current location 
     LatLng latLng = new LatLng(latitude, longitude); 

     // Showing the current location in Google Map 
     googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

     // Zoom in the Google Map 
     googleMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 

     // Setting latitude and longitude in the TextView tv_location 
     tvLocation.setText("Latitude:" + latitude + ", Longitude:"+ longitude); 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
    }