翩翩:点击打开谷歌地图的地图盒符号

我有一个项目使用 地图盒 在地图上显示地址位置。我有经纬度 (-6.192461941069894,106.97593586545025)就像这样,我想如果我在标记上点击右键,我想根据我所拥有的经纬度打开谷歌地图应用。但问题是,我无法在点击符号后打开谷歌地图,因为点击地图后的经纬度与我的经纬度不一样。

enter image description here

逻辑源码

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");
      },

我认为当点击地图上的点彼此接近时,我可以直接打开谷歌地图应用程序。我如何才能做到这一点?

完整的源代码

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';
    }
  }
}

解决方案:

通过点击地图生成精确到15位数的完全相同的坐标是远远不可能的。

我建议计算出经纬度的偏差,当偏差低于一定的阈值时,启动startGoogleMaps函数。请尝试像下面这样的方法。

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);
        }

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何将Twitter api与mule集成

2022-9-9 2:34:17

未分类

k8s PodSecurityPolicy的舵手模板。

2022-9-9 2:34:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索