J'ai essayé d'exporter la table mais il ne semble pas possible d'exporter les types geometry
en texte .. mais ce n'était pas si difficile à faire de toute façon .. Vous devez google le fichier de formes produit quelques années Il faut donc exporter ces données vers SQL Server 2008 en utilisant un programme. J'ai utilisé Manifold (n'oubliez pas d'utiliser Enterprise Edition ou plus). Ensuite, je interroge les données en utilisant la procédure stockée suivante:
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(([email protected] + 7.5)/15) AS Offset, NULL AS AreaI
Il existe un problème dans le fichier de formes car les eaux nationales ne sont pas mappées. Je pensais à peut-être utiliser @ g.STBuffer() pour résoudre ce problème ..
Voir aussi, [ce wiki communautaire] (http://stackoverflow.com/q/16086962/634824) –