Небольшие корректировки широты и долготы с помощью Javascript - PullRequest
0 голосов
/ 17 марта 2012

Я использую форму Google для сбора простых (город, штат) данных о группе людей, а затем подключаю полученную электронную таблицу к таблице Google Fusion Table (через onSubmit) этого javascript

http://kh -samples.googlecode.com / svn / trunk / code / appsscript.js

Эта Fusion Table затем генерирует карту ввода формы. Это очень классный сервис, правда.

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

Мой вопрос ...

Может ли кто-нибудь с большим количеством javascript-кодов, чем я, показать мне корректировку кода, которая решит эту проблему?

Я думаю, что разумным решением было бы сгенерировать случайное целое число, скажем, между 0 и 200, и добавить это число к месту 0,00X широты (и сделать то же самое для долготы). Это создаст достаточно большой сдвиг, чтобы держать маркеры в одном и том же городе, но переместить их достаточно далеко друг от друга, чтобы сделать их видимыми.

Это похоже на место, где выполняется геокодирование (строка 75) ...

// If an address column was specified, geocode the value in it.
  if (addressColumn && column == addressColumn) {
    var latlng = geocode(value);
    latlngColumn = latlngColumn.replace(/'/g, "\\\'");
    columns.push(latlngColumn);
    values.push(latlng);
  }

Заранее спасибо, Райан

Ответы [ 2 ]

1 голос
/ 17 марта 2012

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

Но в любом случае, вот как бы вы поступили так:

var originalLongitude = /* from wherever */;
var originalLatitude = /* from wherever */;

var shiftedLongitude = originalLongitude + Math.random() * 0.002;
var shiftedLatitude = originalLatitude + Math.random() * 0.002;

Обратите внимание, что Math.random() производит случайное число между 0 и 1.

0 голосов
/ 18 марта 2012

Понял!

Большое спасибо за руководство, @ Domenic

// If an address column was specified, geocode the value in it.
  if (addressColumn && column == addressColumn) {
    var latlng = geocode(value);

    newString = latlng.split(",");

    newLat = parseFloat(newString[0]) + Math.random() * 0.002;
    newLng = parseFloat(newString[1]) + Math.random() * 0.002;

    var newlatlng = newLat + "," + newLng;

    latlngColumn = latlngColumn.replace(/'/g, "\\\'");
    columns.push(latlngColumn);
    values.push(newlatlng);
  }
...