sql >> データベース >  >> RDS >> Sqlserver

異なるテーブル SQL 2008 の各緯度経度に対して 15 Km 以内の SQL テーブルのすべての緯度経度

            /*
                Assuming Your tables are like so
            */
            IF OBJECT_ID('#xLocation1') IS NOT NULL
                DROP TABLE #xLocation1
            CREATE TABLE #xLocation1 (
                 Id         INT IDENTITY(1,1) CONSTRAINT PK_Location_1 PRIMARY KEY--Reqire this for Geog Spatial Index
                ,LocationId INT
                ,Latitude   FLOAT   NULL
                ,Longitude  FLOAT   NULL
                ,Radius     INT     NULL
                ,GeogPoint  GEOGRAPHY   NULL
            )
    
    
            IF OBJECT_ID('#xLocation2') IS NOT NULL
                DROP TABLE #xLocation2
            CREATE TABLE #xLocation2 (
                 Id         INT IDENTITY(1,1) CONSTRAINT PK_Location_2 PRIMARY KEY--Reqire this for Geog Spatial Index
                ,LocationId INT
                ,Latitude   FLOAT   NULL
                ,Longitude  FLOAT   NULL
                ,Radius     INT     NULL
                ,GeogPoint  GEOGRAPHY   NULL
            )
    
    
            DECLARE @Radius INT = 15 --KM
    
            /*
                Create GEOGRAPHY POINT datatypes
            */
    
            UPDATE #xLocation1
            SET
                GeogPoint   = GEOGRAPHY::STGeomFromText('POINT(' + CAST(ISNULL(Longitude,'') AS VARCHAR(20)) + ' ' + CAST(ISNULL(Latitude,'') AS VARCHAR(20)) + ')', 4326)
    
            UPDATE #xLocation2
            SET
                GeogPoint   = GEOGRAPHY::STGeomFromText('POINT(' + CAST(ISNULL(Longitude,'') AS VARCHAR(20)) + ' ' + CAST(ISNULL(Latitude,'') AS VARCHAR(20)) + ')', 4326)
    
    
            /*
                CREATE SPATIAL INDEXes
            */
            CREATE SPATIAL INDEX [SDX_Location1_GeogPoint_x1] ON #xLocation1 ( [GeogPoint] ) 
            USING GEOGRAPHY_GRID 
            WITH 
            (     GRIDS=(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH) 
                    , CELLS_PER_OBJECT = 64 
                    , PAD_INDEX = OFF 
                    , SORT_IN_TEMPDB = OFF 
                    , DROP_EXISTING = OFF 
                    , ALLOW_ROW_LOCKS = ON 
                    , ALLOW_PAGE_LOCKS = ON 
            ) 
    
            CREATE SPATIAL INDEX [SDX_Location2_GeogPoint_x2] ON #xLocation2 ( [GeogPoint] ) 
            USING GEOGRAPHY_GRID 
            WITH 
            (     GRIDS=(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH) 
                    , CELLS_PER_OBJECT = 64 
                    , PAD_INDEX = OFF 
                    , SORT_IN_TEMPDB = OFF 
                    , DROP_EXISTING = OFF 
                    , ALLOW_ROW_LOCKS = ON 
                    , ALLOW_PAGE_LOCKS = ON 
            ) 
    
            /*
                Find where locations from each table are within @Radius of each other
            */
            SELECT *
            FROM 
                #xLocation1 X
            INNER JOIN
                #xLocation2 P ON X.GeogPoint.STDistance(P.GeogPoint) <= @Radius
    



    1. Centosにphp-mysqli拡張機能をインストールできません

    2. SQLステートメントのバックティックと角括弧の違いは何ですか?

    3. Persistence.createEntityManagerFactory()が戻るまでに非常に長い時間がかかります

    4. 全文検索エンジンの比較-Lucene、Sphinx、Postgresql、MySQL?