Сохранить геолокацию как широту / долготу или адрес / название области?
Предположим, сервис как Foursquare, я хочу сохранить место регистрации. Должен ли я сохранить это как широта-долгота или имя адреса / области, например 123 Portmill St, NY 12345 или SoHo, NY. В первом случае пользователи могут вводить адрес, и моя служба ищет и хранит информацию по всей длине. Делая это, мой сервис может искать регистрацию в пределах границ полигона.
Во втором случае я могу сохранить местоположение в виде сегмента и избежать избыточной информации, такой как (lat,long) = (100000.1,100000.1), (100000.2,100000.2), которые очень близко друг к другу и даже могут рассматриваться как одно и то же местоположение.
2 ответа
Как насчет этого. Я бы сохранил 3 столбца в базе данных, а именно (Широта, Долгота, TextLocation), но именно эта пара (Широта, Долгота) считается ключом таблицы. TextLocation - это последний известный результат обратного геокодера, когда у геокодера запрашивался текст, соответствующий заданному (Широта, Долгота).
Когда прибывает новая позиция (New_Latitude, New_Longitude), я выполняю поиск в базе данных, чтобы найти все ближайшие строки в базе данных. Чтобы вычислить расстояние от (New_Latitude, New_Longitude) до (Latitude, Longitude), я использовал бы следующий код
float LatDiff = New_Latitude - Latitude;
float LongDiff = New_Longitude - Longitude;
float CosNewLat = Math.cos(New_Latitude);
float ConversionFac = 6371000 * Math.PI / 180; // 6371000 is earth radius in metres
float Dist_metres = ConversionFac * Math.sqrt(LatDiff*LatDiff + LongDiff*LongDiff*CosNewLat*CosNewLat);
Затем для каждой из ближайших точек (New_Latitude, New_Longitude) я бы обновил TextLocation в базе данных, используя обратное геокодирование. Если новая позиция не соответствует текущему обратному геокодированию для какой-либо из существующих локаций, я бы добавил ее в базу данных.
Часть моих мыслей здесь заключается в том, что даже при хранении трех столбцов, включающих столбец текста, база данных по-прежнему будет крошечной по сравнению с современными емкостями хранения.
Я не думаю, что я полностью понял нюансы того, что вы пытаетесь сделать, но компьютеры обычно лучше работают с числами, такими как широта и долгота, а не с читаемой человеком текстовой информацией. Например, с помощью текстового адреса, как бы вы обеспечивали согласованность, например, работая с лишними пробелами, ZIP+4 кодами, а не просто с более короткими почтовыми индексами и т. Д. И т. Д.
Я думаю, это только мой инстинкт, что широта и долгота могут быть лучше, чем текст. Там, где я живу в Великобритании, есть много примеров, когда в городах и городах есть две дороги с одинаковым названием, поэтому я думаю, что, скорее всего, будет больше ловушек с хранением текста вместо широты / долготы.