如何在SQL Server 2012空间表中将列从几何图形转换为地理图形?

如何在SQL Server 2012空间表中将列从几何图形转换为地理图形?,sql,sql-server,geometry,spatial,geography,Sql,Sql Server,Geometry,Spatial,Geography,我有两个表(区域和位置),我想检查一个表中的纵横坐标是否存在于另一个表的区域中 表名:面积 柱: OBJECTID(int), 区域名称(varchar(50)), 几何(几何体) 表名:位置 柱: ID(int), 纬度(varchar(50)), 经度(varchar(50)) 面积表中的样本数据: SELECT OBJECTID ,AREA ,GEOM ,GEOM.STAsText() FROM AREA 我想检查位置(即纬度和经度坐标)是否在该区域内。面积表有一列几何图形列。 所

我有两个表(区域和位置),我想检查一个表中的纵横坐标是否存在于另一个表的区域中

表名:面积 柱: OBJECTID(int),
区域名称(varchar(50)), 几何(几何体

表名:位置 柱: ID(int), 纬度(varchar(50)), 经度(varchar(50))

面积表中的样本数据:

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

我想检查位置(即纬度和经度坐标)是否在该区域内。面积表有一列几何图形列。 所以我想把这个几何列转换成地理列。转换为地理后,我可以使用STIntersects()检查位置是否在该区域内

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

SELECT GEOGRAPHY::STGeomFromText(CAST(GEOM AS VARCHAR(MAX)), 4326) FROM AREA
完整错误消息:

Msg 6522,级别16,状态1,第70行发生.NET Framework错误 在执行用户定义的例程或聚合“地理”期间: System.FormatException:24201:纬度值必须介于-90和 90度。System.format异常:在 Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(双x, 双y,可调零
1 z,可调零
1 m)
Microsoft.SqlServer.Types.Validator.Beginigure(双x,双y,
可调零
1 z,可调零
1 m)
Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(双x,
双y,可调零
1 z,可调零
1 m)
Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(双精度)
x、 双y,可调零
1 z,可调零
1 m)
Microsoft.SqlServer.Types.WellKnownTextReader.ParseLineStringText()
在Microsoft.SqlServer.Types.WellKnownTextReader.ParsePolyContext()上 在 Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType 类型)在 Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType, Int32(srid)at Microsoft.SqlServer.Types.SqlGeography.ParseText(OpenGisType类型, SqlChars taggedText,Int32 srid)位于 Microsoft.SqlServer.Types.SqlGeographyFromText(OpenGisType 类型,SqlChars taggedText,Int32 srid)

我不熟悉sql server空间数据。有人能指导我做这个任务吗?谢谢!:)


更新日期:20170414:是在我将纵横坐标转换为几何坐标后,面积和位置表中的样本数据。

您的区域似乎是在web mercator坐标中,而不是在纬度和经度中。 在墨卡托坐标系中,从(0,0)开始以米计,而不是以度计

尝试将lat lon转换为web mercator,然后使用新坐标创建几何点

以下是代码示例(JS):


您所在的区域似乎是万维网墨卡托坐标,而不是纬度和经度。 在墨卡托坐标系中,从(0,0)开始以米计,而不是以度计

尝试将lat lon转换为web mercator,然后使用新坐标创建几何点

以下是代码示例(JS):


我已将横向和纵向点转换为几何体,然后尝试检查该区域是否包含横向和纵向点。但我没有得到任何结果。是来自区域和位置的样本数据。当我查看点和多边形数据时,多边形区域不包含这些点。我如何将纵横点转换为几何体有任何问题吗?您是否尝试解决方案#2?在转换为几何体之前,将区域列与多边形相交。我不确定如何执行#2。我已经很好地重写了我的回答。我已经将横向和纵向点转换为几何体,然后尝试检查区域是否包含横向和纵向点。但我没有得到任何结果。是来自区域和位置的样本数据。当我查看点和多边形数据时,多边形区域不包含这些点。我如何将纵横点转换为几何体有任何问题吗?您是否尝试解决方案#2?在转换为几何体之前,将面积列与多边形相交。我不确定如何执行#2。我已经很好地重写了我的答案
SELECT GEOGRAPHY::STGeomFromText(CAST(GEOM AS VARCHAR(MAX)), 4326) FROM AREA
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