鱼眼状投影


12

为了在海报上有效展示,我需要特殊的投影。我想以整个欧洲的背景来介绍研究区域(捷克共和国),以使捷克共和国占据中心区域最多的区域(例如70%),而欧洲其他地区则围绕着该区域,但荒唐可笑。也就是说,当像鱼眼镜头一样,当将它们靠近某个物体时,它们会像捷克眼镜那样对捷克共和国造成巨大的扭曲,并且与周围环境相比,它们会放大很多倍。

我可以在Quantum GIS中使用任何投影吗?欢迎使用EPSG或标准公式(可在QGIS中使用)。


1
您可以使用距离图或面积图制作。我不知道任何QGIS解决方案。如果您知道如何编程,也可以通过简单的自定义坐标转换来实现。 由于涉及到极大的失真,因此没有任何标准投影可以为您创建此类地图。
ub

1
可以做到这一点,但是您必须对此聪明一点。通过从投影坐标开始,然后以使用较小球体的投影取消投影,实际上可以使世界的一小部分看起来像是半球。用几乎适合该半球的任何投影来重新投影结果坐标就可以了。您不必自己编写任何坐标变换而获得的收益必须与(a)必须进行大量的反复试验和(b)对边缘周围的变形的控制最小化之间取得平衡。
ub

4
我会使用制图路线。易于实施的简单工具。只要为捷克代表创造价值即可。比欧洲其他地方大得多:scapetoad.choros.ch
HeikkiVesanto

1
如果您不受该地图中光栅的限制,那么肯定可以导出到SVG并使用Inkspace或其他矢量图形编辑器来制作放大镜效果。如果您使用向量,则不会有任何难看的像素问题。捷克共和国(+1):)
米罗(Miro)

1
这是CorelDraw的教程:youtube.com/watch ? v=YE9hu1g20Gc
Miro,

Answers:


6

虽然不是鱼眼,但您可以将这种样式的地图绘制为地图。

这样做的好处是可以使用现成的工具来完成这项工作,并且可以使用一组强大的数据集。

只是使捷克共和国的价值比欧洲其他国家大得多,并根据需要调整价值即可。

一个很好的工具是: ScapeToad

在此处输入图片说明


感谢Vesanto,这正是我所需要的!:-)易于使用的用户友好工具!我终于用了。对我来说,这看起来非常像鱼眼:-)
Tomas

唯一需要注意的是,它非常慢,因此我不得不选择最慢的设置,甚至手动降低网格单元的数量..但是看起来不错。我唯一遗憾的是,使用栅格很难做到这一点。
托马斯

2
您可以使用qgis简化几何形状,或者使用分辨率较低的shapefile(例如,来自Natural Earth的50m或110m)来加快处理速度
Steven Kay

8

您可以尝试Magnifying Glasshttp://www.csiss.org/map-projections/Azimuthal.html第32至36号上找到的Snyder 投影之一。

它们基于以下出版物:https : //pubs.er.usgs.gov/publication/70014498

我不确定公式是否包含在线资源。

海格斯特朗的对数图也可能满足您的需求:http ://www.ncgia.ucsb.edu/projects/tobler/Projections/sld105.htm

或平方根方位角投影:http : //www.ncgia.ucsb.edu/projects/tobler/Projections/sld109.htm

参考文献可以在http://www.cartoperspectives.org/index.php/journal/article/download/cp59-tobler/307和Frank Canters的“小比例尺地图投影设计”中找到(可从Google书籍中获得)。


谢谢安德烈!一切看起来都很有趣!但是如果没有公式或epsgs或任何其他简单的方法来使用它们,我将无法使用它:-(
Tomas

1
不会有EPSG代码(这些地图不会搜索任何油!),但是您可以查找出版物。
AndreJ

7

这是在Postgres / Postgis中完成的伪鱼眼。我使用QChainage插件在每个国家/地区边界上创建了1000个点。使用距离的对数将点围绕零岛(0,0)重新投影,但保留了方位角。

在此处输入图片说明

我使用Plat Caree使其变为圆形,因为wgs84给出了更椭圆的外观。

select
    st_asewkt(
        st_endpoint(
            st_scale(
                st_rotate(
                    st_makeline(
                        st_setsrid(st_makepoint(0,0),4326),
                        st_setsrid(st_makepoint(0,1),4326)
                    ),
                    st_azimuth(
                        st_setsrid(
                            st_makepoint(0,0),
                            4326
                        )
                        ,
                        ST_translate(geom,-15.0,-50.0)
                    ) 
                ),
                -(1.0+(7.0*log(ST_Distance(st_setsrid(st_makepoint(0,0),4326),ST_translate(geom,-15.0,-50.0))))),
                (1.0+(7.0*log(ST_Distance(st_setsrid(st_makepoint(0,0),4326),ST_translate(geom,-15.0,-50.0)))))

            )   
        )
    ) as pt

from
    qqq3lines

有趣,谢谢史蒂文!可以做得更多,以便捷克共和国比其他国家更大吗?
Tomas

@tomas是的...您需要调整我在st_scale()中使用的常量。尝试将1.0增大到2.0,并将7.0减小到更小的值。
史蒂文·凯

1

D3有一个鱼眼失真插件,我通过谷歌搜索“ svg fisheye transform”发现了它。它可能对您的情况有用。基本上,我建议您使用日益流行的D3.js库将一些shapefile转换为SVG(或GeoJSON?)来制作地图。

我的想法是,我知道可以将国家/地区边界几何图形转换为SVG向量类型,并且我怀疑作为SVG,可能会有更合适的方法来实现您想要的鱼眼变换。

我同意其他评论者的意见,认为插图/图形软件更适合您的情况,并且由于D3使用某些常见的数据格式(SVG和GeoJSON),因此它可以为您提供解决方案。


谢谢,但是D3是不是程序员,Web创建者的库吗?我可能需要一个程序,可以为我创建一张图片,而无需编程。
托马斯

@Tomas,很公平。但是,由于您的问题的标题为“鱼眼状投影”,因此它将在Google中为类似的查询提供强大的搜索排名,随着时间的推移,该排名可能会包括一些开发人员。最终,这个答案可能对其他人有用。
elrobis

0

我认为您需要极度扭曲才能使捷克共和国看起来像那样。在全景摄影中有时会使用一种相当流行的摄影“立体投影”技术来创建“地球世界”,如果将结果用作欧洲覆盖,则该技术可能会起作用。(不要认为这是一个答案,因为这纯粹是假设性的,我从来没有尝试过使用地图。)此外,这将更多地是图形/照片编辑项目,因为您可能必须拍摄打印的地图或将其导出从GIS中提取出高分辨率图像,然后围绕中心点(以中间有足够重叠的均匀区域为中心)复制并裁剪一系列图像,以便可以将其用作全景功能的输入。一旦有了“立体投影”

当然,您需要在Illustrator,Corel Draw中添加事实之后,或通过将最终图像作为光栅导入回GIS并创建一些图形/注释来添加标签。

Google在“立体投影全景图”中查看示例。

这是一个示例教程:http : //www.photographymad.com/pages/view/little-planet-photos-5-simple-steps-to-making-panorama-worlds

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.