Oracle空间检索

点是否在圆内:

 

select *

  from table a

 where SQRT(power(a.LONGITUDE - 116.3676095557983, 2) +

            power(a.LATITUDE - 39.913205912837014, 2)) <=

       0.039790863734664776

 

点是否在多边形内:

 

 

select *

          from table a,

         (select MDSYS.SDO_GEOMETRY(2003,

                                    NULL,

                                    NULL,

                                    MDSYS.SDO_ELEM_INFO_ARRAY(1,

                                                              1003,

                                                              1),

                                    MDSYS.SDO_ORDINATE_ARRAY(116.32538033694757,

                                                             39.906350079429856,

                                                             116.33095311487795,

                                                             39.87091007279355,

                                                             116.39480688269283,

                                                             39.85758832979095,

                                                             116.4214463155306,

                                                             39.89240348162625,

                                                             116.3783335525407,

                                                             39.9799055395663,

                                                             116.28691483413509,

                                                             39.97172243440462,

                                                             116.28958264221046,

                                                             39.919422096307414,

                                                             116.33388775596742,

                                                             39.92787481642996,

                                                             116.33047452402171,

                                                             39.92786278190348,

                                                             116.29558151638385,

                                                             39.90043630083025,

                                                             116.32538033694757,

                                                             39.906350079429856)) as geom

            from dual) c

         where a.LONGITUDE > 0

           and a.LATITUDE > 0

           and (1 = 2 or sdo_Geom.Relate(c.geom,

                                         'Anyinteract',

                                         mdsys.sdo_geometry(2001,

                                                            null,

                                                            mdsys.sdo_point_type(a.LONGITUDE,

                                                                                 a.LATITUDE,

                                                                                 null),

                                                            null,

                                                            null),

                                         0.000001) = 'TRUE')

判断点是否在线的缓冲范围内

 sdo_Geom.within_distance(MDSYS.SDO_GEOMETRY(2002,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY("+ lnglat+ ")),"+size+",mdsys.sdo_geometry(2001,4326,mdsys.sdo_point_type("+lng+","+lat+",null),null,null),0.000001,'unit=m') = 'TRUE'"; 

判断点是否在圆的范围内

SELECT * FROM ZNJTRESOURCE.T_DEVICE_VIDEO A WHERE SQRT(POWER(A.LONGITUDE - 116.3676095557983, 2) +
            POWER(A.LATITUDE - 39.913205912837014, 2)) <=
            0.039790863734664776

判断点是否在面的范围内

sdo_geom.Relate(mdsys.sdo_geometry(2003, 4326, null, mdsys.sdo_elem_info_array(1, 1003, 3), mdsys.sdo_ordinate_array( points)),  'ANYINTERACT', mdsys.sdo_geometry(2001,4326,mdsys.sdo_point_type(a.latitude ,a.longitude ,null),null,null),0.001)= 'TRUE'

猜你喜欢

转载自blog.csdn.net/jiulanhao/article/details/81016415
今日推荐