Commit 374dffcb authored by hanbing's avatar hanbing

[add] 路口管理,根据多边形框选路口

parent 56b9b8e7
package net.wanji.opt.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Kent HAN
* @date 2023/6/9 13:52
*/
@Data
@ApiModel(value = "PolygonBO", description = "多边形区域")
public class PolygonBO {
@ApiModelProperty(value = "格式:112.965880,28.182881;112.969825,28.182416;112.972285,28.180470;112.972093,28.179978;112.969762,28.181896;112.965816,28.182285")
private String wkt;
}
package net.wanji.opt.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.bo.PolygonBO;
import net.wanji.opt.service.impl.CrossManageServiceImpl;
import net.wanji.opt.vo.CrossIdAndNameVO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType;
import java.util.List;
/**
* 路口管理
*
* @author Kent HAN
*/
@Api(value = "CrossController", description = "路口管理")
@RequestMapping("/crossManage")
@RestController
public class CrossController {
private final CrossManageServiceImpl crossManageService;
public CrossController(CrossManageServiceImpl crossManageService) {
this.crossManageService = crossManageService;
}
@ApiOperation(value = "框选路口", notes = "框选路口", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/selectCrossesByPolygon",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = JsonViewObject.class),
})
public JsonViewObject selectCrossesByPolygon(@RequestBody PolygonBO polygonBO) {
List<CrossIdAndNameVO> res = crossManageService.selectCrossesByPolygon(polygonBO);
return JsonViewObject.newInstance().success(res);
}
}
\ No newline at end of file
package net.wanji.opt.service;
import net.wanji.opt.bo.PolygonBO;
import net.wanji.opt.vo.CrossIdAndNameVO;
import java.util.List;
/**
* @desc 路口管理服务
*/
public interface CrossManageService {
List<CrossIdAndNameVO> selectCrossesByPolygon(PolygonBO polygonBO);
}
package net.wanji.opt.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.gts.GeometryUtil;
import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.opt.bo.PolygonBO;
import net.wanji.opt.service.CrossManageService;
import net.wanji.opt.vo.CrossIdAndNameVO;
import org.locationtech.jts.geom.Geometry;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author Kent HAN
* @date 2023/6/25 8:56
*/
@Service
@Slf4j
public class CrossManageServiceImpl implements CrossManageService {
private final BaseCrossInfoMapper crossInfoMapper;
public CrossManageServiceImpl(BaseCrossInfoMapper crossInfoMapper) {
this.crossInfoMapper = crossInfoMapper;
}
@Override
public List<CrossIdAndNameVO> selectCrossesByPolygon(PolygonBO polygonBO) {
List<CrossIdAndNameVO> res = new ArrayList<>();
String wkt = polygonBO.getWkt();
List<BaseCrossInfoPO> crossList = crossInfoMapper.selectAll();
for (BaseCrossInfoPO cross : crossList) {
String location = cross.getLocation();
double[] lonLat = CrossUtil.getLonLat(location);
String crossLonLat = lonLat[0] + "," + lonLat[1];
Geometry wktGeo = GeometryUtil.str2Geometry(wkt);
Geometry crossGeo = GeometryUtil.str2Geometry(crossLonLat);
// 判断点和多边形是否相交
boolean isIntersect = wktGeo.intersects(crossGeo);
if (isIntersect) {
CrossIdAndNameVO crossIdAndNameVO = new CrossIdAndNameVO();
crossIdAndNameVO.setCrossId(cross.getId());
crossIdAndNameVO.setCrossName(cross.getName());
res.add(crossIdAndNameVO);
}
}
return res;
}
}
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
@ApiModel(value = "CrossIdAndNameVO", description = "路口ID和路口名称")
public class CrossIdAndNameVO {
@ApiModelProperty(value = "路口ID")
private String crossId;
@ApiModelProperty(value = "路口名称")
private String crossName;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment