我正在使用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);
}
提前致谢, 莱恩
答案 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()
会在0
和1
之间生成一个随机数。
答案 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);
}