我一直在尝试验证 WGS84 点是否在 SQL Server 2012 的几何字段内。
场景是这样的,我在 SQL Server 2012 数据库(邮政编码和所有内容)中对地理区域进行了政治划分,并进行了验证。
然后,我还在 WGS84 系统中找到了一些基础设施,其中包含提供商提交的邮政编码,我想验证这些点。
我需要验证每个点 (WGS84) 是否属于与它一起提交的邮政编码。
我不知道从哪里开始。
谢谢您的帮助!。
奥马尔
我一直在尝试验证 WGS84 点是否在 SQL Server 2012 的几何字段内。
场景是这样的,我在 SQL Server 2012 数据库(邮政编码和所有内容)中对地理区域进行了政治划分,并进行了验证。
然后,我还在 WGS84 系统中找到了一些基础设施,其中包含提供商提交的邮政编码,我想验证这些点。
我需要验证每个点 (WGS84) 是否属于与它一起提交的邮政编码。
我不知道从哪里开始。
谢谢您的帮助!。
奥马尔
为了让您的生活更轻松,您需要首先更改表 1 以包含一个地理列,该列将保存转换后的几何数据。您可以按如下方式进行转换:
UPDATE [Table1] SET [NewGeographyColumn] = GEOGRAPHY::STGeomFromWKB([GeometryColumn].STAsBinary(), 4326);
现在您有了一个与您的 Table2 点匹配的 SRID 的 Geography 列,请确保您在这个新列上创建一个 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;
或者至少有一些类似的东西来验证......
希望能帮助到你。
例如,您可以为此使用必应地图 REST 服务。
对于每一点,您将:
查询“按点查找位置”服务 ( http://msdn.microsoft.com/en-us/library/ff701710.aspx )
使用响应的“邮政编码”字段来验证您的邮政编码。
示例(取自参考页面):
要求:
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"
},
(...)