Я был также увлечен подобными играми. Один современный пример, который я использовал, http://www.robotbattle.com/ . Существуют различные другие - например, те перечисленные в http://www.google.com/Top/Games/Video_Games/Simulation/Programming_Games/Robotics/
Проверьте базу данных tz . Я знаю, что он связывает имена с часовыми поясами (например, город, страны, EST и т. Д.). Но я считаю, что где-то есть расширение для координат.
Решением было экспортировать шейп-файл ESRI в SQL Server 2008 с использованием новых пространственных типов данных.
Если у кого-то есть лучшее решение, не стесняйтесь публиковать!
Я пытался экспортировать таблицу, но не представляется возможным экспортировать типы 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 () ..
Кажется возможным экспортировать типы геометрии
в текст .. однако в любом случае это было не так уж сложно .. Вам нужно погуглить шейп-файл 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 () ..
Кажется возможным экспортировать типы геометрии
в текст .. однако в любом случае это было не так уж сложно .. Вам нужно погуглить шейп-файл 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 () ..
Затем вам нужно экспортировать эти данные в 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 () ..
Затем вам нужно экспортировать эти данные в 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 () ..