如何为 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 自动完成文本框设置默认值