2017-04-12 103 views
0

我有2张桌子(面积&位置),我想检查lat &在一个表格中的长坐标是在另一个表格的区域中出现的。如何在SQL Server 2012 Spatial表中将列从“几何”转换为“地理”?

表名:AREA 列: OBJECTID(INT),
AREA_NAME(VARCHAR(50)), GEOM(几何

表名:LOCATION 列: ID(INT) , 纬度(VARCHAR(50)), 经度(VARCHAR(50))从区域表

样本数据:

SELECT OBJECTID 
,AREA 
,GEOM 
,GEOM.STAsText() 
FROM AREA 

AREA TABLE

SELECT 
ID 
,LATITUDE 
,LONGITUDE 
FROM LOCATION 

LOCATION TABLE

我要检查是否位置(即,纬度和经度坐标)是在该地区与否。区域表有一列GEOMETRY列。 所以我想将这个几何列转换为地理列。一旦我转换为地理位置,我可以使用STIntersects()检查位置是否在区域内。

但是,当我尝试转换,我得到一个错误,因为纬度值必须介于-90和90度之间。

SELECT GEOGRAPHY::STGeomFromText(CAST(GEOM AS VARCHAR(MAX)), 4326) FROM AREA 

完整的错误信息: 系统:

消息6522,级别16,状态1,用户定义的例程或聚合 “地理” 执行过程中出现线70 .NET框架的错误 .FormatException:24201:纬度值必须介于-90和 之间90度。 System.FormatException:在 Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(双的x, 双Y,可空1 z, Nullable 1米)在 Microsoft.SqlServer.Types.Validator.BeginFigure(双X,双Y, 可空1 z, Nullable 1米)在 Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(双的x, 双Y,可空1 z, Nullable 1米)在 Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(双 的x,双Y,可空1 z, Nullable1米)at Microsoft.SqlServer.Types.WellKnownTextReader.ParseLineStringText()
at Microsoft.SqlServ er.Types.WellKnownTextReader.ParsePolygonText()
处 微软 Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType 型)在 Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType型, 的Int32 SRID)。 SqlServer.Types.SqlGeography.ParseText(OpenGisType类型, SqlChars taggedText,Int32 srid)at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type,SqlChars taggedText,Int32 srid)。

我是新来的这个sql服务器的空间数据。有人能指导我完成这项任务吗?谢谢! :)上20170414

更新:Here是从AREA &位置表的采样数据我已转换的LAT &长坐标到几何后。

回答

0

看起来你的地区是在网站mercator坐标,而不是经度和纬度。 在墨卡托坐标是从(0,0)米计算,而不是度。

尝试纬度经度转换为Web墨卡托,然后使用新坐标创建的几何点,

这里是代码exapmle(JS):

var degrees2meters = function(lon,lat) { 
     var x = lon * 20037508.34/180; 
     var y = Math.log(Math.tan((90 + lat) * Math.PI/360))/(Math.PI/180); 
     y = y * 20037508.34/180; 
     return [x, y] 
} 

x= -77.035974 
y = 38.898717 

console.log(degrees2meters(x,y)) 

// should result in: -8575605.398444, 4707174.018280 

https://gist.github.com/springmeyer/871897

+0

我已经转换的纬度和长指向几何体,然后尝试检查该区域是否包含经纬度点。但我没有结果。 [这里](https://ibb.co/hjBMi5)是来自Area和Location的示例数据。当我查看POINT&POLYGON数据时,多边形区域不包含这些点。如何将经纬度点转换为几何图形有什么问题吗? – Rajanand

+0

你是否尝试解决方案#2?在转换为georgaphy之前,与多边形相交的区域列。 –

+0

我不知道如何去做#2。 – Rajanand

相关问题