গুগল ম্যাপস ভি 2 - আমার অবস্থান এবং জুম দুটি সেট করুন


123

আমার প্রশ্নটি হল, কেউ কীভাবে গুগল ম্যাপস সেট আপ করতে, আমার অবস্থান এবং জুম-ইন ভিউ উভয়ভাবে খুলতে জানে?

বর্তমানে, মূল দৃশ্যটি আফ্রিকা পর্যন্ত খোলে, সমস্তভাবে জুম আউট হয়ে যায়।

এবং তাই আমি এখন অনেক দিন অনুসন্ধান করছি এবং আমি যেগুলি খুঁজে পেতে পারি তা হ'ল:

1) আপনি একটি গুগল ম্যাপে দুটি জিনিস (যেমন জুম বাড়িয়ে আমার অবস্থানে যেতে পারেন) অ্যানিমেট করতে পারবেন না? আমি যদি অ্যানিমেট সেট করার আগে আমি কীভাবে জুম সেট করব তা যদি বুঝতে পারি তবে এই সমস্যাটি সমাধান হয়ে যাবে। এটি ইস্যু হিসাবে ঝোঁক, আপনি একটি পরিবর্তন করতে পারেন, তবে উভয়ই নয়।

2) আমি অন্যান্য ক্লাসগুলি খুঁজে পেয়েছি যা দরকারী হতে পারে তবে কোডটি কীভাবে সেটআপ করা যায় সে সম্পর্কে কোনও সহায়তা নেই যাতে ক্লাসটি গুগল ম্যাপটিকে পরিচালনা করতে পারে।

এই কোডটি আমি এ পর্যন্ত ধরে রেখেছি, কিছু কাজ করে, কিছু না। আমি ভেবেছিলাম কিছু পরবর্তীতে কার্যকর হতে পারে।

package com.MYWEBSITE.www;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

public class MainActivity extends FragmentActivity {
private GoogleMap map;  

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

    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    map.setMyLocationEnabled(true);

    //LocationSource a = (LocationSource) getSystemService(Context.LOCATION_SERVICE);
    //LocationManager b = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //map.setLocationSource(a);

    Criteria criteria = new Criteria();
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    String provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);
    double lat =  location.getLatitude();
    double lng = location.getLongitude();
    LatLng coordinate = new LatLng(lat, lng);

    //CameraPosition.Builder x = CameraPosition.builder();
    //x.target(coordinate);
    //x.zoom(13);

    //Projection proj = map.getProjection();
    //Point focus = proj.toScreenLocation(coordinate);

    //map.animateCamera(CameraUpdateFactory.newLatLng(coordinate));
    map.animateCamera(CameraUpdateFactory.zoomBy(13));
    //map.moveCamera(CameraUpdateFactory.newLatLng(coordinate));


    ////LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
}
}

উত্তর:


205

আপনি একটি গুগল ম্যাপে দুটি জিনিস অ্যানিমেট করতে পারবেন না (যেমন জুম বাড়ান এবং আমার অবস্থানে যান)?

কোডিং দৃষ্টিকোণ থেকে আপনি এগুলি ক্রমিকভাবে করবেন:

    CameraUpdate center=
        CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044,
                                                 -73.98180484771729));
    CameraUpdate zoom=CameraUpdateFactory.zoomTo(15);

    map.moveCamera(center);
    map.animateCamera(zoom);

এখানে, আমি প্রথমে ক্যামেরাটি সরান, তারপরে ক্যামেরাটি অ্যানিমেট করি, যদিও উভয়ই animateCamera()কল হতে পারে । GoogleMapএগুলি একক ইভেন্টে একীভূত করে কিনা , আমি এটি বলতে পারি না, কারণ এটি খুব দ্রুত যায়। :-)

এখানে নমুনা প্রকল্প যা থেকে আমি উপরের কোডটি টানছি।


দুঃখিত, এই উত্তর ত্রুটিযুক্ত। দেখুন রব এর উত্তর একটি উপায় জন্য সত্যিই একটি তৈরি করে এক শট এই কাজ করতে, CameraPositionএবং তারপর একটি তৈরি CameraUpdateথেকে CameraPosition


