2009-12-12 137 views
2

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

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

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

如果有人有兴趣,我会张贴代码(一旦它完成。)

+1

这不回答你的问题,但可能与图像玛姬,你会得到更好/更快的处理结果。 – AntonioCS 2009-12-12 22:22:14

回答

0

所以我没有这方面的任何代码,它更多的只是一个想法,为您的第二个问题。您的生成地图的课程能否采用x/y坐标并确定您所在的国家/地区?

如果可以,比你可以避免使用图像映射,并使用javascript来确定点击的x/y坐标是什么。解决这个问题到一个位置,并像平常一样对其进行处理。当然,这个问题的关键在于,如果关闭javascript,它将无法工作。

虽然听起来很整齐。

+0

这可以与ajax一起工作:将所有点存储在服务器上,然后当用户单击查询xy鼠标单击时......是的,我可以看到这个工作。问题是我想鼠标移动数据(国家名称)...我想如果有每个鼠标移动的ajax请求可能会有点沉重:) – Mark 2009-12-12 21:15:17

+0

是啊...绝对不是每个动作:) – raytiley 2009-12-12 21:22:41

0

解决的第一个:

imagecopyresampled是我需要的不是imagecopyresized

0

对于你的问题的第二部分的功能,你需要做的是不使用每10个点,但只使用那些什么在地图上添加一些东西。如果距离最后一个点的距离超过某个阈值,则只能使用点。这意味着你可以在更密集的区域使用更少的点数,但是当它们分开时,可以使用尽可能多的点数。

+0

你好,我是考虑到......我有一种感觉,我可能仍然会遇到同样的问题,它会在两个国家之间留下差距或导致重叠。我想在尝试中没有伤害。 – Mark 2009-12-12 21:35:28

+0

那么,如果你发现你得到太多或不足够的点,你可以通过改变阈值距离来调整结果。 – justinlatimer 2009-12-12 21:45:20