通用地图服务 - xinwu-yang/cube-java GitHub Wiki

magic-map-spring-boot-starter

版本: 1.0.4

功能点:

✅地图通用点API
✅地图通用区域API
✅地图通用轨迹API
✅坐标系转换工具类
⬜聚合查询API
⬜地图区域绘制工具
⬜天网视频点位查询API
⬜警力资源查询API
⬜报警事件查询API
⬜人员轨迹查询API
⬜车辆轨迹查询API

Quick Start:

1.引入依赖

<dependency>
    <groupId>com.tievd.cube.starter</groupId>
    <artifactId>magic-map-spring-boot-starter</artifactId>
    <version>${latest}</version>
</dependency>

2.配置

magic-api:
  web: /magic/web
  resource:
    # 配置文件存储位置。当以classpath开头时,为只读模式
    # mac用户请改为可读写的目录
    # 如果不想存到文件中,可以参考配置将接口信息存到数据库、Redis中(或自定义)
    location: D:\\data\\magic-api
  banner: false
cube:
  magic-map:
    # 相对路径从classpath读取,绝对路径从系统目录读取
    query-dir: C:\\Users\\xinwuy\\magic-sql.xml

3.导入magic-api接口数据包

git clone http://125.71.201.11:9004/cube-commons/magic-map-api.git -b 对应版本号

magic-api.resource.location 指向这个下载目录

4.配置SQL

  • 新建XML文件格式如下,并在yml中配置 cube.magic-map.query-dir XML地址

相对路径从classpath读取,绝对路径从系统目录读取

<?xml version="1.0" encoding="UTF-8"?>
<queries>
    <query name="selectPoint">
        select id, point_name as name, busId as businessCode, lat, lng from sys_map_point ?{username,where username like ${username}}
    </query>
    <query name="selectArea">
        select id, area_name as name, busId as businessCode, c as geoJson from sys_map_area ?{name,where name like ${name}}
    </query>
</queries>
  • SQL查询需要满足一定的数据结构,不然数据查询出来有问题,具体参考:
public class MapPoint implements Serializable {

    /**
     * 主键
     */
    private String id;

    /**
     * 名称
     */
    private String name;

    /**
     * 地址
     */
    private String address;

    /**
     * 业务唯一编码,如:设备id、序列号之类的
     */
    private String businessCode;

    /**
     * 经度
     */
    private String lat;

    /**
     * 纬度
     */
    private String lng;

    /**
     * 坐标系类型,如:百度、高德、ArcGis、腾讯、PGis
     */
    private String coordinateType;

    /**
     * 所属地区
     */
    private String areaId;

    /**
     * 内置类型
     */
    private Integer type;

    /**
     * 点图标
     */
    private String iconUrl;

    /**
     * 拓展字段
     */
    private JSONObject extra;
}
public class MapArea implements Serializable {

    /**
     * 主键
     */
    private String id;

    /**
     * 名称
     */
    private String name;

    /**
     * 业务唯一编码,如:设备id、序列号之类的
     */
    private String businessCode;

    /**
     * GEOJson数据
     */
    private String geoJson;

    /**
     * 拓展字段
     */
    private JSONObject extra;
}
public class MapTrack implements Serializable {

    /**
     * 主键
     */
    private String id;

    /**
     * 名称
     */
    private String name;

    /**
     * 业务唯一编码,如:设备id、序列号之类的
     */
    private String businessCode;

    /**
     * 坐标系类型,如:百度、高德、ArcGis、腾讯、PGis
     */
    private String coordinateType;

    /**
     * 所属地区
     */
    private String areaId;

    /**
     * 内置类型
     */
    private Integer type;

    /**
     * 轨迹点
     */
    List<MapTrackPoint> trackPoints;

    /**
     * 拓展字段
     */
    private JSONObject extra;
}

public class MapTrackPoint implements Serializable {

    /**
     * 主键
     */
    private String id;

    /**
     * 轨迹id
     */
    private String trackId;

    /**
     * 经度
     */
    private String lat;