গ্রহণযোগ্য উত্তর হওয়া উচিত নয়। Mubeen1992 উত্তর সঠিক।
ম্যাথু

1
@ অ্যালানহভার্টি: উত্তরের সাথে আমি যে নমুনা অ্যাপ্লিকেশনটি সংযুক্ত করছি তাতে সেই কোডটি রয়েছে। এটি পুরোপুরি ঠিক আছে। আমি এখনই এটি Nexus 9 চলমান Android 7.0, এবং একটি Nexus 6P চলমান Android 6.0.1 এ পরীক্ষা করেছি। এটি কয়েক বছর ধরে পুরোপুরি সূক্ষ্মভাবে চলেছে। এটি একটি শটে তাদের করে না , এবং আমি সম্মত হলাম যে রব একটি উচ্চতর উত্তর, যেমনটি আমি আমার উত্তরে উল্লেখ করেছি। যদি আপনি বিশ্বাস করেন যে আপনার কাছে প্রমাণ রয়েছে যে এই কোডটি কাজ করে না, তবে কোথাও একটি নমুনা প্রকল্প পোস্ট করুন।
কমন্সওয়েয়ার

@ কমন্সওয়্যার আমার ক্ষমা প্রার্থনা করুন, আপনার কোডটি পরীক্ষা করার সময় আমার মানচিত্রের উপরের বাম কোণটি লেট এলএনজি দিয়ে সেট করা আছে বলে মনে হচ্ছে। আমি ধরে নিয়েছি আপনি কী ভুল করেছেন। নতুন লাটলং () কী করেছে। আমি কেন নিশ্চিত ছিলাম না কেন এটি বন্ধ ছিল, এপিআই ডক্সগুলি অবশ্যই আপনার পরিণতিতে অন্যরকম কিছু হয়েছে, এপিআই ডক্স আপনার মামলার প্রমাণ দেয়, আপনার উত্তরে ট্রিগার খুশি হওয়ার জন্য দুঃখিত! বিভ্রান্তি এড়াতে আমার প্রথম মন্তব্য মোছা হচ্ছে .. এপিআই উত্স: developers.google.com/android/references/com/google/android/gms/…
অ্যালান

168

অবস্থান পরিবর্তন, জুম করা, ভারবহন এবং একসাথে সমস্তদিকে কাত হয়ে যাওয়া সম্ভব। animateCamera()কলটিতে সময়কাল সেট করাও সম্ভব ।

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(MOUNTAIN_VIEW)      // 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));

ডক্সটি এখানে দেখুন:

https://developers.google.com/maps/documentation/android/views?hl=en-US#moving_the_camera


52

এটি আপনার প্রশ্নের সহজ সমাধান

LatLng coordinate = new LatLng(lat, lng);
CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 5);
map.animateCamera(yourLocation);

13

এইভাবে চেষ্টা করুন -

public class SummaryMapActivity extends FragmentActivity implements LocationListener{

 private GoogleMap mMap;
 private LocationManager locationManager;
 private static final long MIN_TIME = 400;
 private static final float MIN_DISTANCE = 1000;

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

    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
        }
    }
    mMap.setMyLocationEnabled(true);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME, MIN_DISTANCE, this); 


}

@Override
public void onLocationChanged(Location location) {
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 15);
    mMap.animateCamera(cameraUpdate);
    locationManager.removeUpdates(this);

}

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

}

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

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

}


7

আপনি উভয় পরামিতি যেমন সেট করতে পারে,

mMap.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(21.000000, -101.400000) ,4) );

এটি আপনার মানচিত্রটিকে একটি নির্দিষ্ট অবস্থান এবং জুমে সনাক্ত করে। আমি আমার মানচিত্রটি সেট আপ করতে এটি ব্যবহার করি।


3

এটি একটি দেরি উত্তর কিন্তু আমি মনে করি এটি সাহায্য করবে। এই পদ্ধতিটি ব্যবহার করুন:

