3

こんにちは、データベースに点群があります (Sql サーバー 2008 空間)。それは約600万件のレコードです。id、value、geom の 3 つの列があります。入力緯度経度で「値」を取得する最も最適化された方法は何ですか??

SQL Server 2008 での空間クエリは初めてです。geom 列のポイントを見つける簡単な例を投稿して、入力緯度から一致または最も近いものを投稿できますか?

ありがとう

4

1 に答える 1

2

id、placeName、locationCoord (地理) の列を持つ表 Wifi があると仮定します。

CREATE TABLE [dbo].[WiFi](
[id] [int] IDENTITY(1,1) NOT NULL,
[placeName] [varchar](500) NULL,
[locationCoord] [geography] NULL,
CONSTRAINT [PK_WiFi] PRIMARY KEY CLUSTERED ([id] ASC))

ここで、locationCoord は地理タイプです。入力が varchar データ型としての緯度と経度であるとしましょう。次のようなものを使用して、最も近いポイント/場所を取得できます。

declare @longitude varchar(50) = '-77.26939916610718', @latitude varchar(50) = '39.168516439779914'

declare @ms_at geography, @locationString nvarchar(1000)

set @locationString = 'SELECT @ms_at = geography::STGeomFromText(''POINT(' + @longitude + ' ' + @latitude + ')'', 4326)'

exec sp_executesql @locationString, N'@ms_at geography OUT', @ms_at OUT

select nearPoints.placeName, nearPoints.locationCoord.STDistance(@ms_at) as distance 
,RANK() OVER (ORDER BY nearPoints.locationCoord.STDistance(@ms_at)) AS 'Rank'
from
(
select r.id, r.placeName, r.locationCoord 
from WiFi r 
where r.locationCoord.STIntersects(@ms_at.STBuffer(10000)) = 1
) nearPoints
于 2011-07-06T20:58:41.033 に答える