Я пытаюсь реализовать систему геозон, используя форму многоугольника.В основном, если пользователь входит в область геозоны, он должен получить уведомление.Пройдя много исследований, я смог найти Геозону только с помощью Circular.До сих пор я реализовал систему, но она контролирует только по круглой форме, не если кто-то входит в многоугольник, нарисованный на карте.Если кто-то уже делал полигональное ограждение полигона, пожалуйста, помогите мне
Это код, который я использовал для рисования моего многоугольника
private void drawGeofence() {
Log.d(TAG, "drawGeofence()");
polyLatLng = new ArrayList<>( );
polyLatLng.add( new LatLng( 6.895450, 79.852170 ) ); // Should match last point
polyLatLng.add( new LatLng(6.897287, 79.859544));
polyLatLng.add( new LatLng( 6.905271, 79.862609 ) );
polyLatLng.add( new LatLng( 6.906114, 79.858998 ) );
polyLatLng.add( new LatLng( 6.911808, 79.856206 ) );
polyLatLng.add( new LatLng( 6.912200, 79.851381 ) );
polyLatLng.add( new LatLng( 6.911627, 79.849621 ) );
polyLatLng.add( new LatLng( 6.910965, 79.848073 ) );
polyLatLng.add( new LatLng( 6.895450, 79.852170 ) ); // Should match first point
Log.i(TAG, "computeArea " + SphericalUtil.computeArea(polyLatLng));
map.addPolygon(new PolygonOptions()
.addAll(polyLatLng)
.strokeColor(Color.BLACK)
.strokeWidth( 4 )
.fillColor(0x220000FF));
}
Вот мой код геозоны, который отслеживается только в круглой области
private static final float GEOFENCE_RADIUS = 1006.3975694699f; // in meters
private void startGeofence() {
Log.i(TAG, "startGeofence()");
if( geoFenceMarker != null ) {
// create geofence
Geofence geofence = createGeofence( 6.904254, 79.853798, GEOFENCE_RADIUS );
GeofencingRequest geofenceRequest = createGeofenceRequest( geofence );
addGeofence( geofenceRequest );
} else {
Log.e(TAG, "Geofence marker is null");
}
}
// Create a Geofence
private Geofence createGeofence( double lat, double lng, float radius ) {
Log.d(TAG, "createGeofence");
return new Geofence.Builder()
.setRequestId(GEOFENCE_REQ_ID)
.setCircularRegion( lat, lng, radius)
.setExpirationDuration( GEO_DURATION )
.setTransitionTypes( Geofence.GEOFENCE_TRANSITION_ENTER
| Geofence.GEOFENCE_TRANSITION_EXIT )
.build();
}enter code here