2012-12-28 10 views
112

私の質問は、Googleマップを設定する方法を知っていますか、自分の位置とズームしたビューを開くためですか?Googleマップv2 - 自分の位置とズームの両方を設定します

現在、メインビューはアフリカに向かって開いており、ズームアウトされています。

そして私は今、日を探している、と私は見つけることができるすべては、次のとおりです。

1)あなたは、ズームのように(二つのことをアニメーション化し、複数のGoogleマップで自分の場所)に行くことができませんか?ですから、アニメーションを設定する前にズームを設定する方法を理解できれば、この問題は解決されます。その傾向は問題になりがちですが、どちらかを変更することはできますが、両方を変更することはできません。

2)役に立つかもしれない他のクラスが見つかりましたが、クラスがGoogleマップを操作できるようにコードを設定する方法についてのヘルプはありません。

これはこれまで私がこれまで保持してきたコードであり、一部は動作しているものもあれば、そうでないものもあります。後で役に立つと思っていたものもあります。

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; 
} 
} 

答えて

186

あなたは複数のGoogleマップに(ズームのように、私の場所に移動します)二つのことをアニメーション化することはできませんか?

コーディングの観点から、あなたは順番に行うだろう:

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

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

を、私は両方ともanimateCamera()通話することができますが、カメラをアニメーション化、その後、最初にカメラを移動。 GoogleMapがこれらを単一のイベントに統合するかどうかは、あまりにも速くなるので、私は言うことができません。 :-)

Here is the sample project上記のコードを取得しました。


申し訳ありませんが、この回答には欠陥があります。 CameraPositionを作成してCameraPositionからCameraUpdateを作成することで、これを本当にワンショットで行う方法については、Robの回答を参照してください。

+0

は受け入れ答えすべきではないズームする動きを使用してカメラをアニメーション化。 Mubeen1992の答えは正しいです。 – Matthew

+1

@AlanHaverty:回答にリンクしているサンプルアプリケーションには、そのコードが含まれています。完璧に動作します。 Android 7.0を実行しているNexus 9と、Android 6.0.1を実行しているNexus 6Pでテストしました。それは2、3年間完璧に動作しています。それはワンショットでは行われません。私の答えにはロブズが優れた答えであることに同意します。このコードがうまくいかないという証拠があると思われる場合は、サンプルプロジェクトをどこかに投稿してください。 – CommonsWare

+0

@CommonsWare私の謝罪ですが、あなたのコードでテストしている間、私の地図の左上隅はlat lngで設定されているようです。私は、あなたが.newLatLng()がしたことを間違えたと思った。私はなぜそれがオフだったのかわからない、それは私の最後に何か他のものであったに違いない、apiの文書はあなたのケースを証明する、あなたの答えに喜んでトリガを行って申し訳ありません! 最初のコメントを削除すると、混乱を避けることができます。 APIソース:https://developers.google.com/android/reference/com/google/android/gms/maps/CameraUpdateFactory.html#newLatLng(com.google.android .gms.maps.model。LatLng) –

7

また、これは、特定の位置やズームのマップを見つけ

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

、のように両方のパラメータを設定することができます。これを地図の設定に使用します。

150

ロケーション、ズーム、ベアリング、チルトを一度に変更できます。 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=fr-FR#moving_the_camera

+0

これは完璧になります – Noman

12

TRY -

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 

} 

}

+0

Thankx多くの助けを借りてください:) –

49

これは、あなたの質問

ためのシンプルなソリューションです。
LatLng coordinate = new LatLng(lat, lng); 
CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 5); 
map.animateCamera(yourLocation); 
-2
gmap.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(9.491327, 76.571404), 10, 30, 0))); 
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(); 
    } 
} 

マップをロードした後にこのメソッドを使用します。乾杯!

+0

彼らのドキュメントは少し古くなって、これはついに遂行されました! – Starwave

1

最も簡単な方法は、CancelableCallbackを使用することです。

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

ありがとうございました。私はこれが受け入れられる答えだと思う。あなたのソリューションは素晴らしい作品です – Chandru

0

@ CommonsWareの回答は実際には機能しません。これが正常に動作していることがわかりました。

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

1.地図を表示するためのレイアウトにxmlコードを追加してください。

2. Googleマップapiを有効にすると、以下のAPIキーの場所が表示されます。

<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.このコードをoncreateに追加します。

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

4.このコードをoncreate後に追加します。その後、複数のGoogleマップであなたは(ズームのような、私の場所に移動します)二つのことをアニメーション化することができない

@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)); 
関連する問題