2014-03-13 4 views
0

Я пытаюсь сохранить Geo CoOrdinates внутри базы данных mysql. Если мое значение точности координаты превышает 15 цифр, тогда значение округляется и сохраняется в базе данных. Я считаю, что это происходит из-за this doc.Почему пространственный тип данных не может содержать более 15 цифр, поскольку он использует Double для хранения данных?

Но интересная информацияКогда я попытался сохранить те же координаты с двойным типом данных. Я могу хранить до 17 цифр.

Пространственные типы данных также сохраняют каждую координату как двойную внутри. Затем Почему пространственный тип данных не может хранить более 15-значной точности? Я должен хранить до 20 цифр. Что делать сейчас?

ответ

1

Сво хороший вопрос, и, возможно, кто-то с большим знанием внутренностей мог ответить на этот вопрос, однако, лично я бы вопрос, почему вы «должны хранить до 20 цифр точности».

Я заметил из некоторых ваших предыдущих вопросов, что вы имеете дело с координатами широты и долготы, верно ли это?

Предполагая, что необходимость в 20-значной точности является сомнительной и не без оснований. Единая степень долготы на экваторе (самая большая) составляет примерно 110 км. Поэтому:

  • 1 десятичное место 11 км
  • 2 знаков после запятой составляет 1,1 км
  • 3 знаков после запятой составляет 110 метров
  • 4 знака после запятой 11 метров
  • 5 знаков после запятой составляет 1,1 метра
  • 6 знаков после запятой составляет 11 сантиметров
  • 7 знаков после запятой составляет 1,1 сантиметра
  • 8 знаков после запятой составляет 1,1 миллиметра
  • 9 знаков после запятой составляет 0,11 мм
  • 10 знаков после запятой составляет 0,011 мм

.. Я не думаю, что мне нужно продолжать здесь, в 20 десятичных знаков» будем иметь дело с расстояниями, меньшими, чем нанометровая шкала. Стоит отметить, что на самом деле эти расстояния уменьшаются по мере приближения к полюсам, хотя с MySQL вы работаете над планарной моделью, так что это не применяется (если вы не вручную реализуете сложный алгоритм vincenty для расчета расстояний - что сопряжено с большими накладными расходами по сравнению с методом haversine). На этой земле нет оборудования, которое точно фиксирует это, и поэтому вы никогда не достигнете «абсолютного» результата на этих уровнях.

Даже если вы не работаете с широтой и долготой, и вы работаете с геометрией на плоской модели, ваши подразделения могут быть любыми измерениями, которые вы хотите, чтобы они были (пока вы помните, конвертируете по мере необходимости и документа это - например, счетчики), и опять же, 20 цифр точности просто не требуются.

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

Надеюсь, что имеет смысл. Если я что-то упустил, напишите комментарий, и я обновлю ответ.

+0

Благодарим вас за прекрасное объяснение. Да вы правы. Я имею дело с широтой и долготой (API-интерфейс для рисования карт Google). Ответьте на свой вопрос: мне нужно сохранить форму, которая была возвращена API-интерфейсом API Google Maps. По моим наблюдениям, я видел, что API-интерфейс 17 цифр был возвращен (в некоторых случаях для формы Polygon). Эти значения должны храниться так же, как на сервере Mysql. По вашему объяснению, я считаю, что API-интерфейс рисования не будет производить 20-значную точность (теперь я думаю, что 17-значная точность является максимальной). В моем случае, что делать? Любые идеи Пожалуйста? – ArunRaj

+1

@ user2959196 Добро пожаловать. Честно говоря, я бы рекомендовал вам всего лишь округлить возвращаемые координаты до 6 или не более 7 знаков после запятой. Пользователь НЕ сможет сказать разницу из-за максимально доступного увеличения карты Google Map. Google всегда возвращает результаты к максимальной точности, но это больше результат либо вычислений, либо представления с плавающей запятой, а не точности. Кроме того, падение до 6 или 7 десятичных знаков также приведет к увеличению производительности при отправке и извлечении из базы данных. –

+0

Спасибо за рекомендацию. Я сомневаюсь в этом. Пожалуйста, очистите его. Я думаю, согласно нашему usecase. Если мы уменьшим возвращаемые данные, мы можем получить проблему в функциональности. FYI, Собираясь рисовать от 20 до 30 фигур (шансы получить больше) на уровне улицы в городе. И собираемся проверить адрес с сохраненными формами (которые мы нарисовали). Как и в случае необходимости, нужно проверить, что данный адрес находится внутри/вне фигур. Если внутри, нужно указать, какую форму. В этом случае, если мы уменьшим точность, есть большой шанс получить неправильные результаты. Любая помощь очень ценится. – ArunRaj

 Смежные вопросы

  • Нет связанных вопросов^_^