我正在设计一个SQL Server 2008中的表格,它将存储用户列表和Google地图坐标(经度为&纬度)。在SQL Server中存储坐标(来自谷歌地图的经度/纬度)的最佳方式是什么?
我需要两个字段,或可将其与1做什么?
什么是最好的(或最常见的)数据类型用来存储这类数据?
我正在设计一个SQL Server 2008中的表格,它将存储用户列表和Google地图坐标(经度为&纬度)。在SQL Server中存储坐标(来自谷歌地图的经度/纬度)的最佳方式是什么?
我需要两个字段,或可将其与1做什么?
什么是最好的(或最常见的)数据类型用来存储这类数据?
看看新的空间在SQL Server 2008中引入它们是专为此类任务的数据类型并进行索引和查询更容易,更高效。
的更多信息:
SQL Server支持空间相关信息。你可以在http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx看到更多。
Alternativly您可以将信息存储为两个基本领域,通常是浮点数是大多数通信设备上报的标准数据类型和准确够一两英寸之内 - 绰绰有余了谷歌地图了。
如果你只是把它代入我想一个领域会做一个URL - 这样你就可以形成像
http://maps.google.co.uk/maps?q=12.345678,12.345678&z=6
一个URL,但因为它是两个数据我将它们存储在单独的田
商店既作为浮动,并用独特的关键词上them.i.em
create table coordinates(
coord_uid counter primary key,
latitude float,
longitude float,
constraint la_long unique(latitude, longitude)
);
我不知道SQL Server,但答案...
在MySQL的保存为FLOAT(10, 6)
这是从Google developer documentation官方推荐。
CREATE TABLE `coords` (
`lat` FLOAT(10, 6) NOT NULL ,
`lng` FLOAT(10, 6) NOT NULL ,
) ENGINE = MYISAM ;
你想要做的是将纬度和经度存储为新的SQL2008空间类型 - >地理。
这里有一个表的屏幕截图,这是我有。
alt text http://img20.imageshack.us/img20/6839/zipcodetable.png
在这个表中,我们存储数据的地理两个领域。
您希望将它作为GEOGRAPHY类型保存到数据库的主要原因是您可以利用所有的SPATIAL方法 - >例如。点在保利,两点之间的距离等
顺便说一句,我们还可以使用谷歌的地图API来获取纬度/经度数据,并存储在我们的SQL 2008数据库 - 所以这种方法确实可行。
公平的警告!在服用建议使用地理类型,请确保您不使用LINQ或实体框架来访问数据,因为它不支持(如2010年11月)的规划,你会难过!
更新2017年7月
对于那些现在正在阅读这个答案,它是过时的,因为它是指追溯技术堆栈。查看评论以获取更多详情
我讨厌对那些说“这是一种新型,让我们使用它”的人做出反向。新的SQL Server 2008空间类型有一些优点 - 即效率,但是你不能盲目说总是使用这种类型。这真的取决于一些更大的图片问题。
作为一个例子,集成。这种类型在.Net中具有equivilent类型 - 但interop是什么?那么支持或扩展旧版本的.Net怎么样?将服务层中的这种类型暴露给其他平台呢?对数据规范化怎么样 - 也许你对独立的信息感兴趣。也许你已经写了复杂的业务逻辑来处理长/经纬度。
我不是说你不应该使用的空间类型 - 在你应该很多情况下。我只是说,在走下这条道路之前,你应该问一些更重要的问题。对于我最准确地回答你的问题,我需要更多地了解你的具体情况。
存储经度/纬度单独地或以一个空间类型都可行的解决方案,并且一个可能优选的是在其它根据自己的情况。
我做的方式:我存储纬度和经度,然后我有一个第三列这是第一两列的自动导出的地理类型。该表是这样的:
CREATE TABLE [dbo].[Geopoint]
(
[GeopointId] BIGINT NOT NULL PRIMARY KEY IDENTITY,
[Latitude] float NOT NULL,
[Longitude] float NOT NULL,
[ts] ROWVERSION NOT NULL,
[GeographyPoint] AS ([geography]::STGeomFromText(((('POINT('+CONVERT([varchar](20),[Longitude]))+' ')+CONVERT([varchar](20),[Latitude]))+')',(4326)))
)
这给了你空间查询对GeoPoint的列中的灵活性,因为你需要它们显示或提取为CSV目的,还可以检索的纬度和经度值。
这是我的情况。我只需要将坐标存储在一个字段中,并用逗号分隔。我认为可以使用TEXT作为字段类型。 你觉得呢? – Amr 2017-03-10 10:06:12