对Latitude&amp ;;的小调整经度与Javascript

时间:2012-03-17 19:44:15

标签: javascript google-maps google-apps-script google-maps-markers

我正在使用Google表单从一群人那里收集简单的(城市,州)数据,然后将生成的电子表格连接到此javascript的Google Fusion Table(通过onSubmit)

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

然后,此Fusion Table会生成表单输入的映射。这真的很酷。

不幸的是,如果两个用户进入同一个城市,状态组合只能看到一个标记(因为脚本检索的纬度和经度完全相同)。

我的问题......

有没有比我更多的javascript chops的人可以向我显示修复此问题的代码的调整吗?

我认为一个合理的解决方案是生成一个随机整数,比如介于0和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 个答案:

答案 0 :(得分:1)

最好在标记上加上一个数字,说明有多少人选择了这个城市/州。首先,您提出的解决方案将无法很好地适应非常小的城市。

但无论如何,这就是你做这样的事情:

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

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

请注意,Math.random()会在01之间生成一个随机数。

答案 1 :(得分:0)

知道了!

非常感谢指导,@ 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);
  }