Округление широты и долготы, чтобы показать приблизительное местоположение в Google Maps - PullRequest
6 голосов
/ 11 марта 2011

Я отображаю карту Google в виде приложения Rails и буду использовать маркер / оверлей.

Данные о координатах будут поступать с телефона (GPS) и сохраняться в базе данных моего приложения Rails.

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

Как я могу округлить / усечь значения lat / long, чтобы они все еще были точными (скажем, в миле) - но не слишком точными?

(Пример: как бы вы округлили 35,2827524, -120,6596156?)

Ответы [ 4 ]

9 голосов
/ 11 марта 2011

Самое простое, что можно сделать, это либо округлить обе координаты до определенного количества десятичных знаков, либо добавить случайное сглаживание к координатам:

lat = Math.floor(lat*1000+0.5)/1000; (round within 0.001)

или

dither=0.001;
lat = lat + (Math.random()-0.5)*dither;

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

0 голосов
/ 24 мая 2018

Это можно сделать довольно просто. Если вы округляетесь до сетки, то широта изменяется на постоянную величину во всех точках планеты. Долгота меняется в зависимости от того, как далеко вы находитесь от экватора.

Следующий код привязывает широту и долготу к произвольному размеру сетки

double EARTH_RADIUS_KM = 6371;

double GRID_SIZE_KM = 1.6; // <----- Our grid size in km..

double DEGREES_LAT_GRID = Math.toDegrees(GRID_SIZE_KM / EARTH_RADIUS_KM);
//     ^^^^^^ This is constant for a given grid size.

public Location snapToGrid(Location myLoc) {
  double cos = Math.cos(Math.toRadians(myLoc.latitude));

  double degreesLonGrid = DEGREES_LAT_GRID / cos;

  return new Location (
      Math.round(myLoc.longitude / degreesLonGrid) * degreesLonGrid,
      Math.round(myLoc.latitude / DEGREES_LAT_GRID) * DEGREES_LAT_GRID);

}

Обратите внимание, что это потерпит неудачу в случае, когда вы находитесь на полюсе (когда функция cos приближается к нулю). В зависимости от размера вашей сетки результаты становятся непредсказуемыми, когда вы приближаетесь к широте +/- 90 градусов. Обработка этого упражнения оставлена ​​читателю:)

0 голосов
/ 13 ноября 2011

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

Есть ли простой способ сделать грубые координаты GPS?

0 голосов
/ 11 марта 2011

Попробуйте округлить до двух десятичных знаков.

...