在我的Android应用程序中,我想要求用户触摸地图的位置数据。 GoogleMap.OnMapClickListener
提供触摸位置作为纬度和经度坐标。
public abstract void onMapClick(LatLng point)
为了传递区域而不是点,我需要计算以触摸位置为中心的边界框的坐标。边界框的扩展名不取决于地图的缩放级别。
我不想要请求可见屏幕的边界框 - 只是触摸位置周围的一个小边框区域。
我可以使用任何框架方法吗?否则,如何为边界框的扩展找到合适的距离值?
答案 0 :(得分:0)
不是LatLngBounds你需要什么?
答案 1 :(得分:0)
您可以覆盖onMarkerClick
,如下所示
@Override
public boolean onMarkerClick(Marker marker) {
if (markerClicked) {
if (polygon != null) {
polygon.remove();
polygon = null;
}
polygonOptions.add(marker.getPosition());
polygonOptions.strokeColor(ContextCompat.getColor(getContext(), R.color.colorRedTransparent));
polygonOptions.fillColor(ContextCompat.getColor(getContext(), R.color.colorBlueTransparent));
polygonOptions.strokeWidth(5.0f);
polygon = mMap.addPolygon(polygonOptions);
polygon.setClickable(true);
} else {
if (polygon != null) {
polygon.remove();
polygon = null;
}
polygonOptions = new PolygonOptions().add(marker.getPosition());
markerClicked = true;
}
return true;
}
传递多边形以生成边界框
public static Rectangle getBoundingBox(Polygon polygon) {
double boundsMinX = Double.MAX_VALUE; // bottom south latitude of the bounding box.
double boundsMaxX = Double.MIN_VALUE; // top north latitude of bounding box.
double boundsMinY = Double.MAX_VALUE; // left longitude of bounding box (western bound).
double boundsMaxY = Double.MIN_VALUE; // right longitude of bounding box (eastern bound).
for (int i = 0; i < polygon.getPoints().size(); i++) {
double x = polygon.getPoints().get(i).latitude;
boundsMinX = Math.min(boundsMinX, x);
boundsMaxX = Math.max(boundsMaxX, x);
double y = polygon.getPoints().get(i).longitude;
boundsMinY = Math.min(boundsMinY, y);
boundsMaxY = Math.max(boundsMaxY, y);
}
//Rectangle(double left, double bottom, double right, double top)
return new Rectangle(boundsMinY, boundsMinX, boundsMaxY, boundsMaxX);
}
答案 2 :(得分:-1)
我不确定我是否完全理解你的问题,但通常使用一些方法完成屏幕到地图的坐标,可能是这样的:
Projection projection = googleMaps.getProjection();
Point p = projection.toScreenLocation(point);
LatLng topLeft = projection.fromScreenLocation(new Point(p.x - halfWidth, p.y - halfHeight));
LatLng bottomRight = projection.fromScreenLocation(new Point(p.x + halfWidth, p.y + halfHeight));
修改强>
上面的
point
是您在LatLng
上收到的onMapClick
。p
是所述点击事件的屏幕位置p.x - halfWidth
,p.y - halfHeight
,p.x + halfWidth
,p.y + halfHeight
是点击位置周围的边界框,宽度为2 * halfWidth
,高度为2 * halfHeight
topLeft
和bottomRight
是纬度 - 经度坐标中点击事件周围的边界框。