在Android中使用预览绘制圆形地理围栏

时间:2014-12-17 14:27:43

标签: android google-maps android-layout geofencing android-geofence

首先,我的问题与Android中gmap中有关GeoFencing的其他问题略有不同。

当用户开始将圆圈定义为地理栅栏区域时,我想在屏幕中央显示一个固定的圆圈。在此阶段,用户应该能够移动地图和地图的缩放级别。移动动作和放大/缩小动作都不能改变圆相对于屏幕的大小。

当用户按下保存按钮时,我想将该圆圈作为CircleOption对象固定到地图上。然后我将能够以米为单位获得CircleOption对象的lon / lat和radius。

我目前正在处理RelativeLayout问题。我正如我所期望的那样用RelativeLayout绘制一个固定的圆,但是我无法获得该RelativeLayout圆的当前半径。您可以看到我的RelativeLayout现在的样子:

enter image description here

我不确定这样做的正确方法。我的搜索重定向我使用RelativeLayout然后使用CircleOption。你的建议是什么?

提前致谢!

3 个答案:

答案 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)