我想获取当前位置并像上图那样画蓝点。当前位置发生变化时,蓝点会移动。
这是我的代码:
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/