gpt4 book ai didi

entity-framework - 从纬度和经度 double 构造 DbGeography 点?

转载 作者:行者123 更新时间:2023-12-03 07:40:31 25 4
gpt4 key购买 nike

我想从纬度和经度 double 构造一个 DbGeography 点。

我知道我可以将 double 转换为字符串并使用 DbGeography.FromText 方法。

var latitude = 50.0d;
var longitude = 30.0d;

var pointString = string.Format(
"POINT({0} {1})",
longitude.ToString(),
latitude.ToString());

var point = DbGeography.FromText(pointString);

但是将我的 double 转换为字符串似乎很浪费,以便 DbGeography 可以再次将它们解析为 double 。


我尝试像这样直接构建 DbGeography:

var point = new DbGeography()
{
Latitude = 50,
Longitude = 30
};

但纬度和经度属性是只读的。 (这是有道理的,因为 DbGeography 类处理的不仅仅是单个点)


DbGeography 类还提供了一个采用字节数组的 FromBinary 方法。我不知道如何将我的纬度和经度加倍成格式正确的字节数组。

是否有比顶部代码更简单的方法来使用纬度和经度双倍构造 DbGeography 实例?

最佳答案

简而言之,不,没有。

SqlGeography 有一个合适的方法:

Microsoft.SqlServer.Types.SqlGeography.Point(latitude, longitude, srid);

...但是无论如何您都必须转换为 DbGeography。如果您对此感兴趣,请参阅我之前关于转换的答案:DbGeography to SqlGeography (and back)

也就是说,我完全同意Raphael Althaus的观点,你应该创建一个静态方法来让你的生活更轻松:

public static DbGeography CreatePoint(double lat, double lon, int srid = 4326)
{
string wkt = String.Format("POINT({0} {1})", lon, lat);

return DbGeography.PointFromText(wkt, srid);
}

然后所有的使用都可以通过该方法进行。

编辑

@Korayem 提出了一个很好的建议,自从最初回答这个问题以来,我实际上已经这样做了。大多数人使用 SRID 4326,因此我们可以通过将其作为参数的默认值来使静态方法更易于使用。

关于entity-framework - 从纬度和经度 double 构造 DbGeography 点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23111458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com