Трудно определить ваш реальный вопрос, но если самолет имеет четкое представление о небе, то он будет прикрепляться к нескольким спутникам GPS и сообщать о местоположении через вызов, как показано ниже. Если у вас нет четкого представления о небе (технически южная экспозиция), то GPS не сможет установить соединение с GPS-спутниками и не будет сообщать о местоположении. В отличие от вашего мобильного телефона (который может использовать GPS, сайт сотовой связи и WIFI, чтобы найти себя), в самолетах есть только GPS.
Application.getAircraftInstance().getFlightController().setStateCallback(new FlightControllerState.Callback() {
@Override
public void onUpdate(FlightControllerState djiFlightControllerCurrentState) {
}
});
Что касается того, почему Панды выдавали это конкретное предупреждение A value is trying to be set on a copy of a slice...
и как его избежать:
Во-первых, использование этого синтаксиса должно предотвратить сообщение об ошибке:
result.loc[:,'Latitude'] = result['Latitude'].apply(numbers)
.apply()
может пытаться изменить временную копию копии столбцов Latitude
/ Longitude
в вашем фрейме данных. Это означает, что столбец копируется в новое место в памяти перед выполнением операции с ним. В статье, на которую вы ссылались ( http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy ), приведены примеры того, почему это может привести к непредвиденным проблемам в определенные ситуации.
Вместо этого Pandas рекомендует вместо этого использовать синтаксис, который обеспечит изменение представления столбца вашего информационного кадра с помощью операции .apply()
. Это гарантирует, что ваш фрейм данных будет изменен так, как вы ожидаете. Код, который я написал выше с использованием .loc
, сообщит Pandas о доступе и изменении содержимого этого столбца на месте в памяти, и это не позволит Pandas выдать предупреждение, которое вы видели.
Если вы не хотите изменять df
, я бы предложил избавиться от apply
и векторизовать это. Одним из вариантов является использование eval
.
u = df.assign(Latitude=df['Latitude'].str[:-1].astype(float))
u['Longitude'] = df['Longitude'].str[:-1].astype(float)
df[u.eval("24 < Latitude < 30 and 79 < Longitude < 87")]
У вас есть больше вариантов, используя Series.between
:
u = df['Latitude'].str[:-1].astype(float))
v = df['Longitude'].str[:-1].astype(float))
df[u.between(24, 30, inclusive=False) & v.between(79, 87, inclusive=False)]