Google地图v2 – 设置我的位置和放大
我的问题是,有谁知道如何设置谷歌地图,打开我的位置,并在放大视图?
目前,主要观点向非洲开放,一路缩小。
所以我一直在寻找几天,我能find的是:
1)你不能在一个谷歌地图中animation两件事(如放大和去我的位置)? 所以如果我能在设置animation之前弄清楚如何设置缩放,那么这个问题就可以解决了。 这往往是问题,你可以改变一个,但不能两个。
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; } }
你不能在一个谷歌地图中animation两件事(像放大和去我的位置)?
从编码的angular度来看,您可以按顺序进行:
CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044, -73.98180484771729)); CameraUpdate zoom=CameraUpdateFactory.zoomTo(15); map.moveCamera(center); map.animateCamera(zoom);
在这里,我先移动摄像机,然后为摄像机设置animation,虽然两者都可以是animateCamera()
调用。 无论GoogleMap
是否将其整合到一个事件中,我都不能说,因为它太快了。 🙂
以下是我从中拉取上述代码的示例项目 。
对不起,这个答案是有缺陷的。 通过创build一个CameraPosition
,然后从该CameraPosition
创build一个CameraUpdate
,请参阅Rob的答案,以便CameraPosition
。
一次可以改变位置,缩放,方位和倾斜。 也可以在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
这是你的问题的简单解决scheme
LatLng coordinate = new LatLng(lat, lng); CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 5); map.animateCamera(yourLocation);
试试这样 –
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 }
}
你也可以设置这两个参数,
mMap.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(21.000000, -101.400000) ,4) );
这将您的地图定位在特定位置并进行缩放。 我使用这个来设置我的地图。
这是一个迟到的答案,但我认为这将有所帮助。 使用这个方法:
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(); } }
加载地图后使用此方法。 干杯!
最简单的方法是使用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() { } });
1.在布局中添加xml代码以显示地图。
2.启用谷歌地图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" />
在oncreate中添加这个代码。
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(UpadateProfile.this);
4.创build后添加此代码。 然后访问当前位置,并在其中放置标记
@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) { }
@ CommonsWare的答案并不实际工作。 我发现这是正常工作:
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-33.88,151.21), 15));
你不能在一个谷歌地图中animation两件事(如放大和去我的位置)。
所以使用移动和animation相机进行缩放
googleMapVar.moveCamera(CameraUpdateFactory.newLatLng(LocLtdLgdVar)); googleMapVar.animateCamera(CameraUpdateFactory.zoomTo(10));
gmap.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(9.491327, 76.571404), 10, 30, 0)));