从SQL Server 2008到C#(多边形/地图区域内外的纬度和经度点)的地理功能
在SQL Server 2008中,我有:从SQL Server 2008到C#(多边形/地图区域内外的纬度和经度点)的地理功能,c#,sql-server-2008,geospatial,C#,Sql Server 2008,Geospatial,在SQL Server 2008中,我有: Declare @pointIn geometry Declare @pointOut geometry Declare @polygon geometry SET @polygon = geometry::STGeomFromText('POLYGON((40 -9,40 -6,35 -6,35 -9,40 -9))', 4326) SET @pointIn = geometry::STGeomFromText('POINT (39 -8)',
Declare @pointIn geometry
Declare @pointOut geometry
Declare @polygon geometry
SET @polygon = geometry::STGeomFromText('POLYGON((40 -9,40 -6,35 -6,35 -9,40 -9))', 4326)
SET @pointIn = geometry::STGeomFromText('POINT (39 -8)', 4326)
SET @pointOut = geometry::STGeomFromText('POINT (41 -3)', 4326)
select @polygon.STIntersects(@pointIn)
select @polygon.STIntersects(@pointOut)
正如预期的那样,我得到了结果1
和0
现在我正试图使用库将相同的代码带到C#:Microsoft.SqlServer.Types.dll
使用以下代码:
var p1lat = 40;
var p1long = -9;
var p2lat = 40;
var p2ong = -6;
var p3lat = 35;
var p3ong = -6;
var p4lat = 35;
var p4ong = -9;
var pILat = 39;
var pILong = -8;
var pOLat = 41;
var pOLong = -3;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
const string polygonFormat = "POLYGON(({0} {1},{2} {3},{4} {5},{6} {7},{0} {1}))";
var polygon = string.Format(polygonFormat, p1lat, p1long, p2lat, p2ong, p3lat, p3ong, p4lat, p4ong);
var geometryString = new SqlChars(new SqlString(polygon));
var area = SqlGeography.STPolyFromText(geometryString, 4326);
var pointIn = SqlGeography.Point(pILat, pILong, 4326);
var pointOut = SqlGeography.Point(pOLat, pOLong, 4326);
Console.WriteLine(area.STIntersects(pointIn));
Console.WriteLine(area.STIntersects(pointOut));
我总是得到False
,False
。。。。。它应该是True
,False
有人能帮忙吗
谢谢
SqlGeography.Point
和SqlGeography.STPointFromText
使用不同的坐标顺序。请尝试以下解决方案之一来解决此问题:
- 交换
SqlGeography.Point方法调用中的坐标李>
- 使用WKT语法(
)创建点SqlGeography.STPointFromText
- 使用WKT语法(