You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中用locationFromAddress替换placemarkFromCoordinates获取经纬度

从地址转换获取经纬度的Flutter代码修改方案

原来的代码是通过经纬度逆向解析地址,现在我们调整为通过用户输入的地址正向解析经纬度,核心是使用locationFromAddress()方法替代placemarkFromCoordinates(),具体修改如下:

1. 调整变量定义

新增用户输入地址的变量,以及存储经纬度的变量:

String _inputAddress = ""; // 用户输入的目标地址
LatLng? _position; // 存储解析得到的经纬度

2. 修改核心方法

重写方法逻辑,调用locationFromAddress()解析地址并提取经纬度:

void _getCoordinatesFromAddress() async {
  try {
    // 通过输入地址解析经纬度,返回Location列表
    List<Location> locations = await _geolocator.locationFromAddress(_inputAddress);
    
    if (locations.isNotEmpty) {
      Location location = locations[0];
      // 提取经纬度
      double latitude = location.latitude;
      double longitude = location.longitude;
      
      print("解析得到的经纬度: $latitude, $longitude");
      
      setState(() {
        _position = LatLng(latitude, longitude); // 更新经纬度状态
      });
    } else {
      print("未找到匹配的地址");
    }
  } catch (e) {
    print("地址解析失败: $e");
  }
}

关键说明

  • locationFromAddress()接收一个字符串类型的地址参数,返回List<Location>,通常取第一个元素即可得到目标经纬度
  • 加入try-catch捕获解析异常,避免因地址无效或网络问题导致崩溃
  • 需要确保_geolocator实例已正确初始化,且相关权限(如网络权限)已配置

完整示例代码(结合输入场景)

如果需要结合用户输入框,完整代码示例如下:

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

class AddressToCoordinatesPage extends StatefulWidget {
  const AddressToCoordinatesPage({super.key});

  @override
  State<AddressToCoordinatesPage> createState() => _AddressToCoordinatesPageState();
}

class _AddressToCoordinatesPageState extends State<AddressToCoordinatesPage> {
  final GeolocatorPlatform _geolocator = GeolocatorPlatform.instance;
  String _inputAddress = "";
  LatLng? _position;

  void _getCoordinatesFromAddress() async {
    try {
      List<Location> locations = await _geolocator.locationFromAddress(_inputAddress);
      
      if (locations.isNotEmpty) {
        Location location = locations[0];
        setState(() {
          _position = LatLng(location.latitude, location.longitude);
        });
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text("未找到匹配的地址")),
        );
      }
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text("地址解析失败: $e")),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("地址转经纬度")),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              onChanged: (value) {
                setState(() {
                  _inputAddress = value;
                });
              },
              decoration: const InputDecoration(
                hintText: "输入目标地址",
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _inputAddress.isNotEmpty ? _getCoordinatesFromAddress : null,
              child: const Text("获取经纬度"),
            ),
            const SizedBox(height: 16),
            if (_position != null)
              Text("解析结果: 纬度${_position!.latitude}, 经度${_position!.longitude}"),
          ],
        ),
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者Unknown Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:15:32