如何在SQL Server 2012空间表中将列从几何图形转换为地理图形?
我有两个表(区域和位置),我想检查一个表中的纵横坐标是否存在于另一个表的区域中 表名:面积 柱: OBJECTID(int),如何在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 我想检查位置(即纬度和经度坐标)是否在该区域内。面积表有一列几何图形列。 所
区域名称(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