protected void zoomMapInitial(LatLng finalPlace, LatLng currenLoc) {
    try {
        int padding = 200; // Space (in px) between bounding box edges and view edges (applied to all four sides of the bounding box)
        LatLngBounds.Builder bc = new LatLngBounds.Builder();

        bc.include(finalPlace);
        bc.include(currenLoc);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(), padding));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

মানচিত্রটি লোড করার পরে এই পদ্ধতিটি ব্যবহার করুন। চিয়ার্স!


1

এটি করার সহজতম উপায় হ'ল ক্যান্সলেবলক্যালব্যাক ব্যবহার করা। আপনার প্রথম ক্রিয়াটি সম্পূর্ণ হয়েছে তা পরীক্ষা করা উচিত এবং তারপরে দ্বিতীয়টিকে কল করুন:

mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, size.x, height, 0), new CancelableCallback() {

                @Override
                public void onFinish() {
                    CameraUpdate cu_scroll = CameraUpdateFactory.scrollBy(0, 500);
                    mMap.animateCamera(cu_scroll);
                }

                @Override
                public void onCancel() {
                }
            });

0

@ কমন্সওয়ের উত্তর আসলে কার্যকর হয় না। আমি দেখতে পেয়েছি যে এটি সঠিকভাবে কাজ করছে:

map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-33.88,151.21), 15));

0

1. মানচিত্র প্রদর্শনের জন্য আপনার বিন্যাসে এক্সএমএল কোড যুক্ত করুন।

২. গুগল মানচিত্র এপি সক্ষম করুন তারপরে নীচে নীচে এপিআই কী স্থান পান।

<fragment
                   android:id="@+id/map"
               android:name="com.google.android.gms.maps.MapFragment"
                    android:layout_width="match_parent"
                    android:value="ADD-API-KEY"
                    android:layout_height="250dp"
                    tools:layout="@layout/newmaplayout" />
        <ImageView
            android:id="@+id/transparent_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@color/transparent" />

3. এই কোডটি অনক্রিটে যুক্ত করুন।

 MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(UpadateProfile.this);

4. oncreate পরে এই কোড যুক্ত করুন। তারপরে চিহ্নিত স্থানে থাকা বর্তমান অবস্থান অ্যাক্সেস করুন

@Override
public void onMapReady(GoogleMap rmap) {
    DO WHATEVER YOU WANT WITH GOOGLEMAP
    map = rmap;
    setUpMap();
}
public void setUpMap() {
    map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
  map.setMyLocationEnabled(true);
    map.setTrafficEnabled(true);
    map.setIndoorEnabled(true);
    map.getCameraPosition();
    map.setBuildingsEnabled(true);
    map.getUiSettings().setZoomControlsEnabled(true);
    markerOptions = new MarkerOptions();
    markerOptions.title("Outlet Location");
    map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng point) {
            map.clear();
            markerOptions.position(point);
            map.animateCamera(CameraUpdateFactory.newLatLng(point));
            map.addMarker(markerOptions);
            String all_vals = String.valueOf(point);
            String[] separated = all_vals.split(":");
            String latlng[] = separated[1].split(",");
            MyLat = Double.parseDouble(latlng[0].trim().substring(1));
            MyLong = Double.parseDouble(latlng[1].substring(0,latlng[1].length()-1));
            markerOptions.title("Outlet Location");
            getLocation(MyLat,MyLong);
        }
    });
}
public void getLocation(double lat, double lng) {
    Geocoder geocoder = new Geocoder(UpadateProfile.this, Locale.getDefault());
    try {
        List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
   } catch (IOException e) {
         TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(this,e.getMessage(),Toast.LENGTH_SHORT).show();
    }
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}

0

আপনি একটি গুগল মানচিত্রে দুটি জিনিস অ্যানিমেট করতে পারবেন না (যেমন জুম বাড়ান এবং আমার অবস্থানে যান)।
জুম করতে মুভি এবং অ্যানিমেট ক্যামেরা ব্যবহার করুন

googleMapVar.moveCamera(CameraUpdateFactory.newLatLng(LocLtdLgdVar));
googleMapVar.animateCamera(CameraUpdateFactory.zoomTo(10));

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.