首页 > 解决方案 > 将标记方向更改为特定点

问题描述

我用地图构建了一个 android 应用程序,并添加了一些自定义标记,让我告诉你。

在此处输入图像描述

我想将那张图片旋转到另一个点。我也保存了另一点的坐标。

这是现在保存在数据库中的关于这个标记的内容。

在此处输入图像描述

纬度和经度是实际标记的位置,而del_lat,del_lng是我要指向的收货地址。如何在该位置旋转图像?

这是我的 ClusterManagerRenderer

public class ClusterManagerRenderer extends DefaultClusterRenderer<FinalMarkerCluster> {
    private final IconGenerator iconGenerator;
    private ImageView imageView;
    private final int markerWidth;
    private final int markerHeight;

    public ClusterManagerRenderer(Context context, GoogleMap map, ClusterManager<FinalMarkerCluster> clusterManager) {
        super(context, map, clusterManager);


        iconGenerator = new IconGenerator(context.getApplicationContext());
        imageView = new ImageView(context.getApplicationContext());
        markerWidth = (int) context.getResources().getDimension(R.dimen.custom_marker_image);
        markerHeight = (int) context.getResources().getDimension(R.dimen.custom_marker_image);
        imageView.setLayoutParams(new ViewGroup.LayoutParams(markerWidth,markerHeight));
        int padding = (int) context.getResources().getDimension(R.dimen.custom_marker_padding);

        imageView.setPadding(padding, padding,padding,padding);
        iconGenerator.setContentView(imageView);

    }

    @Override
    protected void onBeforeClusterItemRendered(FinalMarkerCluster item, MarkerOptions markerOptions) {
       imageView.setImageResource(item.getIconPicture());
        Bitmap icon = iconGenerator.makeIcon();
        markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(item.getTitle());

    }

    @Override
    protected boolean shouldRenderAsCluster(Cluster<FinalMarkerCluster> cluster) {
        return false;
    }
}

在这里我正在创建标记

 private void setRendering(List<MarkerCluster> markerClusters) {
        for(int i = 0 ;i < markerClusters.size() ;i++) {

            LatLng latLng = new LatLng(markerClusters.get(i).getLatitude(), markerClusters.get(i).getLongitude());
            String title = markerClusters.get(i).getTitle();
            String snippet = markerClusters.get(i).getSnippet();
            LatLng delLatLng = new LatLng(markerClusters.get(i).getDel_lat(), markerClusters.get(i).getDel_lng());
            int pic = markerClusters.get(i).getIconPicture();
            String offerid = markerClusters.get(i).getOfferid();
            FinalMarkerCluster finalMarkerCluster = new FinalMarkerCluster(
                    latLng,
                    title,
                    snippet,
                    pic,
                    offerid,
                    delLatLng
            );
            finalMarkerClusters.add(finalMarkerCluster);
        }



        if(mGoogleMap != null) {
            if(mClusterManager == null) {
                mClusterManager = new ClusterManager<FinalMarkerCluster>(getApplicationContext(),mGoogleMap);
            }
            if(mClusterManagerRender == null) {
                mClusterManagerRender = new ClusterManagerRenderer(getApplicationContext(),mGoogleMap,mClusterManager);
                mClusterManager.setRenderer(mClusterManagerRender);
            }
            for(int j = 0; j< finalMarkerClusters.size();j++) {
                mClusterManager.addItem(finalMarkerClusters.get(j));
            }
            mClusterManager.cluster();

        }
    }

这是 MarkerCluster 对象

public class FinalMarkerCluster implements ClusterItem {

    private LatLng position;
    private String title;
    private String snippet;
    private int iconPicture;
    private String offerId;
    private LatLng deliveryPosition;

    public FinalMarkerCluster(LatLng position, String title, String snippet, int iconPicture, String offerId, LatLng deliveryPosition) {
        this.position = position;
        this.title = title;
        this.snippet = snippet;
        this.iconPicture = iconPicture;
        this.offerId = offerId;
        this.deliveryPosition = deliveryPosition;
    }


WITH GETTERS AND SETTERS 

我只想在那一点上旋转图像,提前谢谢你!

标签: androidmaps

解决方案


这并没有解决聚类问题,但对于简单的标记旋转,两件事会派上用场:

要确定从 A 点(示例屏幕右下方的标记)到 B 点的方位,请使用SphericalUtil.computeHeading

        // add two markers
    LatLng m1 = new LatLng(40.763807, -80.362280);
    LatLng m2 = new LatLng(40.821666, -80.636242);
    MarkerOptions m1o = new MarkerOptions().position(m1).title("m1").flat(true);
    MarkerOptions m2o = new MarkerOptions().position(m2).title("m2").flat(true);

    double hdg = SphericalUtil.computeHeading(m1,m2);

并在第二个标记的方向上旋转第一个标记(A,右下),将轴承应用于标记旋转:

    m1o.rotation((float)hdg);

并添加标记

    mMap.addMarker(m1o);
    mMap.addMarker(m2o);

请注意使用flatwhich 在屏幕旋转时保持北对齐。如果不希望这样flat做,则删除非旋转标记。

另请注意,旋转是围绕可能需要进一步考虑的锚点。

在此图像中,屏幕已旋转,因此“屏幕向上”为 ~NNW,用于演示目的。

在此处输入图像描述


推荐阅读