获取当前位置时,在ImageView中绘制圆圈IndoorAtlas SDK

时间:2015-05-11 11:43:23

标签: android

enter image description here

我想获取当前位置并绘制蓝点,如上图所示。当前位置发生变化时,蓝点正在移动。

这是我的代码:

public void onServiceUpdate(ServiceState state) {
    mSharedBuilder.setLength(0);
    mSharedBuilder.append("Location: ")
            .append(state.getRoundtrip()).append("ms")
            .append(state.getGeoPoint().getLatitude())
            .append(state.getGeoPoint().getLongitude())
            .append(state.getMetricPoint().getX())
            .append(state.getMetricPoint().getY())
            .append(state.getImagePoint().getI())
            .append(state.getImagePoint().getJ())
            .append(state.getHeadingDegrees())
            .append(state.getUncertainty());
    double x1 = state.getMetricPoint().getX();
    double y1 = state.getMetricPoint().getY();
    float x = (float) x1;
    float y = (float) y1;
    Paint paint = null;
    canvas.drawCircle(x,y,1,paint);
}
你可以帮帮我吗?图片已在资源文件夹中。

1 个答案:

答案 0 :(得分:1)

首先,在这种情况下,如果您使用ServiceState#getImagePoint()中的坐标会更容易 - 这些(I& J)是原始平面图中您所在位置的坐标。即如果您的原始映射&上传的楼层平面图的尺寸为800x600,服务可能会返回位置I:400,J:300表示您现在位于映射区域的中心。

但是你不能像这样绘制一个圆:canvas.drawCircle(400,300,radius,paint) - 因为取决于你的图像当前显示的方式(例如缩放),你可能会画到不正确的位置。

您需要考虑屏幕上图像的位置以及它的当前尺寸,即缩放比例。例如。如果你有一个尺寸为1920x1080的显示器,并且你的平面图大小为800x600被绘制为居中而没有任何缩放到占据整个屏幕空间的ImageView(在这里假设完全是1920x1080的肖像),那么你需要绘制你的当前坐标(400,300)进入画布x:((1080-800)/ 2)+400,y:((1920-600 / 2)+300)= 540,960。

要使用蓝点(半透明的较大圆圈)绘制精度,请使用不确定度计算圆半径。