    /**
     * 纬度
     */
    private String lng;

    /**
     * 上报时间
     */
    private Date time;

    /**
     * 拓展字段
     */
    private JSONObject extra;
}

5.调用接口

# 资源点相关API
/map/point/search 资源点搜索 | GET | 参数:query 必填 查询名称 | 其他业务参数根据SQL中参数名对应直接透传 | 返回值:List<MapPoint>

# 区域相关API
/map/area/search 区域搜索 | GET | 参数:query 必填 查询名称 | 其他业务参数根据SQL中参数名对应直接透传 | 返回值:List<MapArea>

# 轨迹相关API
/map/track/search 轨迹搜索 | GET | 参数:query 必填 查询名称、 trackPointQuery 非必填 轨迹点子查询名称 | 其他业务参数根据SQL中参数名对应直接透传 | 返回值:List<MapTrack>

# 全局配置相关API
/map/config/query/refresh 刷新SQL配置 | GET

6.自定义数据后处理

  • 资源点后处理,新增类并实现 com.tievd.cube.starter.magicmap.handler.IDataHandler<MapPoint/MapArea/MapTrack/MapTrackPoint> 接口
  • 注解 @Component,注入到Spring容器
  • 注解 @Order 可配置后处理顺序
  • query 函数非必须实现,默认全局处理,指定query则重写函数填写查询名称
@Component
public class PointHandler implements IDataHandler<MapPoint> {

    @Override
    public void handle(List<MapPoint> list) {
        // 待处理数据 list
    }

    @Override
    // 此函数非必须重写,不重写默认全局处理
    public String query() {
        return "selectPoints";
    }
}

7.参数预处理

  • 新增类并实现 com.tievd.cube.starter.magicmap.handler.IParamsHandler 接口。
  • 同一查询支持多次处理,注解 @Order 可配置后处理顺序。
  • query 函数非必须实现,默认全局处理,指定query则重写函数填写查询名称
@Component
public class DemoParamHandler implements IParamsHandler {

    @Autowired
    private MagicResourceService magicResourceService;

    @Override
    public void handle(ApiInfo info, MagicScriptContext context, HttpServletRequest request, HttpServletResponse response) {
        // 得到参数列表
        List<Parameter> parameters = info.getParameters();

        // 得到请求接口路径
        String magicReqPath = magicResourceService.getGroupPath(info.getGroupId()) + info.getPath();

        // 以上信息也可以从原生 HttpServletRequest 获取
        request.getParameter("key");

        // 设置自定义参数映射到SQL参数
        context.set("key", "value");
    }
    
    @Override
    // 此函数非必须重写,不重写默认全局处理
    public String query() {
        // 要处理的查询名称,匹配上才处理
        return "selectPoints";
    }
}

8.坐标系转换

提供转换工具类 com.tievd.cube.starter.magicmap.util.CoordinateUtil

支持:

  • WGS84:谷歌地图 OMS ArcGis Bing
  • 火星坐标系:高德地图 腾讯地图
  • 百度坐标系:百度地图
// 世界标准地理坐标(WGS - 84) 转换成 中国国测局地理坐标(GCJ-02)<火星坐标>
wgs84ToGcj02(LatLng location)

// 中国国测局地理坐标(GCJ-02) 转换成 世界标准地理坐标(WGS-84)
gcj02ToWgs84(LatLng location)

// 世界标准地理坐标(WGS - 84) 转换成 百度地理坐标(BD-09)
wgs84ToBd09(LatLng location)

// 中国国测局地理坐标(GCJ-02)<火星坐标> 转换成 百度地理坐标(BD-09)
gcj02ToBd09(LatLng location)

// 百度地理坐标(BD-09) 转换成 中国国测局地理坐标(GCJ-02)<火星坐标>
bd09ToGcj02(LatLng location)

// 百度地理坐标(BD-09) 转换成 世界标准地理坐标(WGS-84)
bd09ToWgs84(LatLng location)
⚠️ **GitHub.com Fallback** ⚠️