android - 获取当前位置时在ImageView中画圆 IndoorAtlas SDK

标签 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);
}

你能帮帮我吗?图片已在资源文件夹中。

最佳答案

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

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

您需要考虑图像在屏幕上的位置及其当前尺寸,即缩放比例。例如。如果您有一个尺寸为 1920x1080 的显示器,并且尺寸为 800x600 的平面图图像是居中绘制的,并且没有任何缩放到占据整个屏幕空间的 ImageView(假设此处为完整的 1920x1080 纵向),那么您需要绘制当前的坐标 (400,300) 到 Canvas x: ((1080-800)/2)+400, y: ((1920-600/2)+300) = 540,960.

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

关于android - 获取当前位置时在ImageView中画圆 IndoorAtlas SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30166789/

相关文章:

java - OS Mavericks 中的 ANT 命令出错

java - Android 上的 InetAddress.getByName

Android Proguard - 如何保持仅从 XML 布局引用的 onClick 处理程序

android - java.exe 已退出,代码为 2 (MSB6006) 无法写入输出 : Too many field references: 81626; max is 65536

java - 使用 LocationServices 获取纬度和经度

android - 如何调试 ARCore - AugmentedImage

java - 当 TextView 为空时,应用程序停止工作。我该如何解决?

android - 如何在 android 中存储和检索共享首选项中的数组?

Android - 电话选择器 (HintRequest) 并未在所有设备中提供电话号码建议

android - 蓝牙文件交换是否完全安全?