Как я могу получить широту, долготу от x, y на Меркаторской карте (JPEG)?

Это расстраивает. Мое решение состояло в том, чтобы разобрать «/ и /» из значения, сгенерированного JavaScriptSerializer ASP.NET, так что, хотя JSON может не иметь литерала даты, он все равно будет интерпретироваться браузером как дата, и это все, что я на самом деле want: {"myDate":Date(123456789)}

Пользовательский JavaScriptConverter для DateTime?

Я должен подчеркнуть точность комментария Роя Тинкера. Это не законный JSON. Это грязный, грязный хак на сервере, чтобы удалить проблему, прежде чем она станет проблемой для JavaScript. Он захлебнется парсером JSON. Я использовал это для того, чтобы оторваться от земли, но я больше не использую это. Тем не менее, я все еще чувствую, что лучший ответ заключается в изменении того, как сервер форматирует дату, например, ISO, как упоминалось в другом месте.

8
задан j0k 11 September 2013 в 11:46
поделиться

2 ответа

Вот код для вы ... Дайте мне знать, если вам нужно больше объяснений.

    /// <summary>
    /// Calculates the Y-value (inverse Gudermannian function) for a latitude. 
    /// <para><see cref="http://en.wikipedia.org/wiki/Gudermannian_function"/></para>
    /// </summary>
    /// <param name="latitude">The latitude in degrees to use for calculating the Y-value.</param>
    /// <returns>The Y-value for the given latitude.</returns>
    public static double GudermannianInv(double latitude)
    {
        double sign = Math.Sign(latitude);
        double sin = Math.Sin(latitude * RADIANS_PER_DEGREE * sign);
        return sign * (Math.Log((1.0 + sin) / (1.0 - sin)) / 2.0);
    }

    /// <summary>
    /// Returns the Latitude in degrees for a given Y.
    /// </summary>
    /// <param name="y">Y is in the range of +PI to -PI.</param>
    /// <returns>Latitude in degrees.</returns>
    public static double Gudermannian(double y)
    {
        return Math.Atan(Math.Sinh(y)) * DEGREES_PER_RADIAN;
    }
8
ответ дан 5 December 2019 в 14:05
поделиться

Как насчет деревьев выражений ? Они составляют основу LINQ и позволяют отложить выполнение:

Взято из блога Дэвида Хайдена :

В C # 3.0 вы можете определить делегата следующим образом, используя лямбда-выражение:

Func<int,int> f = x => x + 1;

This делегат компилируется в исполняемый код в вашем приложении и может вызываться как таковой:

var three = f(2); // 2 + 1

Код работает, как и следовало ожидать. Здесь нет ничего особенного.

Деревья выражений

Когда вы определяете делегат как дерево выражений с помощью System.Query.Expression:

Expression<Func<int,int>> expression = x => x + 1;

Делегат больше не компилируется в исполняемый код, а компилируется как данные, которые можно преобразовать и скомпилирован в исходный делегат.

Чтобы действительно использовать делегат, представленный в виде дерева выражений в вашем приложении, вам нужно будет скомпилировать и вызвать его в своем приложении: проекция Меркатора с использованием сферической модели Земли, а не более медленных и более сложных эллиптических уравнений.

Преобразования доступны как часть кода OpenLayers:

http://docs.openlayers.org/library/spherical_mercator.html

2
ответ дан 5 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

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