如何为 google map api v2 设置默认位置和缩放级别?

Posted

技术标签:

【中文标题】如何为 google map api v2 设置默认位置和缩放级别?【英文标题】:How do I set default location and Zoom level for google map api v2? 【发布时间】:2012-12-18 21:57:21 【问题描述】:

当我的地图显示时,它总是从一个固定位置(非洲附近)开始。

然后,我使用以下代码将地图居中到我想要的位置。

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

我的问题是,我可以在地图显示之前设置默认位置和缩放级别吗?

因为我不希望我的用户在一开始就看到动画。

谢谢。

【问题讨论】:

这个问题有帮助....即使没有启用位置...animateCamera 指向非洲的某个地方...wiered ! ...moveCamera 是最好的解决方案 hahahhaha.......+1 这个问题,你问了我的心。 :D...“它总是从一个固定的位置(非洲附近)开始”........rofll ......尽管如此。 @akash89 正如预期的那样,它从 LatLng(0.0,0.0) 开始:google.com/maps/@0,0,5z 我不确定是什么让你在地板上滚来滚去大笑(如果我没记错的话),但我我很高兴你很高兴:) 【参考方案1】:

你可以使用它来直接缩放而不用动画:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );

【讨论】:

谢谢,这正是我所需要的:) 我有最小纬度/经度和最大纬度/经度那么如何设置??? 您可以为此添加新问题,以便我为您发布完整的答案,但简而言之,您必须使用 LatLngBounds.Builder 来构建边界并使用它。 @Saksak 我的问题是我正在等待 GPS 抓取 MyLocation,以便我可以将地图移动并缩放到用户的位置。由于地图是在 XML 中初始化的,我不知道如何防止跳转发生。理想情况下,我会隐藏地图,直到找到MyLocation 然后显示它。 当我放置地图时,它给了我一个错误并告诉我创建一个变量“地图”。可以进口吗?【参考方案2】:

在此处查看文档:

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

根据您是通过 XML 还是以编程方式添加地图,执行此操作的方式略有不同。如果你使用的是 XML,你可以这样做:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_
  android:layout_
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

如果您以编程方式执行此操作,则可以执行以下操作:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));

【讨论】:

好答案。其实这个更适合这个问题。 在 xml 中我得到 lint 错误Unexpected namespace prefix "map" found for tag fragment 即使使用 xmlns:map="schemas.android.com/apk/res-auto" 你仍然有同样的错误。尝试添加这个 xmlns:tools="schemas.android.com/tools" 并使用 "tools:" 而不是 "map:" 链接到包含所有选项的文档:developers.google.com/maps/documentation/android-sdk/… 正在寻找布局属性,完美运行。谢谢【参考方案3】:

我创建了SupportMapFragment 的句柄,并使用SupportMapFragment.getView().setVisibility() 将其visibility 设置为View.INVISIBLE。然后,在我的类实现的onLocationChanged 回调中,我检查INVISIBLE 是否为真,如果为真则设置为VISIBLE。这消除了您在加载时看到的跳跃,同时允许您动态初始化起始位置。在我的情况下,我将相机围绕用户的位置居中,因此由于setMyLocationEnabled(true) 而立即调用onLocationChanged

您的要求可能不同,但无论哪种方式,您只需将可见性设置为INVISIBLE,然后在加载相应数据后找到一个设置VISIBLE 的好位置。

【讨论】:

【参考方案4】:

您可以使用静态 latlong 直接使用 CameraUpdate

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);

【讨论】:

【参考方案5】:

如果您想以编程方式在任何初始 Location 处加载 Google Map,那么您可以使用这段代码,

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

layout添加这段代码

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_
       android:layout_ />

这将在特定的Location 直接加载GoogleMap,即initialLatLng。

【讨论】:

以上是关于如何为 google map api v2 设置默认位置和缩放级别?的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs - ng-map - Google Maps Javascript API v3 - 如何为多个标记设置最佳缩放

如果指定了邮政地址,如何为 Google Maps JavaScript API 版本 3 设置正确的标题?

Google Places API 网络服务:如何为自动完成设置多种类型

如何为 Google Places API 自动完成文本框设置默认值

如何为 google_maps_flutter 设置缩放级别

如何设置 Android Google Maps API v2 地图以显示全球地图?