我想获取当前位置并绘制蓝点,如上图所示。当前位置发生变化时,蓝点正在移动。
这是我的代码:
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);
}
你可以帮帮我吗?图片已在资源文件夹中。
答案 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。
要使用蓝点(半透明的较大圆圈)绘制精度,请使用不确定度计算圆半径。