Я обнаружил, что моя предыдущая проблема была связана с разрешениями камеры для устройств. Обычно камера с Android получает доступ к местоположению пользователя и сохраняет координаты GPS в виде тега Exif, но устройства ios обычно не сохраняют это по умолчанию, если пользователь не разрешает доступ к приложению камеры.
Я изменил свое приложение, чтобы проверить, имеет ли изображение координаты GPS, и пользователь решает, хочет ли он поделиться своим фактическим местоположением или местоположением изображения.
Я также должен сделать некоторую математику для обработки координат:
void _checkGPSData() async {
Map<String, IfdTag> imgTags = await readExifFromBytes( File(image.path).readAsBytesSync() );
if (imgTags.containsKey('GPS GPSLongitude')) {
setState(() {
_imgHasLocation = true;
_imgLocation = exifGPSToGeoFirePoint(imgTags);
});
}
}
GeoFirePoint exifGPSToGeoFirePoint(Map<String, IfdTag> tags) {
final latitudeValue = tags['GPS GPSLatitude'].values.map<double>( (item) => (item.numerator.toDouble() / item.denominator.toDouble()) ).toList();
final latitudeSignal = tags['GPS GPSLatitudeRef'].printable;
final longitudeValue = tags['GPS GPSLongitude'].values.map<double>( (item) => (item.numerator.toDouble() / item.denominator.toDouble()) ).toList();
final longitudeSignal = tags['GPS GPSLongitudeRef'].printable;
double latitude = latitudeValue[0]
+ (latitudeValue[1] / 60)
+ (latitudeValue[2] / 3600);
double longitude = longitudeValue[0]
+ (longitudeValue[1] / 60)
+ (longitudeValue[2] / 3600);
if (latitudeSignal == 'S') latitude = -latitude;
if (longitudeSignal == 'W') longitude = -longitude;
return GeoFirePoint(latitude, longitude);
}