1

我有一个使用维基百科灰色地图的各种成员的项目:http://en.wikipedia.org/wiki/Wikipedia: Blank_maps。我根据用户通过单击形状或选中复选框选择的国家、州或省为它们填充颜色。

我想编写一个脚本,通过以某种方式获取一个国家、州或省边界的 X 和 Y 像素位置,自动创建每个国家、州或省的图像地图,尽管没有这些实体的名称,我将填写之后。我已经手工完成了世界地图,找到了一个开源的美国地图图像地图演示。我现在想更快地创建我的地图。

我使用 PHP 和 GD 来填充形状,所以我想我也可以使用形状的一个中心像素位置。有什么建议么?这个脚本是一种可能性,但仍然有点手动:http ://abhinavsingh.com/blog/2009/03/using-image-maps-in-javascript-a-demo-application/ 。Mapedit,http://www.boutell.com/mapedit/,有一个魔杖功能,效果很好,但我再次感觉这可以自动完成。

4

3 回答 3

1

这个问题的一个几乎完美的解决方案是使用 SVG 图像和 svg 代码到 imagmap 区域标签的翻译器:http ://www.electricfairground.com/polygonator/ 。结果是一个合适的图像映射,虽然 svg 图像可能需要调整大小,并且国家或省份似乎都被偏移并且偶尔会混乱。因此,这需要在允许您移动图像映射元素的所见即所得编辑器中打开使用 SVG 图像或导出的 SVG 文件的 PNG 副本生成的页面。

我试图弄清楚偏移的模式是什么,如果我这样做了,我会把它贴在这里:http ://wherehaveibeen.info/images/polye.html 。“Polygonator”的作者向我介绍了他的服务并使用了他的文章中的 svg 地图图像:http ://www.electricfairground.com/2009/08/08/image-map-rollover-effects-using-jquerys- maphilight 插件/ . 他在那里提倡通过 Inkscape 将 png 图像跟踪为 svg 图像。但是既然 Wikipedia 已经有了 SVG 格式的地图,为什么不直接看代码呢?事实证明,svg 文件基本上已经分离了多边形并指定了边界区域,至少在维基百科灰色地图http://en.wikipedia.org/wiki/Wikipedia:Blank_maps中,他们只需要使用多边形。

我发现如果我在 Notepad++ 中打开 SVG 代码,我可以复制并粘贴 SVG 文件的全部内容,多边形器将删除不需要的代码。之后需要对图像地图区域标签进行一些清理,但不多。最大的问题是所提到的生成的区域标签区域,并且在生成的代码中偶尔会混淆图像地图区域的重叠位置。

于 2010-07-27T20:23:03.043 回答
1

好吧,这里真正的答案似乎是 SVG 文件几乎已经是图像地图,并且可以经过温和处理以将它们转换为图像地图,而 Wikipedia 肯定有大量的 SVG 地图。

至少有三个项目试图做到这一点,目前只取得了一些成功。我现在对制作 SVG 文件处理在线图像映射器服务更感兴趣,因为它可能适用于该项目,而不仅仅是地图着色:

  • Polygonator - 在这里描述:http ://www.electricfairground.com/2009/08/08/image-map-rollover-effects-using-jquerys-maphilight-plugin/但实际服务在这里:http://www。 Electricfairground.com/polygonator/index.html - 是迄今为止我认为最简单、最好的服务或软件。您必须手动将 SVG XML 文本转储到输入字段中,但不管作者怎么说,我认为您可以将整个 SVG 文件转储到输入字段中,而不仅仅是“Mz 标签”。生成的区域标签需要编辑以删除没有坐标的空标签和只有两个点的多边形。

  • Inkscapemap - http://sourceforge.net/projects/inkscapemap/ - 阻塞复杂的 SVG 文件,例如带有阴影的文件。即使我遵循了关于使用我在清单文件中描述的 jar 文件的主类以及引用主 jar 文件和支持文件的建议,我也无法将其显示为 HTML 服务存档”属性。

  • http://davidlynch.org/blog/2008/03/creating-an-image-map-from-svg/ - 非常有趣的项目,有很多博客评论。图像地图也不是很完美,需要编辑。

于 2010-07-30T08:29:17.223 回答
0

我看到我可以使用 GD PHP 的 imagecolorat 并循环遍历所有像素以找到黑色的像素。这有效:

<?php
$im = ImageCreateFromPNG("india.png");
$width = imagesx($im);
$height = imagesy($im);
for ($cy=0;$cy<$height;$cy++) {
  echo '<p>';
  for ($cx=0;$cx<$width;$cx++) {
    $rgb = ImageColorAt($im, $cx, $cy);
    $col = imagecolorsforindex($im, $rgb); 
if ($col["red"] == 0 && $col["green"] == 0 && $col["blue"] ==0){
    echo $cx.", ".$cy." ";
  } else {echo "";}
}
}
?>

任何人都可以建议如何在巨大的多多边形复合体中找到多边形,该复合体是在印度的黑白 2 色地图上运行上述代码产生的,其中所有边界都是黑色的,各州内部和印度洋是白色的? ?

这是印度的图像:http ://wherehaveibeen.info/images/india.png以及现在需要拆分为单独多边形的图像地图坐标的混乱: http ://wherehaveibeen.info/images/black .php

于 2010-07-27T01:49:21.237 回答