地图控件原创
金蝶云社区-吴锐雄
吴锐雄
4人赞赏了该文章 1,861次浏览 未经作者许可,禁止转载编辑于2023年02月02日 17:21:37


本文章,介绍如何使用地图控件。


一、设计

在设计器中拖入地图控件,按钮,文本框。

image.png


注册插件

注册一个移动端插件,准备为接下来的步骤添加业务逻辑。

image.png

package kd.ecos.demo;

import kd.bos.bill.events.LocateEvent;
import kd.bos.ext.form.control.MapControl;
import kd.bos.ext.form.control.events.MapSelectEvent;
import kd.bos.ext.form.control.events.MapSelectListener;
import kd.bos.ext.form.dto.MapSelectPointOption;
import kd.bos.form.ClientActions;
import kd.bos.form.IClientViewProxy;
import kd.bos.form.control.Button;
import kd.bos.form.plugin.AbstractMobFormPlugin;

import java.math.BigDecimal;
import java.util.*;

public class DemoMobLocationPlugin extends AbstractMobFormPlugin implements MapSelectListener {

    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
    }

    @Override
    public void select(MapSelectEvent evt) {
    }

    @Override
    public void click(EventObject evt) {
    }

}

二、定位到当前位置

苍穹的地图控件默认展示北京。

image.png

定位当前位置

所以,为了让地图控件显示当前我们所在的位置,需要编写代码,调用地图控件的 getAddress方法。

这里用一个按钮作为触发条件,当点击到按钮时,定位当前位置,并且把位置信息存到文本控件中。

@Override
public void registerListener(EventObject e) {
    super.registerListener(e);
    addClickListeners("kdec_get_loaction");
    MapControl mapControl = getControl("kdec_mapcontrolap");
    mapControl.addSelectListener(this);
}

@Override
public void click(EventObject evt) {
    super.click(evt);
    if (evt.getSource() instanceof Button) {
        switch (((Button) evt.getSource()).getKey()) {
            case "kdec_get_loaction":
                // 获取当前定位
                getPageCache().put("selectLocate", "ture");
                MapControl mapControl = getControl("kdec_mapcontrolap");
                mapControl.getAddress();
                break;
        }
    }
}

@Override
public void select(MapSelectEvent evt) {
    Map<String, Object> map = evt.getPoint();

    // 地图控件的 selectAddress,getAddress方法都会调用这个回调,为防止死循环,需要做一个标志位判断
    if ("ture".equals(getPageCache().get("selectLocate"))) {
        getPageCache().remove("selectLocate");
        Map point = (Map) map.get("point");
        // evt中获取控件
        MapControl mapControl = (MapControl) evt.getSource();
        MapSelectPointOption mapSelectPointOption = new MapSelectPointOption();
        // 经度
        mapSelectPointOption.setLng(((BigDecimal) point.get("lng")).doubleValue());
        // 维度
        mapSelectPointOption.setLat(((BigDecimal) point.get("lat")).doubleValue());
        mapControl.selectPoint(mapSelectPointOption);
    }
    getModel().setValue("kdec_loaction", map.get("address"));

}


效果

image.png




赞 4