查询DBGeometry具体经纬度值(Query DBGeometry for specific L

2019-10-18 08:51发布

背景

我有我从一个形状文件得到了国家的数据库这里使用Shape2Sql工具从上传到我的数据库http://www.sharpgis.net 。

在使用这个工具,我选择使用SRID 4326的选项,因为我相信这代表了地球表面的几何形状(请纠正我,如果当我是错的)。

当我运行在SQL Management Studio中选择,在结果窗格中有其基本上显示世界地图,即在查询所有的几何数据的空间标签,我可以看到英国在那里。

问题是:

我有一组经纬度坐标,我想找出所在国的坐标。 我使用实体框架和我的代码看起来是这样的

var coords = location.Split(',');
var myLocation = DbGeometry.FromText(string.Format("POINT({0} {1})", coords[1], coords[0]));
var country = db.CountryRepository.Where(x => x.Geom.Contains(myLocation));

我的查询总是返回国为空,即使我有在数据库中的英国和我用我的当前位置信息作为坐标。

当我改变线2到var myLocation = DbGeometry.FromText(string.Format("POINT({0} {1})", coords[1], coords[0]), 4326);

我得到一个异常:

A .NET Framework error occurred during execution of user-defined routine or aggregate "geometry": 
System.ArgumentException: 24144: This operation cannot be completed because the instance is not valid. Use MakeValid to convert the instance to a valid instance. Note that MakeValid may cause the points of a geometry instance to shift slightly.
System.ArgumentException: 
   at Microsoft.SqlServer.Types.SqlGeometry.ThrowIfInvalid()
   at Microsoft.SqlServer.Types.SqlGeometry.STContains(SqlGeometry other)
.

坐标:

{"latitude":"53.15366296446161","longitude":"-1.098928023733833"}

没有人有任何想法如何正确地做到这一点?

UPDATE

我曾尝试使用下面的查询SQL服务器上直接解决这个问题

SELECT [Id]
      ,[NAME]
      ,[ISO]
      ,[Geom]
      ,[Geom].MakeValid().STIntersects(geometry::STGeomFromText('POINT(-1.098928023733833 53.15366296446161)', 4326)) as Inters
  FROM [Countries] 

该半成品列为1曼联KINDOM,否则为0,没有人知道我可以从做的EntityFramework MakeValid?

Answer 1:

好了,所以除了上述的TSQL查询,这里是如何与实体框架做

 var coords = location.Split(',');
 var myLocation = DbGeometry.FromText(string.Format("POINT({0} {1})", coords[1], coords[0]), 4326);
 var country = db.CountryRepository.Where(x => SqlSpatialFunctions.MakeValid(x.Geom).Intersects(myLocation));

TSQL

SELECT [Id]
      ,[NAME]
      ,[ISO]
      ,[Geom]
  FROM [Countries] 
  WHERE [Geom].MakeValid().STIntersects(geometry::STGeomFromText('POINT(-1.098928023733833 53.15366296446161)', 4326)) = 1


文章来源: Query DBGeometry for specific LatLng value