Сво хороший вопрос, и, возможно, кто-то с большим знанием внутренностей мог ответить на этот вопрос, однако, лично я бы вопрос, почему вы «должны хранить до 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 цифр точности просто не требуются.
Конечно, вы можете отказаться от использования пространственного пространства и вручную реализовать типы с широтой и долготой, хранящиеся с использованием типа, который поддерживает требуемую точность.Но тогда у вас будет огромные накладные расходы на выполнение всех ваших собственных вычислений и уничтожение выгоды от пространственной индексации. Я НЕ рекомендую этот подход и не изобретаю колесо.
Надеюсь, что имеет смысл. Если я что-то упустил, напишите комментарий, и я обновлю ответ.
Благодарим вас за прекрасное объяснение. Да вы правы. Я имею дело с широтой и долготой (API-интерфейс для рисования карт Google). Ответьте на свой вопрос: мне нужно сохранить форму, которая была возвращена API-интерфейсом API Google Maps. По моим наблюдениям, я видел, что API-интерфейс 17 цифр был возвращен (в некоторых случаях для формы Polygon). Эти значения должны храниться так же, как на сервере Mysql. По вашему объяснению, я считаю, что API-интерфейс рисования не будет производить 20-значную точность (теперь я думаю, что 17-значная точность является максимальной). В моем случае, что делать? Любые идеи Пожалуйста? – ArunRaj
@ user2959196 Добро пожаловать. Честно говоря, я бы рекомендовал вам всего лишь округлить возвращаемые координаты до 6 или не более 7 знаков после запятой. Пользователь НЕ сможет сказать разницу из-за максимально доступного увеличения карты Google Map. Google всегда возвращает результаты к максимальной точности, но это больше результат либо вычислений, либо представления с плавающей запятой, а не точности. Кроме того, падение до 6 или 7 десятичных знаков также приведет к увеличению производительности при отправке и извлечении из базы данных. –
Спасибо за рекомендацию. Я сомневаюсь в этом. Пожалуйста, очистите его. Я думаю, согласно нашему usecase. Если мы уменьшим возвращаемые данные, мы можем получить проблему в функциональности. FYI, Собираясь рисовать от 20 до 30 фигур (шансы получить больше) на уровне улицы в городе. И собираемся проверить адрес с сохраненными формами (которые мы нарисовали). Как и в случае необходимости, нужно проверить, что данный адрес находится внутри/вне фигур. Если внутри, нужно указать, какую форму. В этом случае, если мы уменьшим точность, есть большой шанс получить неправильные результаты. Любая помощь очень ценится. – ArunRaj