Mysql数据库设计 - 存储单个和多个lat长

时间:2009-06-22 22:10:30

标签: mysql database google-maps

我有一个mysql数据库表,它将存储建筑物和事件的位置以及其他一些东西。所有位置都存储在一个表中,并通过他们自己的多个表链接到建筑物,事件等。这样我就可以在地图上显示点,也可以过滤等。

然而问题来自于一些具有单个位置的东西,所以1纬度,长但有些像轨道有多个纬线长位置,像大型体育场这样的东西可能有多边形。这些也存储为lat,long的列表,第一个和最后一个是相同的。

我想知道如何将它存储在mysql数据库中。最初我只有一个lat,long和id的列用于查找表。我是否应该为坐标设置另一个查找表,或者在以某种方式将数据放入数据库之前将其序列化,或者我应该将整个字符串存储在一个字段中 LAT1,long1 LAT1,long1; LAT2,long2; LAT1,long1

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我不会通过将整个“序列化”多边形推入单个字段来从一开始就对数据进行去规范化。

相反,我有一个多边形表(带有多边形ID和可能的辅助每个多边形信息,例如它是一个实际的闭合多边形还是只是一条折线 - 尽管可能也可以在下表中表示最后一个点等于某个多边形的第一个点)和一个PointsInPolygon表(点的坐标,多边形ID外键,多边形内的顶点数 - 后两者共同唯一)。

标准化将使(通常)您的生活更加简单,即使是临时查询(在本例中包括“X附近的多边形”,多边形点等)。与往常一样,如果确定某些特定查询确实需要优化(以表更新,完整性检查等为代价),您可以稍后添加冗余非规范化值。在这方面,地理数据与其他种类没有什么不同。

答案 1 :(得分:1)

由于您没有对这些位置进行任何查找,并且您正在使用(我假设)Google Maps API,因此最简单的解决方案可能是将lat / lon列表编码为JSON并存储在varchar列。

您可以直接从数据库输出JSON,以便使用Google Maps API代码。我建议你使用一些简单的JSON结构:["point",1.23456,2.34567]["line",1.23456,2.34567,3.45678,4.56789]等等。