テーブルをエクスポートしようとしましたが、geometry
タイプをテキストにエクスポートすることはできないようです..しかし、とにかくそれを行うのはそれほど難しくありませんでした..数年前にManifoldが作成したシェープファイルをグーグルする必要があります。世界の国々とそのタイムゾーン..次に、何らかのプログラムを使用してそのデータを SQL Server 2008 にエクスポートする必要があります..私は Manifold を使用しました (Enterprise Edition 以上を使用することを忘れないでください)..次に、次のストアド プロシージャを使用してデータをクエリします。
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
国水域がマッピングされていないため、シェープファイルに問題があります。この問題に対処するために @g.STBuffer() を使用するかもしれません..