存储有关用户的地理位置数据的正确类型是什么?我可以在 DbGeography 中存储准确性吗?

本文关键字:存储 我可以 是什么 DbGeography 准确性 类型 用户 置数据 位置 | 更新日期: 2023-09-27 17:56:44

我得到了一些由定义用户在世界上的位置的双精度组成的LoginViewModel

public class LoginViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public double Accuracy { get; set; }
}

稍后我想将它们作为用户属性存储在数据库中。

我应该将它们存储为三个双精度还是另一个已经定义的类型:大概是ICollection<DbGeography>还是定义由Latitude, Longitude, Accuracy组成的我自己的类型的ICollection

存储有关用户的地理位置数据的正确类型是什么?我可以在 DbGeography 中存储准确性吗?

不用担心如何在数据库中存储它们,ORM/数据层可以负责从数据库中存储和检索它们。

考虑如何在代码中使用它们。如果它们总是一起使用或相互关联,在您的情况下,它们适用于两个点,那么您应该为它们创建一个类型。这方面的一个例子是System.Drawing.Point,你不想一直传递x和y坐标,并确保正确的x和y坐标一起传递。您只需创建一个点并使用它。

最后,我个人会使用小数而不是双精度,以防您想计算距离或使用纬度,将来计算很长时间。 十进制与双倍! - 我应该使用哪一个,什么时候使用? 如果您有兴趣,这是一个很好的解释。

编辑
正如SteveG在上面的评论中所说,最好的类型是.Net 4.5中添加的DbGeography。

相关文章: