我们在这个问题上存在一些内部冲突,似乎无法得出一个圆满的结论。
我们只存储纬度和经度,可能还有简单的多边形。我们所需要的只是计算两点之间的距离(并且可能看一个点是否在多边形内),并且整个数据非常接近以使平面估计可接受。
由于我们的要求非常宽松,开发团队的一半建议使用SqlGeometry
类型,这显然更简单。但是,我很难接受这个,因为我们正在存储地理数据,这似乎是将它们存储在SqlGeography
中是正确的做法。此外,我没有找到任何实质性证据表明SqlGeometry
数据类型比SqlGeography
类型更容易使用。
是否有人建议哪种类型更适合这种相对简单的情况?
答案 0 :(得分:7)
这不是比较特征,准确性或简单性的问题 - 两种空间数据类型用于处理不同类型的数据。
作为类比,假设您为包含每行唯一标识符的列选择最佳数据类型。如果该UID仅包含整数值,则使用 int ,而如果它是6个字符的字母数字值,则使用 char(6)。如果它有可变长度的unicode值,你可以使用 nvarchar ,对吗?
空间数据采用相同的逻辑 - 您可以根据该列包含的值选择适当的数据类型;如果您正在使用地理(即纬度/经度)坐标,请使用 SqlGeography 数据类型。就这么简单。
你可以使用SqlGeometry存储纬度/经度值,但它就像使用 nvarchar(max)来存储整数......我保证你将会导致进一步的问题(例如,当您所有的区域计算以度平方为单位进行测量时)
答案 1 :(得分:5)
SqlGeography类型的可用方法少于SqlGeometry(特别是在Sql 2008中)。
例如,假设您想要在Sql2008中获取多边形的质心。您在几何中有一个本机方法,但在地理方面则没有。
此外,它还有以下限制:
此外,大多数可用的API和库(我所知道的)比地理位置更好地处理几何。
那就是说,如果距离计算必须精确,你的距离很远,并且在世界各地都有坐标,那么地理位置可能更合适。否则,根据您对问题的描述,您可以使用几何类型。
关于你的问题:“工作更容易吗?”。这取决于。无论如何,根据经验,对于简单的场景,我通常会选择SqlGeometry。
无论如何,恕我直言,你不应该太担心这个决定。使用其他类型创建新列相对容易,并在必要时迁移数据。
答案 2 :(得分:1)
四年后,很明显我们应该将数据存储在SqlGeometry
而不是SqlGeography
。
为什么?
我们从立法区地图导入信息,他们的数据存储在SqlGeometry
。在确定特定纬度/经度是否在某个立法区边界内时,当该点接近两个边界时,我们会得到不一致的结果。
这要求我们做额外的工作来确定"关闭"到边界,并手动验证它们是否被分配到适当的区域。不理想。
故事的道德:如果您依赖任何数据,请考虑将其存储在哪种类型以帮助指导您的决策。