当前位置: 首页 > 知识库问答 >
问题:

Android地图V2 newLatLngBounds带轴承

公孙鸿才
2023-03-14
<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_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="270"/>

google开发人员文档中的描述是:

公共静态CameraUpdate newLatLngBounds(LatLngBounds bounds,int padding)(...).返回的CameraUpdate的方位为0,倾斜度为0。(...)“。

如何更改轴承值?

mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
mMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder()
.target(mMap.getCameraPosition().target)
.zoom(mMap.getCameraPosition().zoom)
.bearing(270)
.build()));

共有1个答案

韦晟睿
2023-03-14

我有一个替代方案,我也有同样的问题。我将展示如何将边界转换为缩放,然后我们将简单地使用cameraposition.builder()来创建正确的位置。

private static final double LN2 = 0.6931471805599453;
    private static final int WORLD_PX_HEIGHT = 256;
    private static final int WORLD_PX_WIDTH = 256;
    private static final int ZOOM_MAX = 21;

    public int getBoundsZoomLevel(LatLngBounds bounds, int mapWidthPx, int mapHeightPx){

        LatLng ne = bounds.northeast;
        LatLng sw = bounds.southwest;

        double latFraction = (latRad(ne.latitude) - latRad(sw.latitude)) / Math.PI;

        double lngDiff = ne.longitude - sw.longitude;
        double lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;

        double latZoom = zoom(mapHeightPx, WORLD_PX_HEIGHT, latFraction);
        double lngZoom = zoom(mapWidthPx, WORLD_PX_WIDTH, lngFraction);

        int result = Math.min((int)latZoom, (int)lngZoom);
        return Math.min(result, ZOOM_MAX);
    }

    private double latRad(double lat) {
        double sin = Math.sin(lat * Math.PI / 180);
        double radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
        return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
    }
    private double zoom(int mapPx, int worldPx, double fraction) {
        return Math.floor(Math.log(mapPx / worldPx / fraction) / LN2);
    }

然后您可以使用此代码并添加一个带有边界的方位/和或倾斜:

            LatLngBounds bounds = LatLngBounds.builder()
                    .include(swCorner)
                    .include(neCorner).build();
            CameraPosition cp = new CameraPosition.Builder()
                    .bearing(randomBearing())
                    .tilt(randomTilt())
                    .target(latLng)
                    .zoom(getBoundsZoomLevel(bounds, findViewById(R.id.map).getMeasuredWidth(), findViewById(R.id.map).getMeasuredHeight()))
                    .build();
            CameraUpdate cu = CameraUpdateFactory.newCameraPosition(cp);
            mMap.animateCamera(cu);

这将起作用(您必须将mMap更改为您的实际map变量,并将id更改为您的map id)。

 类似资料:
  • 我想从复杂映射中读取值,并并行执行一个函数。为此,我使用了Java 8中的ForkJoinPool。 我在这里面临的问题是,对于少数值,函数执行两次。起初我认为,Hashmap不是线程安全的,所以我尝试使用HashTable,但它是相同的。。。

  • 所以我看到了一个特殊的例外,我敢肯定的是谷歌地图的绘图代码。 我有一个片段,在那里我以编程方式添加了一个支持地图片段,然后我在其中操纵谷歌地图实例。 这是stacktrace: 我无法可靠地复制它(尽管这种情况经常发生),我已经查看了ReadWriteDirectByteBuffer和ShortToByteBufferAdapter,但没有任何东西突然出现在我面前。 有什么想法吗?

  • 问题内容: 我想做一个需要集成Google MapsAPI的项目。我需要自动完成,本地化并在地图上绘制路线。我该如何用angular做到这一点,您可以为此推荐一个库吗?或者我该如何使用javascript的GoogleMapsAPI做到这一点。该项目是使用yeoman-fullstack生成的。 谢谢。 问题答案: 首先,如果您想让 AngularJS使用* Google Maps API ,则有

  • 在一些应用场景中,有时需要绘制两个 x 轴或两个 y 轴,这样可以更直观地显现图像,从而获取更有效的数据。Matplotlib 提供的 twinx() 和 twiny() 函数,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。 下面示例绘制了一个具有两个 y 轴的图形,一个显示指数函数 exp(x),另一个显示对数函数 log(x)。 输

  • 双轴图表用于显示两种不同图表类型中的两种不同度量。需要一个日期列和两个度量来构建双轴图表。 图表中使用了不同的比例,帮助用户理解这两个度量。创建双轴图表的过程如下面给出的步骤。 例如,考虑一个数据源:Sample-Superstore 及其度量和维度。 第1步:转到工作表。 第2步:按住键盘上的Ctrl键。 第3步:选择维度OrderDate,测量销售额(Sales)和数量(Quantity),如

  • 但它不适用于以下内容:https://maps.googleapis.com/maps/api/directions/json?origin=32,52&destination=34,54&key=aizasybvr07afm-1ddgvgt392lrnuge3wet6nuy