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

Posted

技术标签:

【中文标题】存储用户地理位置数据的正确类型是啥?我可以在 DbGeography 中存储准确性吗?【英文标题】:What is the right type to store geolocation data about the user? Can I store accuracy in DbGeography?存储用户地理位置数据的正确类型是什么?我可以在 DbGeography 中存储准确性吗? 【发布时间】:2015-06-16 13:08:09 【问题描述】:

我得到了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> 或定义我自己的类型的 ICollection Latitude, Longitude, Accuracy

【问题讨论】:

我会使用 DBGeography,因为它内置了一些函数,例如使用简单的语法计算两个 DbGeography 对象(纬度/经度)之间的距离:someDbGeohgraphy.Distance(someOtherDbGeography) .... 但它确实归结为您计划如何使用 lat/long 道具 @SteveG 我没有意识到 .Net 有 DBGeography 类型,我会更新我的答案。 【参考方案1】:

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

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

最后,我个人会使用小数而不是双精度,以防万一您想计算距离或在未来计算时使用纬度、长度。如果您有兴趣,decimal vs double! - Which one should I use and when? 是一个很好的解释。

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

【讨论】:

以上是关于存储用户地理位置数据的正确类型是啥?我可以在 DbGeography 中存储准确性吗?的主要内容,如果未能解决你的问题,请参考以下文章

非root用户手机Android用户可以查看/编辑存储在Realm DB中的数据吗?

使用 JWT 的正确方法是啥?

通过 Swift 在 iPhone (iOS) 开发中存储/检索用户数据(读/写文件)的正确方法是啥?

在关系数据库中存储“元数据”的正确方法是啥?

Cordova:在 iOS 中存储录制的音频文件的正确位置是啥?

使用正确数据类型的原因是啥?