首先,我的问题与Android中gmap中有关GeoFencing的其他问题略有不同。
当用户开始将圆圈定义为地理栅栏区域时,我想在屏幕中央显示一个固定的圆圈。在此阶段,用户应该能够移动地图和地图的缩放级别。移动动作和放大/缩小动作都不能改变圆相对于屏幕的大小。
当用户按下保存按钮时,我想将该圆圈作为CircleOption对象固定到地图上。然后我将能够以米为单位获得CircleOption对象的lon / lat和radius。
我目前正在处理RelativeLayout问题。我正如我所期望的那样用RelativeLayout绘制一个固定的圆,但是我无法获得该RelativeLayout圆的当前半径。您可以看到我的RelativeLayout现在的样子:
我不确定这样做的正确方法。我的搜索重定向我使用RelativeLayout然后使用CircleOption。你的建议是什么?
提前致谢!
答案 0 :(得分:9)
https://developers.google.com/android/reference/com/google/android/gms/maps/model/Circle
CircleOptions circleOptions = new CircleOptions()
.center( new LatLng(fence.getLatitude(), fence.getLongitude()) )
.radius( fence.getRadius() )
.fillColor(0x40ff0000) <Your Color code>
.strokeColor(Color.TRANSPARENT)
.strokeWidth(2);
答案 1 :(得分:0)
一种方法是在XML中的相对布局中定义一个圆。哪个将由用户定义,而地图可以在其下方移动。获取圆的中心作为整个地图片段布局的中心坐标,并且您已经定义了圆的半径,您知道在圆下扫描的区域是什么。
如果用户无法缩放或缩放地图。
希望这会有所帮助!!
答案 2 :(得分:-1)
编辑。 如果我理解你的问题,那么排队是如何将RelativeLayout坐标转换为地理围栏的半径米? 试试这个i want to convert google map pixels to kilometers 更好的方法是使用
android.graphics.Point centerPoint = new android.graphics.Point(100, 100);//center of Circle on the screen
LatLng centerLatLang = mMap.getProjection().fromScreenLocation(centerPoint);
int radius = 50;//Radius of the circle on the screen
android.graphics.Point radiusPoint = new android.graphics.Point(centerPoint.x+radius, centerPoint.y);
LatLng radiusLatLang = mMap.getProjection().fromScreenLocation(radiusPoint);
float[] results = new float[1];
Location.distanceBetween(centerLatLang.latitude, centerLatLang.longitude, radiusLatLang.latitude, radiusLatLang.longitude, results);
float radiusInMeters = results[0];
如果你想使用
将fron latLang转换为与算法相反的点mMap.getProjection().toScreenLocation(latLng)