我有一个函数,它接受经度和纬度并将其转换为要绘制的 x 和 y。转换为 X 和 Y 工作正常,这不是我遇到的问题。
我想确保两个点不会绘制在同一个地方。在一组结果中,大约有 30 个彼此重叠(因为它们具有相同的纬度和经度),这个数字可能要大得多。
目前,我试图通过将点移动到点的左侧、右侧、顶部或底部来形成一个正方形来实现这一点。一旦绘制了由点组成的正方形,然后移动到下一行并在前一个正方形周围绘制另一个正方形的点。
代码是 Javascript,但它非常通用,所以我想它有点无关紧要。
我的代码如下:
var prevLong, prevLat, rand = 1, line = 1, spread = 8, i = 0;
function plot_points(long, lat){
// CODE HERE TO CONVERT long and lat into x and y
// System to not overlap the points
if((prevLat == lat) && (prevLong == long)) {
if(rand==1) {
x += spread*line;
} else if(rand==2) {
x -= spread*line;
} else if(rand==3) {
y += spread*line;
} else if(rand==4) {
y -= spread*line;
} else if(rand==5) {
x += spread*line;
y += spread*line;
} else if(rand==6) {
x -= spread*line;
y -= spread*line;
} else if(rand==7) {
x += spread*line;
y -= spread*line;
} else if(rand==8) {
x -= spread*line;
y += spread*line;
// x = double
} else if(rand==9) {
x += spread*line;
y += spread;
} else if(rand==10) {
x += spread;
y += spread*line;
} else if(rand==11) {
x -= spread*line;
y -= spread;
} else if(rand==12) {
x -= spread;
y -= spread*line;
} else if(rand==13) {
x += spread*line;
y -= spread;
} else if(rand==14) {
x += spread;
y -= spread*line;
} else if(rand==15) {
x += spread*line;
y -= spread;
} else if(rand==16) {
x += spread;
y -= spread*line;
} else if(rand==17) {
x -= spread*line;
y += spread;
} else if(rand==18) {
x -= spread;
y += spread*line;
} else if(rand==19) {
x -= spread*line;
y += spread;
} else if(rand==20) {
x -= spread;
y += spread*line;
}
if(rand == 20) {rand = 1; line++; } else { rand++; }
i++
} else {
line = 1;
i = 0;
}
prevLat = latitude;
prevLong = longitude;
return [x,y];
}
这是输出:
它工作不正常,我什至不知道我是否以正确的方式解决问题。
以前有人必须这样做吗?你会建议什么方法?