请记住,我将在lat/long对上执行计算,哪种数据类型最适合与MySQL数据库一起使用?
我正在SQL Server 2008中设计一个表,用于存储用户列表和Google Maps坐标(经度和纬度).
我需要两个字段,还是可以用1完成?
用于存储此类数据的最佳(或最常见)数据类型是什么?
我在这里读到这个问题:
在SQL数据库中存储纬度和经度数据时要使用的数据类型是什么?
似乎普遍的共识是使用Decimal(9,6)是要走的路.对我来说,问题是,我真的需要这么准确吗?
例如,Google的API会返回如下结果:
"lat": 37.4219720,
"lng": -122.0841430
Run Code Online (Sandbox Code Playgroud)
超出-122.0841430,我需要多少位数?我已经阅读了几本指南,但我无法从中得到足够的理解来解决这个问题.
更确切地说,在我的问题中:如果我想在精确位置50英尺范围内准确,我需要存储多少小数点?
也许一个更好的问题实际上是一个非编程问题,但它会是:每个小数点给你多少准确?
这很简单吗?
我发现在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) 我有两个用于存储地理位置数据的字段,在我的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 ×3
geolocation ×2
c# ×1
double ×1
mapping ×1
maps ×1
spatial ×1
sql-server ×1
yii ×1
yii2 ×1