从postgis工具导入的shp地理数据,存放到数据库后,发现坐标系参数查询为0
查询后对应线经纬度显示的为这样
图像是没有失真的,但是现在需要显示到mapbox图像上,坐标系参数是为4490的,经纬度坐标都在-180到180之间,这样查询后显示到页面上,这种8位数的坐标是无法显示的,因此需要将这些线数据转换称4490坐标系下对应的坐标。
刚开始直接使用坐标系参数转换函数进行转换,但是好像只有参照系数变了,查询经纬度后,还是原来的数据…
因此需要其他方法进行转换。
使用ST_Transform函数, 可以将对应几何数据转换成其他坐标系参数,目前这种8位数的坐标,应该是属于900913坐标系下的对象。
这种方法是可行的,但是导入数据库的是线几何,不能直接使用函数去进行转换,因此需要其他函数去获取每条线中的所有点,然后转换每个点之后,根据线进行重新组合,这样转换的线,才是对应4490坐标系下的了。
ST_DumpPoints函数可以拆分geom数据中每个元素,记得加上识别号,方便分组
然后根据集合中的元素进行获取,就能按照gid分组,将线拆分成一组组的点坐标了。
接下来的工作,就直接将这个结果拿去进行坐标的转换,就能获得4490坐标系参数下,对应的点坐标了。
最后再根据st_makeline函数,将每组的点转换成线几何,更新即可。
至于整个数据库更新坐标系,对sql比较了解的,可以直接写sql进行字段的更新替换,对sql使用不习惯的,也可以写java程序,先获取上面转换的集合,然后再根据gid进行分组,将每组的点几何集合转换成线,再根据gid更新到数据库中。这里我使用springboot直接写方法了。
补充:
尴尬,写麻烦了,这个ST_Transform可以直接转linestring的,这样写就能直接转了。
这样一来,坐标8位数的900913坐标系参数的数据,就能显示在坐标系参数4490下的mapbox图像中了,虽然上面写了那么多绕弯子的东西,但是很多思路是没问题的,就不删除了,有些可以拿去参考下。