需要将这个字段转换成空间类型的围栏字段。
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 参考几个函数的简单介绍