надлежащий/лучший тип для хранения широты и долготы

Ошибка анализа: синтаксическая ошибка, неожиданная '['

Эта ошибка возникает в двух вариантах:

Вариант 1

$arr = [1, 2, 3];

Синтаксис инициализатора этого массива был введен только в PHP 5.4; это приведет к возникновению ошибки парсера в версиях до этого. Если возможно, обновите свою установку или используйте старый синтаксис:

$arr = array(1, 2, 3);

См. Также этот пример из руководства.

Вариант 2

$suffix = explode(',', 'foo,bar')[1];

Результаты функции разыменования массива также были введены в PHP 5.4. Если обновление невозможно, вам нужно использовать временную переменную:

$parts = explode(',', 'foo,bar');
$suffix = $parts[1];

См. Также этот пример из руководства.

63
задан Community 23 May 2017 в 12:18
поделиться

5 ответов

Самый легкий путь состоит в том, чтобы только сохранить его как плавающее/двойное в градусах. Положительный для N и E, отрицательного для S и W. Просто помните, что минуты и секунды вне 60 (таким образом, 31 45'N 31.75). Его легкое для понимания, что значения путем рассмотрения их и, в случае необходимости, преобразование в радианы, тривиально.

Вычисления на широтах и долготах такой как Большой Круг расстояние между двумя координатами полагается в большой степени на тригонометрические функции, которые обычно используют, удваивается. Любой другой формат собирается полагаться на другую реализацию синуса, косинуса, atan2 и квадратный корень, как минимум. Числа произвольной точности (например, BigDecimal в Java) не будут работать на это. Что-то как интервал, где 2^32 распространен однородно, будет иметь подобные проблемы.

точка однородности подошла в нескольких комментариях. На этом я просто отмечу, что Земля, относительно долготы, не универсальна. Одна долгота арксекунды в Северном полярном круге является более коротким расстоянием, чем на экватор. Плавания двойной точности дают субмиллиметровую точность где угодно на Земле. Разве это не достаточно? В противном случае, почему нет?

также стоило бы отметить то, что Вы хотите сделать с той информацией как типы вычислений, которых Вы требуете, окажет влияние на то, какой формат устройства хранения данных Вы используете.

37
ответ дан Community 24 November 2019 в 16:27
поделиться

Долготы и широты не являются общеизвестными ни к какой большей точности, чем 32-разрядное плавание. Таким образом, если Вы обеспокоены пространством памяти, можно использовать плавания. Но в целом более удобно работать с числами, как удваивается.

Радианы более удобны для теоретической математики. (Например, производная синуса является косинусом только при использовании радианов.), Но градусы обычно более знакомы и легче для людей интерпретировать, таким образом, Вы могли бы хотеть придерживаться градусов.

17
ответ дан John D. Cook 24 November 2019 в 16:27
поделиться

Могли бы проблемы, которые Вы упомянули со значениями с плавающей точкой, становятся проблемой? Если бы ответ не, я предложил бы просто использовать значение радианов в двойной точности - Вам будет нужен он при выполнении тригонометрических вычислений так или иначе.

, Если могла бы быть проблема с потерей точности, когда использование удваивается или Вы не будете делать тригонометрии, я предложил бы Ваше решение отображения на целочисленный диапазон - это даст Вам лучшее разрешение, может легко быть преобразован в любой формат отображения, Вы - локаль, будет использовать, и - после выбора соответствующего с 0 меридианами - может использоваться для преобразования в значения с плавающей точкой высокой точности.

пз: я всегда задавался вопросом, почему, кажется, нет никого, кто использует геоцентрические сферические координаты - они должны быть обоснованно близко к географическим координатам и не потребуют, чтобы вся эта необычная математика на сфероидах сделала вычисления; для забавы я хотел преобразовать Gauss-KrГјger-Koordinaten (которые используются немецким Katasteramt) к координатам GPS - позволяют мне сказать Вам, который был ужасен: каждый использует эллипсоид Bessel, другой WGS84, и Гаусс-KrГјger, отображающий себя, является довольно сумасшедшим на своем собственном...

4
ответ дан Christoph 24 November 2019 в 16:27
поделиться

0,3-дюймовое разрешение переходит к точке, где землетрясения за несколько лет имеют значение. Можно хотеть пересмотреть, почему Вы полагаете необходимости в таком высоком разрешении во всем мире.

Часть распространения центрируется в изменении Тихого океана так же как 15 см/год .

3
ответ дан Greg Hewgill 24 November 2019 в 16:27
поделиться

Если под «хранением» вы подразумеваете «хранение в памяти», то реальный вопрос: что вы собираетесь с ними делать?

Я подозреваю, что до того, как эти координаты сделают что-нибудь интересное, они будут переданы в радианах через функции в math.h. Если только вы не планируете реализовать довольно много трансцендентных функций, которые работают с градусами / минутами / секундами, упакованными в битовое поле.

Так почему бы не сделать вещи простыми и просто сохранить их в градусах IEEE-754 или радианах с точностью до ваших требований ?

1
ответ дан 24 November 2019 в 16:27
поделиться
Другие вопросы по тегам:

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