验证一个点(WGS84)在几何字段在sql server上



我一直在尝试验证WGS84点是否在SQL Server 2012的几何字段内。

这个场景是这样的,我在SQL Server 2012数据库中有一个地理区域的政治划分(邮政编码和所有东西),并经过验证。

然后,我还在WGS84系统中找到了一些基础设施,其中包含提供商提交的邮政编码,我想验证这些基础设施。

我需要验证每个点(WGS84)是否属于与其一起提交的邮政编码。

我不知道从哪里开始。

谢谢你的帮助

奥马尔

为了使您的工作更轻松,您需要首先修改表1以包含一个地理列,该列将保存转换后的几何数据。您可以按照如下方式进行转换:

UPDATE [Table1] SET [NewGeographyColumn] = GEOGRAPHY::STGeomFromWKB([GeometryColumn].STAsBinary(), 4326);

现在您有了一个地理列,它与您的Table2 Points具有匹配的SRID,请确保在这个新列上创建一个SpatialIndex。

你可以运行一个空间查询来确保你收到的数据是正确的:

DECLARE @receivedLatitude DOUBLE = 0;
DECLARE @receivedLongitude DOUBLE = 0;
DECLARE @receivedPostalCodeName VARCHAR(10) = 'Postcode';
DECLARE @receivedPoint GEOGRAPHY = GEOGRAPHY::Point(@receivedLatitude, @receivedLongitude, 4326);
SELECT * FROM [Table1] WHERE [NewGeographyColumn].STIntersects(@receivedPoint) AND [PostalCodeName] = @receivedPostalCodeName;

或者至少验证....

希望能有所帮助。

例如,您可以使用Bing Map REST服务。

对于每一个点,你将:

  • 查询"按点查找位置"服务(http://msdn.microsoft.com/en-us/library/ff701710.aspx)

  • 使用回复的"PostalCode"字段来验证您的邮政编码

示例(取自参考页):

请求:

http://dev.virtualearth.net/REST/v1/Locations/47.64054,-122.12934?key=BingMapsKey

(BingMapsKey可从www.bingmapsportal.com获取)

响应,其中包括邮政编码:

(...)
"address":{
   "addressLine":"1 Microsoft Way",
   "adminDistrict":"WA",
   "adminDistrict2":"King Co.",
   "countryRegion":"United States",
   "formattedAddress":"1 Microsoft Way, Redmond, WA 98052",
   "locality":"Redmond",
   "postalCode":"98052"
},
(...)