我有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
SELECT
ID
,LATITUDE
,LONGITUDE
FROM LOCATION
我要检查是否位置(即,纬度和经度坐标)是在该地区与否。区域表有一列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, Nullable
1米)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 &长坐标到几何后。
我已经转换的纬度和长指向几何体,然后尝试检查该区域是否包含经纬度点。但我没有结果。 [这里](https://ibb.co/hjBMi5)是来自Area和Location的示例数据。当我查看POINT&POLYGON数据时,多边形区域不包含这些点。如何将经纬度点转换为几何图形有什么问题吗? – Rajanand
你是否尝试解决方案#2?在转换为georgaphy之前,与多边形相交的区域列。 –
我不知道如何去做#2。 – Rajanand