我已尝试导出表格,但似乎无法将 geometry 类型导出为文本 .. 不过这并不难做到.. 您需要谷歌 shapefile Manifold 产生了一些几年前,它映射了世界上所有国家及其时区。然后你需要使用一些程序将该数据导出到 SQL Server 2008。我使用 Manifold(记得使用企业版或更高版本)。然后我查询数据使用以下存储过程:
USE [MyDb]
GO
/****** Object: StoredProcedure [dbo].[GetTimeZone] Script Date: 11/18/2009 21:23:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetTimeZone]
@Latitude float,
@Longitude float
AS
/* SET NOCOUNT ON */
DECLARE @g geometry
/* Validation */
IF @Latitude > 90 OR @Latitude < -90 OR @Longitude > 180 OR @Longitude < -180
RAISERROR('Latitude or longitude out of range', 16, 1)
IF @Latitude IS NULL OR @Longitude IS NULL
RAISERROR('Latitude or longitude cannot be null', 16, 1)
SET @g = geometry::Point(@Longitude, @Latitude, 4326);
IF EXISTS(SELECT * From TimeZones WHERE Shape.STContains(@g) = 1)
/* Point exists on map, get the info */
SELECT Name, LocalSumme, Offset, AreaI FROM TimeZones WHERE Shape.STContains(@g) = 1
ELSE
/* Point is an international water */
IF(@Longitude >= 0)
SELECT NULL AS Name, NULL AS LocalSumme, FLOOR((@Longitude + 7.5) / 15) AS Offset, NULL AS AreaI
ELSE
SELECT NULL AS Name, NULL AS LocalSumme, -FLOOR((-@Longitude + 7.5) / 15) AS Offset, NULL AS AreaI
shapefile 中存在问题,因为未映射国家水域。我想也许可以使用@g.STBuffer() 来解决这个问题..