Я занимаюсь некоторыми исследованиями в области использования Core Location. Я хотел бы сохранить информацию о местоположении через Core Data. До сих пор кажется, что я могу просто сохранить информацию о CLLocation (это, по сути, самая маленькая информация о местоположении). Является ли это CLLocation всем, что требуется для последующего восстановления данных и определения того, находится ли пользователь в этом конкретном месте?Сохранение данных о местоположении ядра для данных ядра?
ответ
С CLLocation
соответствует NSCoding
, это может быть так же просто, как создать атрибут Core Data с «преобразованным» типом. Затем вы можете назначить CLLocation
объектов этому атрибуту и прочитать их обратно.
Однако вы не сможете фильтровать или сортировать данные, используя это значение, например, если вы хотите найти все экземпляры с местоположением в определенной области. Для этого вам нужно будет добавить атрибуты для представления значений широты и долготы CLLocation
отдельно от самого CLLocation
. Вам также может понадобиться информация о высоте и/или точности, в зависимости от того, какой тип вы планируете делать.
Я делаю это, сохраняя данные о широте, долготе и высоте как двойные (NSNumbers) в записи путевой точки в базе данных CoreData, а затем используя их для создания точки CLLocationCoordinate2D всякий раз, когда я загружаю их из базы данных.
Вы хотите сделать небольшую фильтрацию на пути, чтобы убедиться, что у вас хорошая точка (горизонтальная точность ниже порогового значения - и выше 0, поскольку они могут обозначать плохие точки с отрицательными значениями). Я также видел непоследовательные данные, что проблематично, поэтому я отслеживаю временную метку последнего загруженного значения и отбрасываю любые новые точки с меткой времени до этого значения.
Есть проблемы, с которыми нужно работать, чтобы иметь дело с настройками фонового режима и LocationManager, но структура захвата местоположений в CoreData может работать хорошо - я зафиксировал следы в базе данных с более чем 20 000 путевых точек в течение часов без проблем.
Что такое запись путевой точки? это пользовательский объект, который вы создали? – AlvinfromDiaspar
Да, как часть приложения для походов. Это похоже на путевые точки, определенные в системах GPS с некоторой дополнительной информацией. CoreData позволяет мне связать их с трассами и парками и т. Д., А также с любыми захватами мультимедиа, выполненными в ходе похода. –