我一直在尝试验证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"
},
(...)