使用sql server 2008 GeoGraphy在Radius中搜索PostCode

时间:2012-08-23 08:04:53

标签: .net sql-server-2008-r2 geospatial geography postal-code

我关注了这个博客[http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/sql-server-2008-proximity-search-with-th]并做了所有指导的事情,我很高兴事情进展顺利,我的表定义如下所述,我正在执行的查询也在下面提到。

我正在使用可从https://www.ordnancesurvey.co.uk/opendatadownload/products.html

下载的CodePointData数据
  

USE [TestDb]       GO

/****** Object:  Table [dbo].[PostCode]    Script Date: 08/23/2012 05:32:05 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[PostCode](
    [PostCode] [nvarchar](10) NOT NULL,
    [Coordinates] [geography] NOT NULL,
    [Coordinates1] [geography] NULL,
 CONSTRAINT [PK_PostCode] PRIMARY KEY CLUSTERED
(
    [PostCode] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
     

ON [PRIMARY]       )[主要]

GO



SELECT distinct(left(h.postcode,4))
from postcode g
join postcode h on g.postcode <> h.postcode
and g.postcode ='IG1 4LF'
and h.postcode <> 'IG1 4LF'
Where g.coordinates.STDistance(h.coordinates)<=(1*1609.344)
order by left(h.postcode,4)

当我运行上述查询时,它会提供许多不属于Radius的邮政编码。我正在使用另一个站点http://www.freemaptools.com/find-uk-postcodes-inside-radius.htm验证我的结果,并且该站点说1英里半径包含邮政编码IG1,IG2,IG3,但是当我运行上述查询时,我的结果是E12,IG1,IG2, IG3,IG4,IG5,IG6。我无法找出为什么它给我这么多或者只是在半径的Radius中发布代码。

请帮助

1 个答案:

答案 0 :(得分:0)

当经线接近任一极点时,经线之间的距离变为零。您可能认为地球是平坦的(平面投影),因此赤道(或其他位置)的经度距离在整个地球上是恒定的。平地假设误差会导致距离计算在极点附近增加得太大。