Как я могу настроить прослушиватель, который будет уведомлять меня, когда мое новое местоположение находится в пределах многоугольника (вроде как геозона) - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь настроить приложение, которое будет уведомлять пользователя, когда его / ее местоположение находится в многоугольнике. Я читал об использовании библиотеки polyutils, но не смог реализовать их.

Вот что я попробовал

    @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;


    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    buildGoogleApiClient();
    mMap.setMyLocationEnabled(true);

    mMap.setMapType(mMap.MAP_TYPE_SATELLITE);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(48.146536, 16.291830)));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(18));
    DrawPolygon();

    // Log.i(TAG, "onLocationChanged: location" + latLng);
}


@Override
public void onConnected(@Nullable Bundle bundle) {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(INTERVAL);
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this, null);

    Log.d(TAG, "onConnected - isConnected ...............: " + mGoogleApiClient.isConnected());

}
private void DrawPolygon() {
    mPolygon1 = mMap.addPolygon(new PolygonOptions()
            .strokeColor(COLOR_PURPLE_ARGB)
            .add(
                    new LatLng(48.146536, 16.291830),
                    new LatLng(48.146772, 16.290146),
                    new LatLng(48.147397, 16.290380),
                    new LatLng(48.147177, 16.291970)));
    // Store a data object with the polygon, used here to indicate an arbitrary type.
    mPolygon1.setTag("alpha");
    // Style the polygon.
   // stylePolygon(polygon1);

    mPolygon2 = mMap.addPolygon(new PolygonOptions()
            .strokeColor(COLOR_BLUE_ARGB)
            .add(
                    new LatLng(48.146491, 16.290989),
                    new LatLng(48.146265, 16.290898),
                    new LatLng(48.146171, 16.291819),
                    new LatLng(48.146359, 16.291870)));
    mPolygon2.setTag("beta");

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onLocationChanged(Location location) {
    mLastLocation = location;

    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
    for (Polygon polgon : getPolygons()) {
        if (PolyUtil.containsLocation(latLng, polgon.getPoints(), true)) {
            // found it open a info window
            Log.i(LOG_TAG, "Your Currently in : " + polgon);
            return;
        }
    }
}
public Collection<Polygon> getPolygons() {
    Collection<Polygon> polygons = new ArrayList<Polygon>();
    ((ArrayList<Polygon>) polygons).add(1, mPolygon1);
    ((ArrayList<Polygon>) polygons).add(2, mPolygon2);
    return polygons;
}

Когда я запускаю приложение, IDE выдает ошибку, указывающую на строки indexoutofBounds Exception , и приложение не запускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...