我有不同的标记。 对于其中一些,经度或纬度是相同的。
对于任何标记,如果它具有相同的经度或纬度,与其他标记相比,我想增加其纬度大小。
但最后我最终改变了所有标记的坐标
你能告诉我如何解决这个问题吗?
这是我的代码
function checkifgotsameLatitude(response , lator,lotor)
{
var a = 0;
for(var i=0;i<response.length;i++)
{
var latitusevalue = response[i].latitude;
var longitude = response[i].longititude;
if(latitusevalue==lator || lotor==longitude)
{
a++;
}
}
return a ;
}
答案 0 :(得分:1)
我看了你的小提琴,我认为解决方法是将项目N与索引大于N的其他项目进行比较。你可以通过将起始索引传递给checkifgotsameLatitude
函数来实现。< / p>
function checkifgotsameLatitude(response , lator,lotor, startIndex)
{
for(var i=startIndex;i<response.length;i++)
{
var latitusevalue = response[i].latitude;
var longitude = response[i].longititude;
if(latitusevalue==lator || lotor==longitude)
{
return true;
}
}
return false;
}
更新了fiddle
编辑:当找到第一个匹配项时,该函数现在可以返回。这会加快速度。更新了fiddle
答案 1 :(得分:1)
如果您希望在差异小于0.0001或类似
时将一个经销商与另一个经销商抵销,则此方法有效function normaliseLat(num) {
var numDecimals = 4; // precision
return String(num.toFixed(numDecimals)).replace(".", "_");
}
function diffLng(lng, pos, response) {
return Math.abs(response[pos].longitude - lng)
}
var lats = [];
for (var i = 0; i < response.length; i++) {
var lat = parseFloat(response[i].latitude);
var lng = parseFloat(response[i].longitude);
var norm = normaliseLat(lat);
var pos = lats.indexOf(norm);
if (pos!=-1) { // found
if (diffLng(lng,pos,response) < 0.0002) {
lat = parseFloat(lat)+0.00001;
}
}
lats[i]=norm;
答案 2 :(得分:0)
似乎没有考虑到的一点是,在移动标记后,然后匹配另一个标记。或者,如果您有两个以上的重叠标记,除了一个之外的所有标记都会移动到同一个新位置。我也将“或相同”更改为“和相同”,因为该部分对我没有意义,假设您正在尝试调整它们以使它们不重叠。但当然可以轻易改变。我还改变了浮点等式以使用范围。
我认为这可以纠正这些问题:
while(checkifgotsameLatitude(response,lat,lng))
{
lat = lat+0.222;
response[i].latitude = lat;
}
function checkifgotsameLatitude(response , lator,lotor)
{
var a = 0;
for(var i=0;i<response.length;i++)
{
var latitusevalue = Math.abs(parseFloat(response[i].latitude) - lator) < 0.1;
var longitude = Math.abs(parseFloat(response[i].longititude) - lotor) < 0.1;
if(latitusevalue && longitude)
{
a++;
}
}
return a > 1;
}