• 利用pgsql插件PostGIS 实现地理坐标系数据转换


    pgsql数据库添加PostGIs 空间扩展

    1. CREATE EXTENSION postgis;
    2. CREATE EXTENSION pgrouting;
    3. CREATE EXTENSION postgis_topology;
    4. CREATE EXTENSION fuzzystrmatch;
    5. CREATE EXTENSION postgis_tiger_geocoder;
    6. CREATE EXTENSION address_standardizer;

    查询坐标系数据转换sql的mapper.xml

    1. <select id="coordinateTransform" resultType="java.lang.String">
    2. select st_astext(st_transform(st_setsrid(ST_MakePoint(#{pointX},#{pointY}),#{srcSrid}),#{targetSrid}))
    3. select>

    mapper类

    1. /**
    2. * 方法描述: 计算线的夹角
    3. *
    4. * @param x 源坐标x
    5. * @param y 源坐标y
    6. * @param srcSrid 源坐标系EPSG代号
    7. * @param targetSrid 目标坐标系EPSG代号
    8. * @return {@link String}
    9. */
    10. String coordinateTransform(@Param("pointX") BigDecimal x, @Param("pointY") BigDecimal y, @Param("srcSrid") int srcSrid, @Param("targetSrid") int targetSrid);

    service类

    1. //坐标系转换
    2. public CoordinateDTO coordinateTransform(BigDecimal x, BigDecimal y, int srcSrid, int targetSrid) {
    3. CoordinateDTO vo=new CoordinateDTO();
    4. String targetPoint = tunnelCenterLineService.coordinateTransform(x,y,srcSrid,targetSrid);
    5. String[] coordinateArr = StringUtil.subBetween(targetPoint, "(", ")").split(" ");
    6. if(coordinateArr==null ||coordinateArr.length<2){
    7. return vo;
    8. }
    9. String txs="Infinity".equals(coordinateArr[0])?"0":coordinateArr[0];
    10. String tys="Infinity".equals(coordinateArr[1])?"0":coordinateArr[1];
    11. BigDecimal tx=new BigDecimal(txs).setScale(3, BigDecimal.ROUND_HALF_UP);
    12. BigDecimal ty=new BigDecimal(tys).setScale(3, BigDecimal.ROUND_HALF_UP);
    13. vo.setX(tx);
    14. vo.setY(ty);
    15. return vo;
    16. }

    注:计算结果和专业测量软件转换的结果,误差在1毫米之间。 

    使用示例

    1. @ApiOperation(value = "坐标系转换北京54-国家2000")
    2. @PostMapping(value = "/bjz54ToCgcs2000")
    3. public ResponseDTO bjz54ToCgcs2000(@RequestBody CoordinateDTO dto){
    4. return ResponseDTO.succData(unionSpaceDataService.coordinateTransform(dto.getX(),dto.getY(),2415,4527));
    5. }

  • 相关阅读:
    金仓数据库KingbaseES备份与恢复工具手册(备份)
    专栏文章列表
    华为云云耀云服务器L实例评测 | Linux系统宝塔运维部署H5游戏
    DevOps jenkins实现持续集成、持续部署
    自定义协议、序列化与反序列化
    利用MATLAB数值求解边值问题——Berman问题
    “动捕设备+飞兔渲染软件”,激发数字人短视频营销新动力
    本地localhost与目标地址跨域问题的解决方法
    矩阵分析与应用+张贤达
    Linux关机命令、选项和原理详解
  • 原文地址:https://blog.csdn.net/weixin_40986713/article/details/126095060