c# - 从 SQL Server 2008 到 C# 的地理函数(多边形/ map 区域内部或外部的纬度和经度点)

标签 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)', 4326)
SET @pointOut =  geometry::STGeomFromText('POINT (41 -3)', 4326)

select @polygon.STIntersects(@pointIn)
select @polygon.STIntersects(@pointOut)

正如预期的那样,我得到了结果 10

现在我正尝试使用以下库将相同的代码引入 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));

我总是得到FalseFalse.....它应该是TrueFalse

有人可以帮忙吗?

谢谢

最佳答案

SqlGeography.PointSqlGeography.STPointFromText 使用不同的坐标顺序。尝试以下解决方案之一来解决问题:

  • SqlGeography.Point 方法调用中交换坐标;
  • 使用 WKT 语法创建点 (SqlGeography.STPointFromText)。

关于c# - 从 SQL Server 2008 到 C# 的地理函数(多边形/ map 区域内部或外部的纬度和经度点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448054/

相关文章:

javascript - Jquery C# 中的数据集值

c# - 上传图片到数据库c#

sql - 更改表并添加 UNIQUE 键会导致错误

sql-server-2008 - 在INSERT INTO Table(选择SELECT * FROM Table2)过程中,如何在每个插入的行上触发触发器?

R:从光栅对象计算基台、范围和 block 金

c# - 从 Mac 使用 Azure Key Vault

c# - Autofac - 确保 Controller 有一个无参数的公共(public)构造函数

sql - 在SQL Server中,如何在select中创建while循环

python - 从 Dask 或 Pandas 数据帧创建地理数据帧的更快方法

python - 如何使用python获取两个地理坐标之间的行驶距离?