如何从纬度和经度中提取位置名称

How to extract location name from lat and lon

我在 flutter 中使用地理定位插件提取了经度和纬度。但是现在我需要根据这些经度和纬度创建地名。

我尝试使用地理编码器插件,但是

  final coordinates = new Coordinates(latitude, longitude);
          var addresses =  Geocoder.local.findAddressesFromCoordinates(coordinates);

      var first = addresses.first; 

上面一行给出了错误,说 getter first is not defined for class Future<>

      print("${first.featureName} : ${first.addressLine}");

如何使用这些经纬度并在 flutter 中转换为地址?

findAddressesFromCoordinates 方法 return Future<List<Address>>

所以你可以使用 then :

final coordinates = new Coordinates(latitude, longitude);
var addresses =  
Geocoder.local.findAddressesFromCoordinates(coordinates).then(
(data) => print(data);
);

或者您可以只使用 async/await :

getAddressesFromCoordinates() async {
final coordinates = new Coordinates(1.10, 45.50);
addresses = await Geocoder.local.findAddressesFromCoordinates(coordinates);
first = addresses.first;
print("${first.featureName} : ${first.addressLine}");}

如果你想了解 dart 中异步编程的基础知识,你应该看看这个 article

findAddressesFromCoordinates returns a Future 在这种情况下。

您可以创建函数或方法 async:

void yourFunction() async {
  final coordinates = new Coordinates(latitude, longitude);
  var addresses = await Geocoder.local.findAddressesFromCoordinates(coordinates);

  var first = addresses.first; 
  print("${first.featureName} : ${first.addressLine}");
}

在这种情况下,您需要在方法调用前使用 await 关键字,这将使函数仅在 运行 after 您的已检索到地址 的对象

另一个选项是在 Future 上使用 then 方法,它看起来像这样:

void yourFunction() {
  final coordinates = new Coordinates(latitude, longitude);
  Geocoder.local.findAddressesFromCoordinates(coordinates).then((addresses) {
    var first = addresses.first; 
    print("${first.featureName} : ${first.addressLine}");
  });
}

在这种情况下,您将回调传递给 then 方法,一旦 findAddressesFromCoordinates 返回,该方法将在其中执行,但 yourFunction 本身将继续 运行.

在本地

试试这个google
final coordinates = new Coordinates(position.latitude, position.longitude);  
geocoder.google('GOOGLE_API_KEY').findAddressesFromCoordinates(coordinates)