2

我找到了所有国家边界的形状数据和一个处理它的类,我编写了一个脚本来将经度和纬度转换为图像上的像素位置,并使用imagefilledpolygon和绘制国家imageline。一切都很好,除了:

1)我有一个可以更改的 $scale 变量。在 $scale=1 时,图像为 360x180 像素(1 像素 = 1 度纬度/经度)。理想情况下,我想要的最终图像大约是 $scale = 2 (720x360),但是 1 像素厚的边界看起来很厚。所以我认为最好的解决方案是在 $scale=10 处生成地图,然后调整生成的图像的大小。问题是imagecopyresized调整大小时没有抗锯齿,它给我留下了一个非常锯齿状的图像,我该如何调整大小和抗锯齿?

2)生成一个国家的多边形的点数很多。计划是使用相同的代码来生成 HTML 图像地图,以将国家/地区变成链接。但是我担心目前图像地图的点太多(文件大小可能太大)。我最初的方法是跳过 x 点,这会带来一些成功,如果我处理 10 分中的 1 分,我大多会得到可接受的结果。理想情况下,我会更少……当我尝试 40 分之一时,我发现一些国家边界重叠并且国家之间存在一些差距(但一些更繁忙的海岸线看起来更好)。在保持合理准确度的同时减少点数的明智方法是什么?

如果有人感兴趣,我会发布代码(一旦完成。)

4

4 回答 4

2

对于曲线的简化/近似,请查看https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm

于 2009-12-12T22:04:01.047 回答
0

所以我没有任何代码,它只是你的第二个问题的一个想法。生成地图的类可以采用 x/y 坐标并确定您所在的国家/地区吗?

如果可以的话,您可以避免使用图像映射,而只需使用 javascript 来确定点击的 x/y 坐标是什么。将其解析为一个位置并像往常一样对其进行操作。当然,不利的一面是,如果关闭了 javascript,它将无法正常工作。

不过听起来很整洁。

于 2009-12-12T21:07:56.023 回答
0

解决了第一个问题:

imagecopyresampled 是我不需要 imagecopyresized 的功能

于 2009-12-12T21:19:34.867 回答
0

对于问题的第二部分,您需要做的不是每 10 个点使用一次,而只使用那些向地图添加内容的点。如果与最后一个渲染点的距离超过某个阈值距离,您可以尝试仅使用一个点。这意味着在更密集的区域你使用更少的点,但是当它们被隔开时,你可以根据需要使用尽可能多的点。

于 2009-12-12T21:25:53.330 回答