zoukankan      html  css  js  c++  java
  • 百度地图的脑残设计,附上代码,为后来的码农们...

    //百度地图的脑残设计,用Flutter添加多个BMFMarker时,必须在添加BMFMarker时自己保存ID,否则响应点击时无法确定用户点击的是哪个标签

    //代码不会返回,也没有任何文档说明,是花了一天时间搜索网络无果,是自己翻江倒海摸索出来的

    //这不自然地让我想起昨天听“得到”的一本书,叫做《是我把你蠢哭了吗》,真让人哭笑不得...
    //附上代码,为后来的码农们...

    //https://www.cnblogs.com/ybmj/p/14408263.html
    //百度地图的脑残设计,附上代码,为后来的码农们...
    Future getListBMFMarker({List listDwinfo}) async {
    if (null == listDwinfo) {
    listDwinfo = listDwinfoGetList2;
    }

    //double _scale = 9900 / 10000; //自己控制off_latitude、off_longitude效果不好

    // BMFMarker marker1 = BMFMarker(
    // position: BMFCoordinate(29.807061, 107.607091),
    // title: 'xxxx',
    // subtitle: 'test',
    // identifier: 'flutter_marker',
    // icon: 'assets/images/location.png',
    // enabled: enable,
    // draggable: dragable);

    int len = listDwinfo.length;
    for (int i = 0; i < len; i++) {
    BMFMarker marker = BMFMarker(
    position: getBMFCoordinate(listDwinfo[i]["dwzb"]),
    title: '${listDwinfo[i]["id"].toString()}、${listDwinfo[i]["dwmc"]}',
    subtitle: 'test',
    identifier: '${listDwinfo[i]["id"].toString()}、${listDwinfo[i]["dwmc"]}',
    icon: 'assets/images/location.png',

    /// 默认情况下, annotation view的中心位于annotation的坐标位置,
    /// 可以设置centerOffset改变view的位置,正的偏移使view朝右下方移动,负的朝左上方,单位是像素
    /// 目前Android只支持Y轴设置偏移量对应SDK的 yOffset(int yOffset) 方法
    centerOffset: BMFPoint(100, 110),
    //标记中心偏移
    enabled: enable,
    draggable: dragable);
    // 百度地图的脑残设计,用Flutter添加多个BMFMarker时,必须在添加BMFMarker时自己保存ID,
    // 否则响应点击时无法确定用户点击的是哪个定位标注
    // 代码不会自动返回,也没有任何文档说明,是花了一天时间搜索网络无果,是自己翻江倒海摸索出来的
    // 下一句是关键代码,将添加的每个BMFMarker的id保存到一个map中,
    // 这样在用setMapClickedMarkerCallback添加BMFMarker的通用响应函数中,便可以根据id号来判断用户点击的是哪一个定位标注
    g_map_BMFMarkerID_dwIndex[marker.getId()] = i;
    g_listBMFMarker.add(marker);

    g_listBMFText.add(BMFText(
    text: '${listDwinfo[i]["id"].toString()}、${listDwinfo[i]["dwmc"]}',
    //纬度偏移-上下 off_latitude, 经度偏移-左右 off_longitude
    //已经在zoomLevel = 15时调整好定位标记与文本标记的相对位置
    // ,当地图缩放时,会发生位置变化,必须使用 Provider 或者 EventBus 进行跟踪更新

    //https://time.geekbang.org/column/article/131890
    //老师,provider、eventBus的用途有啥区别吗,都可以做状态的通知
    // 作者回复: Provider 主要是用来做数据读写共享;event_bus主要是用来做数据状态通知、实现组件间单向数据传递。
    //如果我们的应用足够简单,数据流动的方向和顺序是清晰的,我们只需要将数据映射成视图就可以了。
    // 作为声明式的框架,Flutter 可以自动处理数据到渲染的全过程,通常并不需要 Provider 状态管理。
    // position: getBMFCoordinate(listDwinfo[i]["dwzb"],
    // off_latitude: -0.0002 * g_zoomLevel * _scale,
    // off_longitude: -0.00009 * g_zoomLevel * _scale),
    position: getBMFCoordinate(listDwinfo[i]["dwzb"]),
    //自己控制off_latitude、off_longitude效果不好
    bgColor: Colors.yellow,
    fontColor: Colors.black,
    fontSize: 35,
    // typeFace:
    // BMFTypeFace(familyName: BMFFamilyName.sMonospace, textStype: BMFTextStyle.BOLD_ITALIC),
    typeFace: BMFTypeFace(familyName: BMFFamilyName.sMonospace, textStype: BMFTextStyle.BOLD),
    alignY: BMFVerticalAlign.ALIGN_TOP,
    alignX: BMFHorizontalAlign.ALIGN_LEFT,
    rotate: 0.0,
    zIndex: 99));
    }
    }

    //3、Marker 点击响应,点击文本标签没反应,加在此处有效
    //点击Marker时会回调BaiduMap.OnMarkerClickListener,监听器的实现方式示例如下:
    /// 地图marker点击回调
    myMapController?.setMapClickedMarkerCallback(callback: (String id, dynamic extra) async {
    myMapController.getZoomLevel().then((value) {
    g_zoomLevel = value;
    print('myMapController.getZoomLevel() = ${value.toString()}');
    });
    print('点击 Marker 标签响应:id = ${id}');
    //百度地图的脑残设计,需要在添加BMFMarker时自己保存ID
    //g_listBMFMarkerIDmap.add({marker.getId(): listDwinfo[i]["id"]});
    print('Marker的 标签响应:id = ${listDwinfoGetList2[g_map_BMFMarkerID_dwIndex[id]]["dwmc"]}');

    _markerCallback(id, 'test'); //响应用户点击
    });

      

  • 相关阅读:
    昨天又学到了dp
    LeetCode面试题17.13
    leetcode971
    今天又一题,单调队列leetcode862
    今天学到了一招,LeetCode863
    今天一道简单题,数组排序LeetCode973
    es面试题
    es的常用配置
    es基础一张图
    JMeter中引入外部的JAR包给bean shell 使用
  • 原文地址:https://www.cnblogs.com/ybmj/p/14408263.html
Copyright © 2011-2022 走看看