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