Postgres空间地理类型POINT POLYGON实现附近的定位和电子围栏功能 (3)

需要将这个字段转换成空间类型的围栏字段。

UPDATE basic_mall_v1 SET geom_fence= ST_GeomFromText( 'POLYGON(('|| replace( replace(gaode_shape, ',', ' ' ), ';', ',') ||'))' , 4326) 计算gps附近30m内的围栏

使用函数ST_DWithin 判断一个几何对象是否在另一个的r距离以内:

SELECT ST_Distance(ST_GeomFromText('POINT(120.731069 30.758984)',4326):: geography, geom_fence :: geography ) AS distance, id, name FROM basic_mall_v1 WHERE ST_DWithin ( geom_fence :: geography, ST_GeomFromText ( 'POINT( 120.731069 30.758984)', 4326 ) :: geography, 30 ) ORDER BY distance LIMIT 10;

使用函数boolean ST_Within(geometry A, geometry B); 判断A是否完全在B内部

SELECT id, name FROM basic_mall_v1 WHERE ST_Within ( ST_GeomFromText('POINT('|| #{longitude} ||' '|| #{latitude} ||')',4326), geom_fence )

更多测试见菜鸟末端轨迹 - 电子围栏(解密支撑每天251亿个包裹的数据库)

关于坐标体系

参考地理坐标系(球面坐标系)和投影坐标系(平面坐标系)

地理坐标系(Geographic coordinate system)

首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为地理坐标系统,是以经纬度为地图的存储单位的。

很明显,Geographic coordinate system是球面坐标系统。我们要将地球上的数字化信息存放到球面坐标系统上,如何进行操作呢?地球是一个不规则的椭球,如何将数据信息以科学的方法存放到椭球上?

这必然要求我们找到这样的一个椭球体。这样的椭球体具有特点:

可以量化计算的。具有长半轴,短半轴,偏心率。

以下几行便是Krasovsky_1940椭球及其相应参数。

Alias: Abbreviation: Remarks: Angular Unit: Degree (0.017453292519943299) Prime Meridian(起始经度): Greenwich (0.000000000000000000) Datum(大地基准面): D_Beijing_1954 Spheroid(参考椭球体): Krasovsky_1940 Semimajor Axis: 6378245.000000000000000000 Semiminor Axis: 6356863.018773047300000000 Inverse Flattening: 298.300000000000010000

然而有了这个椭球体以后还不够,还需要一个大地基准面将这个椭球定位。在坐标系统描述中,可以看到有这么一行:

Datum: D_Beijing_1954

表示,大地基准面是D_Beijing_1954。

Projection coordinate system(投影坐标系统)

投影坐标系统,实质上便是平面坐标系统,其地图单位通常为.

投影的意义:将球面坐标转化为平面坐标的过程便称为投影

参数

Projection: Gauss_Kruger Parameters: False_Easting: 500000.000000 False_Northing: 0.000000 Central_Meridian: 117.000000 Scale_Factor: 1.000000 Latitude_Of_Origin: 0.000000 Linear Unit: Meter (1.000000) Geographic Coordinate System: Name: GCS_Beijing_1954 Alias: Abbreviation: Remarks: Angular Unit: Degree (0.017453292519943299) Prime Meridian: Greenwich (0.000000000000000000) Datum: D_Beijing_1954 Spheroid: Krasovsky_1940 Semimajor Axis: 6378245.000000000000000000 Semiminor Axis: 6356863.018773047300000000 Inverse Flattening: 298.300000000000010000 参考

几个函数的简单介绍

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydfxw.html