Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Npgsql和EntityFramework核心根据PostGIS将几何图形转换为地理图形_C#_.net Core_Entity Framework Core_Postgis_Npgsql - Fatal编程技术网

C# 使用Npgsql和EntityFramework核心根据PostGIS将几何图形转换为地理图形

C# 使用Npgsql和EntityFramework核心根据PostGIS将几何图形转换为地理图形,c#,.net-core,entity-framework-core,postgis,npgsql,C#,.net Core,Entity Framework Core,Postgis,Npgsql,在PostgreSQL PostGIS中,我可以通过在sql查询“geometry\u column::geography”中使用此语法将geometry列强制转换为geography来获得以米为单位的距离。像这样: select * from "Tags" where ST_Distance("Location",'POINT(31.233334 30.033333)'::geography) < 1000 ; 这里是“点”变量的定义 [Colu

在PostgreSQL PostGIS中,我可以通过在sql查询“geometry\u column::geography”中使用此语法将geometry列强制转换为geography来获得以米为单位的距离。像这样:

select * from "Tags" where ST_Distance("Location",'POINT(31.233334 30.033333)'::geography) < 1000 ;
这里是“点”变量的定义

[Column(TypeName="geometry (point)")]
public Point Location{get;set;}
var point = new Point(new Coordinate(Longitude,Latitude));
point.SRID = 4326;

将列属性更改为
[列(TypeName=“geography”)]
。如果该点已经是一个地理点,则不需要强制转换。检查中的示例

从文档示例中:

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }

    [Column(TypeName="geography")]
    public Point Location { get; set; }
}

var nearbyCities = context.Cities.Where(c => c.Location.Distance(somePoint) < 100);
这将返回:

9124665.26917268

或9124Km

将列属性更改为
[column(TypeName=“geography”)]
。如果该点已经是一个地理点,则不需要强制转换。检查中的示例

从文档示例中:

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }

    [Column(TypeName="geography")]
    public Point Location { get; set; }
}

var nearbyCities = context.Cities.Where(c => c.Location.Distance(somePoint) < 100);
这将返回:

9124665.26917268

或者9124公里

没有
,只有
<代码>地理
包含球体上的坐标,而
几何
包含平面上的坐标。您需要从球体投影到平面,反之亦然。NTS本身不包括预测,这在文档页面中非常明确。不过,该演员阵容并不计算距离。您实际使用的PostgreSQL查询是什么?要计算距离,需要在Linq的where函数中有两个点
,才能得到相同的结果。
与什么查询相同?LINQ查询不是直接执行的,而是转换为SQL查询。您试图生成什么查询?@PanagiotisKanavos我使用类似于此查询的方法来获取米范围内的点。。。从“标签”中选择*,其中ST_距离(“位置”,“点(31.233334 30.033333)”::地理位置)<1000。。。。。挑战是我想告诉linq在sql查询中执行类似的操作:“:geography”。将column属性更改为
[column(TypeName=“geography”)]
在该类型转换中没有
,只有
<代码>地理
包含球体上的坐标,而
几何
包含平面上的坐标。您需要从球体投影到平面,反之亦然。NTS本身不包括预测,这在文档页面中非常明确。不过,该演员阵容并不计算距离。您实际使用的PostgreSQL查询是什么?要计算距离,需要在Linq的where函数中有两个点
,才能得到相同的结果。
与什么查询相同?LINQ查询不是直接执行的,而是转换为SQL查询。您试图生成什么查询?@PanagiotisKanavos我使用类似于此查询的方法来获取米范围内的点。。。从“标签”中选择*,其中ST_距离(“位置”,“点(31.233334 30.033333)”::地理位置)<1000。。。。。挑战是我想告诉linq在sql查询中执行如下操作:“:geography”。将column属性更改为
[column(TypeName=“geography”)]
谢谢您的回答,我已经尝试过了,但将类型更改为geography会使我失去一些功能,例如获取点的X和Y,正如您在Linq语句中看到的,我有“tag.Location.X”,如果点是geography,这将引发异常,不幸的是,ST_GeographyFromText不存在于Npgsql中,因为我知道
ST_GeographyFromText
是一个PostGIS函数,应该使用它而不是强制转换。我发布的查询来自PostGIS文档,您可以在这里看到,ngpsql不支持
ST_GeographyFromText
,我想使用Linq而不是普通sql查询。该函数来自PostGIS,而不是NpgSQL。在SQL中,您不必使用
点(31.233334 30.033333)::geography
,您可以使用
ST_GeographyFromText('POINT(31.233334 30.033333)
)。看起来唯一的问题是如何在客户机上检索坐标,而不是如何感谢您的回答,我已经尝试过了,但将类型更改为地理位置会使我失去一些功能,例如获取点的X和Y,正如您在Linq语句中看到的,我有“tag.Location.X”,如果点是GeographyFromText,这将引发异常,不幸的是,Npgsql中不存在ST_GeographyFromText,因为我知道
ST_GeographyFromText
是一个PostGIS函数,应该使用它来代替强制转换。我发布的查询来自PostGIS文档,您可以在这里看到,ngpsql不支持
ST_GeographyFromText
,我想使用Linq而不是普通sql查询。该函数来自PostGIS,而不是NpgSQL。在SQL中,您不必使用
点(31.233334 30.033333)::geography
,您可以使用
ST_GeographyFromText('POINT(31.233334 30.033333)
)。看起来唯一的问题是如何在客户端检索坐标,而不是如何强制转换