相关疑难解决方法(0)

在MySQL数据库中存储纬度/经度时使用的理想数据类型是什么?

请记住,我将在lat/long对上执行计算,哪种数据类型最适合与MySQL数据库一起使用?

mysql mapping maps database-design latitude-longitude

420
推荐指数
14
解决办法
29万
查看次数

在SQL Server中存储坐标(经度/纬度,来自谷歌地图)的最佳方法是什么?

我正在SQL Server 2008中设计一个表,用于存储用户列表和Google Maps坐标(经度和纬度).

我需要两个字段,还是可以用1完成?

用于存储此类数据的最佳(或最常见)数据类型是什么?

sql-server spatial latitude-longitude sql-server-2008

101
推荐指数
7
解决办法
12万
查看次数

我应该准确存储纬度和经度吗?

我在这里读到这个问题:

在SQL数据库中存储纬度和经度数据时要使用的数据类型是什么?

似乎普遍的共识是使用Decimal(9,6)是要走的路.对我来说,问题是,我真的需要这么准确吗?

例如,Google的API会返回如下结果:

"lat": 37.4219720,
"lng": -122.0841430
Run Code Online (Sandbox Code Playgroud)

超出-122.0841430,我需要多少位数?我已经阅读了几本指南,但我无法从中得到足够的理解来解决这个问题.

更确切地说,在我的问题中:如果我想在精确位置50英尺范围内准确,我需要存储多少小数点?

也许一个更好的问题实际上是一个非编程问题,但它会是:每个小数点给你多少准确?

这很简单吗?

  1. 项目清单
  2. x00 = 6000英里
  3. xx0 = 600英里
  4. xxx = 60英里
  5. xxx.x = 6英里
  6. xxx.xx = .6英里
  7. 等等?

mysql geolocation

93
推荐指数
5
解决办法
6万
查看次数

EF5,SQL Server,经度和纬度

我发现在SQL Server中存储lat和long的最佳类型是decimal(9,6)(ref.在SQL数据库中存储纬度和经度数据时使用什么数据类型?)所以我做了

AddColumn("dbo.Table", "Latitude", c => c.Decimal(nullable: false, precision: 9, scale: 6));
AddColumn("dbo.Table", "Longitude", c => c.Decimal(nullable: false, precision: 9, scale: 6));
Run Code Online (Sandbox Code Playgroud)

SQL似乎没问题,一切正常,但是当我插入/更新一个值时,即

lat = 44.5912853
Run Code Online (Sandbox Code Playgroud)

它像这样保存:

44.590000
Run Code Online (Sandbox Code Playgroud)

我检查了流程,在更新之前,我的实体包含正确的值,所以我认为不是与我的代码有关,而是与EF/SQL的一些回合有关.你有什么想法可以避免这种情况吗?

UPDATE

update [dbo].[Breweries]
set [RankId] = @0, 
[Name] = @1, 
[Foundation] = null, 
[DirectSale] = @2, 
[OnlineSale] = @3, 
[StreetAddress] = @4, 
[StreetAddress1] = null, 
[ZIP] = @5, 
[City] = @6, 
[Province] = @7, 
[CountryCode] = @8, 
[Latitude] = @9, 
[Longitude] = @10, 
[PIVA] = null, 
[CodFiscale] = null …
Run Code Online (Sandbox Code Playgroud)

c# latitude-longitude asp.net-mvc-4 entity-framework-5

12
推荐指数
2
解决办法
6299
查看次数

将双类型数据(地理定位)保存到数据库时,奇怪的(?)值会发生变化

我有两个用于存储地理位置数据的字段,在我的MySQL数据库中定义为双精度数:

`address_geo_latitude` float(10,6) NOT NULL,
`address_geo_longitude` float(10,6) NOT NULL
Run Code Online (Sandbox Code Playgroud)

我正在使用Yii2的double验证器而不是用户传递的值:

public function rules()
{
    return [
        [['address_geo_latitude', 'address_geo_longitude'], 'double', 'min'=>0, 'max'=>360]
    ];
}
Run Code Online (Sandbox Code Playgroud)

(虽然我的测试似乎证明,这个问题与Yii2验证器无关)

在测试期间,我观察到值的奇怪(?)变化,即:

  • 359.90成为359.899994(0,000006差异),
  • 359.80成为359.799988(0,000012差异),
  • 311.11成为311.109985(0,000015差异),
  • 255.55成为255.550003(-0,000003差异),
  • 205.205成为205.205002(-0,000002差异),
  • 105.105变得105.105003(-0,000003差异).

但:

  • 359.899994遗体359.899994,
  • 311.109985遗体311.109985,
  • 311遗体311,
  • 255遗体255, …

mysql double geolocation yii yii2

5
推荐指数
1
解决办法
1027
查看次数