Флаттер: символ Mapbox при нажатии открыть карты Google - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть проект, использующий MapBox , чтобы показать местоположение адреса на карте. У меня есть широта и долгота ( -6.192461941069894 , 106.97593586545025 ), например, я хочу, если я нажимаю вправо на маркер, я хочу открыть Google Maps Apps, основываясь на широте и долготе, которые у меня есть. Но проблема в том, что я не могу открыть карты Google после символа клика, потому что широта и долгота после карт клика не совпадают с широтой и долготой, которые у меня есть.

enter image description here

Logi c Исходный код

onMapClick: (point, latlng) {
        if (latlng.latitude == latitude && latlng.longitude == longitude) {
          launchGoogleMaps(latitude: latitude, longitude: longitude);
        }
        print(
            "From Map ${latlng.latitude} |${latlng.latitude} \nFrom Server $latitude||$longitude \n\n");
      },

Я думаю, что когда точки нажатия на карте расположены близко друг к другу, я могу напрямую открыть приложение Google Maps. Как я могу это сделать?

Полный исходный код

class ExampleMapBox extends StatefulWidget {
  @override
  _ExampleMapBoxState createState() => _ExampleMapBoxState();
}

class _ExampleMapBoxState extends State<ExampleMapBox> {
  MapboxMapController mapController;
  double latitude, longitude;

  @override
  void initState() {
    super.initState();
    latitude = -6.192461941069894;
    longitude = 106.97593586545025;
  }

  void _onMapCreated(MapboxMapController mapboxMapController) {
    mapController = mapboxMapController;
  }

  @override
  Widget build(BuildContext context) {
    return MapboxMap(
      onMapCreated: _onMapCreated,
      initialCameraPosition: CameraPosition(target: LatLng(latitude, longitude), zoom: 10),
      onStyleLoadedCallback: () => addSymbol(mapController),
      onMapClick: (point, latlng) {
        if (latlng.latitude == latitude && latlng.longitude == longitude) {
          launchGoogleMaps(latitude: latitude, longitude: longitude);
        }
        print(
            "From Map ${latlng.latitude} |${latlng.latitude} \nFrom Server $latitude||$longitude \n\n");
      },
    );
  }

  void addSymbol(MapboxMapController mapBoxController) {
    mapBoxController.addSymbol(
      SymbolOptions(
        geometry: LatLng(latitude, longitude),
        iconImage: "assets/images/custom-icon.png",
        iconSize: 2,
      ),
    );
  }

  void launchGoogleMaps({@required double latitude, @required double longitude}) async {
    String googleUrl = 'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude';

    if (await canLaunch(googleUrl)) {
      await launch(googleUrl);
    } else {
      throw 'Could Not Open The Map';
    }
  }
}

1 Ответ

0 голосов
/ 24 апреля 2020

Генерация точно таких же координат с точностью до 15 ди git нажатием на карту далека от возможной.

Я бы порекомендовал вычислить отклонение по широте и долготе и запустить функцию launchGoogleMaps, когда отклонение ниже определенного порога. Пожалуйста, попробуйте что-то вроде ниже:

deviation_lat = (latlng.latitude - latitude) * (latlng.latitude - latitude);
deviation_lon = (latlng.longitude - longitude) * (latlng.longitude - longitude);

if (deviation_lat < 1 && deviation_lon < 1) {
          launchGoogleMaps(latitude: latitude, longitude: longitude);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...