TimeZone координатой [дубликат]

Я был также увлечен подобными играми. Один современный пример, который я использовал, http://www.robotbattle.com/ . Существуют различные другие - например, те перечисленные в http://www.google.com/Top/Games/Video_Games/Simulation/Programming_Games/Robotics/

8
задан Morten 9 November 2009 в 22:25
поделиться

3 ответа

Проверьте базу данных tz . Я знаю, что он связывает имена с часовыми поясами (например, город, страны, EST и т. Д.). Но я считаю, что где-то есть расширение для координат.

2
ответ дан 5 December 2019 в 19:00
поделиться

Решением было экспортировать шейп-файл ESRI в SQL Server 2008 с использованием новых пространственных типов данных.

Если у кого-то есть лучшее решение, не стесняйтесь публиковать!

0
ответ дан 5 December 2019 в 19:00
поделиться

Я пытался экспортировать таблицу, но не представляется возможным экспортировать типы 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 () ..

1
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: