Установить домашнее местоположение - DJI Android Mobile SDK - PullRequest
0 голосов
/ 05 ноября 2018

Мне удалось добавить маркер на Google Maps с помощью общедоступного void onMapClick (LatLng point).

Я сохранил значение "point" в приватном LatLng mLatLngHOME = точке; (который будет использоваться для метода initFlightController () для установки домашнего местоположения).

private void initFlightController() {

    if (isFlightControllerSupported()) {
        mFlightController = ((Aircraft) DJISDKManager.getInstance().getProduct()).getFlightController();
        mFlightController.setStateCallback(new FlightControllerState.Callback() {
            @Override
            public void onUpdate(FlightControllerState djiFlightControllerCurrentState) {

                    djiFlightControllerCurrentState.setHomeLocation(new LocationCoordinate2D(mLatLngHOME.latitude, mLatLngHOME.longitude));
            }
        });
    }
}

private boolean isFlightControllerSupported() {
    return DJISDKManager.getInstance().getProduct() != null &&
            DJISDKManager.getInstance().getProduct() instanceof Aircraft &&
            ((Aircraft) DJISDKManager.getInstance().getProduct()).getFlightController() != null;
}

Используя демонстрационное приложение DJI ( DJIDemoApplication.java & MApplication.java ), я создал Broadcast Receiver в MainActivity.java .

В Broadcast я вызываю метод updateFlightController () , где я отображаю некоторое сообщение Toast:

private void updateFlightController() {

    if (isFlightControllerSupported()) {
        mFlightController = ((Aircraft) DJISDKManager.getInstance().getProduct()).getFlightController();
        mFlightController.setStateCallback(new FlightControllerState.Callback() {
            @Override
            public void onUpdate(FlightControllerState djiFlightControllerCurrentState) {

                    // TEST
                    showToast("mLatLngHOME = " + mLatLngHOME);
                    showToast("Latitude / Longitude = " + mLatLngHOME.latitude + " / " + mLatLngHOME.longitude);
            }
        });
    }
}

Проблема в том, что они отображают mLatLngHOME = ноль и Широта / Долгота = NaN / NaN .

Как и в методе updateFlightController () , он остается в цикле и сохраните некоторые старые значения.

Я что-то пропустил?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Переменная mLatLngHOME никогда не обновляется в методе onUpdate() setStateCallback FlightController, поэтому она определенно сохраняет старые значения. Пожалуйста, проверьте код ниже для справки:

 if (mFlightController != null) {
        mFlightController.setStateCallback(new FlightControllerState.Callback() {
            @Override
            public void onUpdate(FlightControllerState djiFlightControllerCurrentState) {
                droneLocationLat = djiFlightControllerCurrentState.getAircraftLocation().getLatitude();
                droneLocationLng = djiFlightControllerCurrentState.getAircraftLocation().getLongitude();
                updateDroneLocation();
            }
        });
    }

Для получения более подробной информации об использовании DJIFlightController вы можете проверить этот учебник: https://developer.dji.com/mobile-sdk/documentation/android-tutorials/GSDemo-Google-Map.html#locating-aircraft-on-google-map

0 голосов
/ 05 ноября 2018

Похоже, что это не проблема SDK DJI, поскольку используемый вами класс и баллы не связаны с продуктами DJI.

...