【问题标题】:zooming marker position according to current location android根据当前位置android缩放标记位置
【发布时间】:2014-05-20 10:25:58
【问题描述】:

我在 Android 中使用谷歌地图。我无法调整缩放级别。

我在地图中心有一个标记,我使用 mapController.setCenter(current_location);

我有 10 个或更多的标记以不同的颜色显示在地图上。

预期结果:人的当前位置应始终在中心,我必须调整缩放级别,以便绿色标记将显示在屏幕上(当前位置标记在中心)。

我尝试了什么:

int greenlat = (int) (AppCoordinates.getInstance().latitudelist.get(0) * 1E6); int greenlong = (int) (AppCoordinates.getInstance().longitudelist.get(0) * 1E6); int currentlat = (int) (AppCoordinates.getInstance().getCurrentLatitude() * 1E6); int currentlong = (int) (AppCoordinates.getInstance().getCurrentLongitude() * 1E6);

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        mapController.zoomToSpan((int) (Math.abs(greenlat - currentlat) * 1), (int)(Math.abs(greenlong - currentlong) * 1));// to have some padding on the edges.
        mapController.animateTo(new GeoPoint((greenlat + currentlat), (greenlong + currentlong)/2));

我可以在屏幕上显示标记,但我希望当前位置显示在屏幕中心。

【问题讨论】:

  • 试试这个方法 map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(currentlat,currentlong),8)); 8 是缩放范围,可以根据您的要求在给定点进出变化。
  • 嗨,Haresh,我使用的是 android.maps,所以没有名为 animateCamera() 的方法 :(

标签: java android google-maps google-maps-api-3


【解决方案1】:

我的想法是操纵 LatLngBounds,因为它表示所有包含的标记,以便在地图上对齐的矩形中查看。所以我们只需要识别出所有构成当前位置的点都将在地图中心查看。

  1. 将所有标记放入边界。
  2. 将相机移动到您当前的位置作为中心点。
  3. 获取当前地图所有角落的4个位置,并将其放在边界点列表中。

这是我的示例:

LatLngBounds.Builder builder = new LatLngBounds.Builder();
Marker myLocation = mMap.addMarker(new MarkerOptions()
        .position(new LatLng(2.6,101.5))
        .title("My-Current-Location"));


Marker addMarker1 = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(2.6,101))
            .title("Hello world-1"));

Marker addMarker2 = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(2.7,101))
            .title("Hello world-2"));

Marker addMarker3 = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(3.7,105))
            .title("Hello world-3"));

builder.include(myLocation.getPosition());
builder.include(addMarker1.getPosition());
builder.include(addMarker2.getPosition());
builder.include(addMarker3.getPosition());

//haha enough to use for loop for all your markers

int padding = 100; // offset from edges of the map in pixels

CameraUpdate cameraUpdate =CameraUpdateFactory.newLatLngBounds(builder.build(), padding);
mMap.moveCamera(cameraUpdate);
mMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation.getPosition()));

LatLng nrLatLng = mMap.getProjection().getVisibleRegion().nearRight;
LatLng frLatLng = mMap.getProjection().getVisibleRegion().farRight;
LatLng nlLatLng = mMap.getProjection().getVisibleRegion().nearLeft;
LatLng flLatLng = mMap.getProjection().getVisibleRegion().farLeft;

builder.include(nrLatLng);
builder.include(frLatLng);
builder.include(nlLatLng);
builder.include(flLatLng);

cameraUpdate =CameraUpdateFactory.newLatLngBounds(builder.build(), padding);
mMap.animateCamera(cameraUpdate);

【讨论】:

  • 谢谢 zainoz ...我会尝试这个示例希望它有所帮助:)
猜你喜欢
  • 2016-09-12
  • 2013-04-05
  • 2019-11-13
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多