在Python中存储纬度和经度值的理想数据类型是什么?

时间:2016-03-07 10:45:44

标签: python types latitude-longitude

在Python中存储纬度和经度值的理想数据类型是什么?以GTFS中的stops.txt为例,

stop_lat,stop_lon
48.82694828196076,2.367038433387592
48.82694828196076,2.367038433387592
48.829830695271106,2.376120009344837
48.829830695271106,2.376120009344837
48.83331371557845,2.387299704383512
48.83331371557845,2.387299704383512
48.840542782965464,2.3794094631230687
48.840542782965464,2.3794094631230687
48.844652150982945,2.37310814754528

对应What is the ideal data type to use when storing latitude / longitudes in a MySQL database?,高度赞成的答案是:

  

在GIS中使用MySQL的空间扩展。

5 个答案:

答案 0 :(得分:1)

我假设您需要6个小数位。所以,float会保存你的数据。或者精度设置为6的小数?

答案 1 :(得分:1)

你可以定义FLOAT(N,D),其中默认值为(10,2),其中2是小数位数,10是包含小数的总位数,小数精度最多可以达到24位浮点数和53位数DOUBLE(N,D)的地方。

答案 2 :(得分:1)

我认为namedtuple是可行的方法,可以通过名称轻松访问,并像元组一样使用(对于精确使用浮点数):

In[4]: from collections import namedtuple
In[5]: coords = namedtuple("Coords", ['x', 'y'])
In[6]: coords
Out[6]: __main__.Coords
In[7]: coords(1,2)
Out[7]: Coords(x=1, y=2)
In[8]: coords(1.235445,2.2345345)
Out[8]: Coords(x=1.235445, y=2.2345345)
In[9]: coords(1.2354451241234214,2.234534512412414134)
Out[9]: Coords(x=1.2354451241234214, y=2.2345345124124143)

答案 3 :(得分:0)

你已经要求存储纬度和经度,以及你要存储的数据量,我会找一个浮动元组列表:

data = [
    (48.82694828196076,2.367038433387592),
    (48.82694828196076,2.367038433387592)
]

元组当然可以在任何时候被列表替换。特别是因为它只存储2个花车,所以它的使用成本并不高,你根本不会注意到它们之间的区别。然后这将产生一个嵌套列表:

data = [
    [48.82694828196076,2.367038433387592],
    [48.82694828196076,2.367038433387592]
]

答案 4 :(得分:0)

我想在这里用(18,15)使用十进制字段就足够了,其中18是总长度,而15是lat / lng值的十进制计数。 15 + 3 =18。

lat = models.DecimalField(max_digits=18, decimal_places=15, default=None, null=True, blank=True)
lon = models.DecimalField(max_digits=18, decimal_places=15, default=None, null=True, blank=True)