- sample代码架构
- sample代码实现
- 开发注意事项
4.9.1 sample代码架构
地图元素功能只在Pilot2上支持,机场没有可视化界面,不支持地图元素功能。
- Pilot2与云端建立连接,并成功加载Map地图元素模块:Pilot2上云成功后,并通过JSBridge成功加载API模块、WS模块、Map模块,Pilot2内部会创建websocket连接,并请求云端获取地图元素列表。
- 地图元素变更,通知Pilot2端重新获取地图元素列表。
4.9.2 sample代码实现
1、Pilot2成功上云,并通过JSBridge成功加载Map地图模块后,Pilot2会与后端建立websocket连接,成功建立websocket连接后,Pilot2会通过GET /map/api/v1/workspaces/{workspace_id}/element-groups请求后端获取所有图层为2的地图元素列表,对应sdk包中封装的接口为:IHttpMapService#getMapElements
@GetMapping(PREFIX + "/workspaces/{workspace_id}/element-groups")
HttpResultResponse<List<GetMapElementsResponse>> getMapElements(
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "group_id", required = false) String groupId,
@RequestParam(name = "is_distributed", required = false) Boolean isDistributed,
HttpServletRequest req, HttpServletResponse rsp);
在示例代码中的实现为:WorkspaceElementController#getMapElements
@Override
public HttpResultResponse<List<GetMapElementsResponse>> getMapElements(String workspaceId, String groupId, Boolean isDistributed, HttpServletRequest req, HttpServletResponse rsp) {
// 调用elementService#getAllGroupsByWorkspaceId获取同一工作空间下所有的地图元素
List<GetMapElementsResponse> groupsList = elementService.getAllGroupsByWorkspaceId(workspaceId, groupId, isDistributed);
return HttpResultResponse.<List<GetMapElementsResponse>>success(groupsList);
}
@Override
public List<GetMapElementsResponse> getAllGroupsByWorkspaceId(String workspaceId, String groupId, Boolean isDistributed) {
// 获取所有地图元素
List<GetMapElementsResponse> groupList = groupService.getAllGroupsByWorkspaceId(workspaceId, groupId, isDistributed);
groupList.forEach(group -> group.setElements(groupElementService.getElementsByGroupId(group.getId())));
return groupList;
}
2、在Pilot2/Web创建地图元素(注意web与Pilot2共用的是同一个接口),Pilot2/Web会通过POST /map/api/v1/workspaces/{workspace_id}/element-groups/{group_id}/elements请求,通知云端创建了地图元素。对应sdk封装的接口为IHttpMapService#createMapElement,示例代码中的默认实现为:WorkspaceElementController#createMapElement
@Override
public HttpResultResponse<CreateMapElementResponse> createMapElement(String workspaceId, String groupId,
@Valid CreateMapElementRequest elementCreate, HttpServletRequest req, HttpServletResponse rsp) {
// 获取登录用户的信息
CustomClaim claims = (CustomClaim) req.getAttribute(TOKEN_CLAIM);
// 设置该地图元素的创建者信息
elementCreate.getResource().setUsername(claims.getUsername());
// 调用elementService#saveElement将地图元素保存进数据库
// 该方法中会通过websocket连接通知同一workspace下的所有连接,地图元素进行了新增
HttpResultResponse response = elementService.saveElement(workspaceId, groupId, elementCreate);
if (response.getCode() != HttpResultResponse.CODE_SUCCESS) {
return response;
}
return HttpResultResponse.success(new CreateMapElementResponse().setId(elementCreate.getId()));
}
3、在Pilot2/Web更新地图元素(注意web与Pilot2共用的是同一个接口),Pilot2/Web会通过PUT /map/api/v1/workspaces/{workspace_id}/elements/{id}请求,通知云端更新了地图元素。对应sdk封装的接口为IHttpMapService#updateMapElement,示例代码中的默认实现为:WorkspaceElementController#updateMapElement
@Override
public HttpResultResponse updateMapElement(String workspaceId, String elementId, @Valid UpdateMapElementRequest elementUpdate, HttpServletRequest req, HttpServletResponse rsp) {
// 获取登录用户的信息
CustomClaim claims = (CustomClaim) req.getAttribute(TOKEN_CLAIM);
// 调用elementService#updateElement将地图元素更新保存进数据库
// 该方法中会通过websocket连接通知同一workspace下的所有连接,地图元素进行了更新
HttpResultResponse response = elementService.updateElement(workspaceId, elementId, elementUpdate, claims.getUsername());
if (response.getCode() != HttpResultResponse.CODE_SUCCESS) {
return response;
}
return response;
}
4、在Pilot2/Web删除地图元素(注意web与Pilot2共用的是同一个接口),Pilot2/Web会通过DELETE /map/api/v1/workspaces/{workspace_id}/elements/{id}请求,通知云端删除了地图元素。对应sdk封装的接口为IHttpMapService#deleteElement,示例代码中的默认实现为:WorkspaceElementController#deleteElement
@Override
public HttpResultResponse deleteMapElement(String workspaceId, String elementId, HttpServletRequest req, HttpServletResponse rsp) {
// 调用elementService#deleteElement将地图元素更新保存进数据库
// 该方法中会通过websocket连接通知同一workspace下的所有连接,地图元素进行了删除
return elementService.deleteElement(workspaceId, elementId);
}
4.9.3 开发注意事项
- 地图元素的经纬度坐标采用了WGS84坐标系,如果Web端采用百度、高德地图等,需要做坐标系转换。
评论
0 条评论
请登录写评论。