创建一个小的Web映射/地图平铺服务


26

我正在寻找一种小规模,简便的方法来在线显示一个或多个多边形shapefile(准确地说,是在没有任何现有地图服务器基础设施的市政网站上)。现在,我正在使用QGIS进行所有工作,我希望保留所有开源资源(没有预算可用于任何大型软件投资)。

研究这个话题导致了很多可行的方法,这让我很困惑。我正在寻找的是

  • 能够在专题图中显示分类的多边形(-如果可能,最好弹出窗口或能够检索属性信息-但这是高度可选的)
  • 我希望在QGIS中完成大多数工作(样式等)
  • OSM作为基本图会很好

到目前为止,OSM基本地图上的自定义地图图块看起来就像我正在寻找的东西(还是有更好的解决方案)?创建这些磁贴的最佳方法是什么?


2
它是否必须是基于栅格的(网络图块)解决方案?矢量解决方案可以吗?
Mapperz

一点都不。我只是认为这是最简单的方法(创建图块,创建index.htm或代码块以粘贴到现有网页中,复制到服务器目录中,完成)。之前我曾与GMapCreator一起进行过一个私人项目,这是完成工作的一种非常快捷的方法。
桑德卡

您的shapefile中有多少个多边形?如果它小于1000,也许@Mapperz在矢量解上的评论就是要走的路。最简单的解决方案是使用Google Maps API绘制多边形并创建信息弹出窗口-无需创建和存储非交互式平铺图像。地图的平铺图像最适合于高度密集的信息,例如显示卫星图像,道路或普查区域边界。
2011年

Answers:


13

对于从QGIS开始的简单方法,您可以使用QGIS Mapserver,它可以为使用常规QGIS界面设计的地图提供服务。另外,您可能想使用基于Java的GeoServer,它可能更易于安装。由于这两个程序都是从开放标准提供地图,因此如果您从一个开始,以后又需要切换,则无需更改客户端。

一旦建立了可以提供WMS地图的系统,便需要一个客户端前端。我建议使用OpenLayers,因为它非常容易上手并且易于扩展。它可以毫无问题地处理WMS,WMST和OSM磁贴。

最终,您可能需要移动到WMS图层的切片(例如,在合理的硬件上,每分钟开始收到50-100个以上的请求),然后您需要考虑将切片缓存放置在地图服务器的前面。如果您使用的是GeoServer,则可以使用内置的GeoWebCache或使用TileCache


我的问题是我目前正在市政当局内担任自由顾问。当地的IT员工头脑笨拙,并试图从他们的计算机中保留各种“可疑”开源材料(我为QGIS进行了长期的战斗)。因此,我真的很想避免任何需要作为“软件”安装在市政网络空间上的解决方案。
2011年

我梦dream以求的解决方案是我可以自己准备,然后将其复制到他们的网站空间,插入html / JS代码并完成。到底是栅格数据还是矢量数据并不真正重要。无论如何,我是唯一一个了解技术差异的人...其他所有人都关心的是,我们为公民提供了一个很好而又轻松的数据展示方式。
2011年

1
您只需要向他们解释,没有软件就无法轻松实现网络映射。当然,您可以在Web服务器上放置一些简单的磁贴,但是它在所有范围上看起来都不太好,当市长需要更多功能时,很难维护并且很难添加功能。
伊恩·特顿

因此,我研究了Geoserver(作为Open Geo Suite软件包的一部分),它看起来非常不错。我导入了shapefile,对其进行了样式设置,甚至在本地主机上运行了预览。但是,如何在我的网站空间上在线获取这些地图?我想念什么吗?书签等显然无法使用,因为它们是指我的本地硬盘驱动器。我一直在研究所有可能的教程以及操作方法,但是似乎从未讨论过该主题?有人可以指出我正确的方向吗?
2011年

您将GeoServer放在Web服务器上,然后将数据目录从本地计算机复制到远程计算机。
伊恩·特顿

8

能够在专题图中显示分类的多边形(-如果可能,最好弹出窗口或能够检索属性信息-但这是高度可选的)

我希望在QGIS中完成大多数工作(样式等)

OSM作为基本图会很好

所有这些都可以在QGIS和ogr2layers插件中完成。工作流程很简单:

  1. 在QGIS中设置数据样式。使用旧的符号系统,因为New Symbology使用ogr2layers插件时我遇到了问题。

  2. 启动ogr2layers插件并定义openlayers设置(例如地图大小,地图控件,底图等)。这将创建一个目录,其中包含index.html和并将数据层转换为geojson文件。

  3. 将目录上载到Web服务器。

请注意,这仅适用于简单的网络地图。要创建自定义底图和其他网络映射功能,请查看iant和Peter的答案。


1
简单的网络地图意味着它仍然可以缩放和滚动,是吗?听起来,当我回到办公室时应该考虑一下。
2011年


6

另一种选择是TileMill -它支持平铺,互动和制图在一个易于使用的基于Web的界面,其中包括一个名为原CSS语言风格定义cascadenik。使用TileMill,您可以启动mbtiles文件,这些文件可以与TileStream之类的东西一起使用。也就是说,部署映射输出仍然有一些技巧,但这将为您提供一个生成高质量图块的好平台。


在首页上观看他们的演示视频,这非常令人印象深刻!
joshdoe,2011年

6

我决定提供一些信息,说明我最终选择哪种方式来使用平铺的地图服务。纯JavaScript和GeoJSON不是解决方案,因为我必须处理大约40k多边形和33k点。所以我去铺瓷砖。哦,而且我仍然无权访问根服务器,因此我无法设置GeoServer或类似的设备(目前单个客户端在财务上不可行)

经过研究和阅读后,我终于选择了OpenLayers(在与GMaps进行了一些展示之后)。埃里克·哈扎德(Eric Hazzard)的出色著作《 OpenLayers 2.10》(Packt Publishing,2011年)确实对我有很大帮助,因为它还介绍了一些JavaScript基础知识和调试技巧。

我在QGIS中完成了所有矢量数据工作,当然,这绝对是像我这样的小型自由职业者的必经之路(我也从大学知道很多ArcGIS知识,但是QGIS到目前为止提供了我所需要的一切)。

样式化地图和创建图块是一个更大的挑战。首先,我使用了CASA的“ GMapCreator ”,但是对多个shapefile进行分层却被证明是乏味的(我必须在多边形上提供点数据,然后再封闭所有内容的市政边界线)。绝对可以在GMapsCreator中进行此操作(我在展示阶段做了此操作),但是它需要3个完整的渲染周期(首先创建图块,然后现有的图块被“覆盖”了以后的功能-以正确的顺序渲染)是非常重要的!),并且样式菜单略大且令人困惑。保存地图并在以后编辑它也是一个复杂的问题。

TileMill看起来非常有前途,尤其是类似CSS的样式,因此我对其进行了调查。不幸的是,它仅适用于Mac或Linux,因此可能会吓跑一些人。我真的很喜欢我所看到的,所以我在硬盘上设置了一个Ubuntu分区,下载并为其样式设置了地图。关于样式语法的文档有时会很少,但是观看他们的演示视频(在主站点上链接)几乎可以回答所有问题。可以使用嵌套和/或条件样式来做一些有趣的事情,并且对CSS的一些基本了解应该可以真正带您进入想要的地方。

最后,TileMill渲染一个漂亮的单个* .mbtiles文件。我认为没有办法在OpenLayers中直接显示这些内容(至少我找不到一个?),所以该使用另一个工具mbutil了。该工具将mbtiles文件“解压缩”到常规文件夹结构中,该结构包含选定缩放级别上我的数据的平铺png。

最后,我将所有这些文件上传到FTP服务器,在OL上进行了大量阅读,以使Webmap正常运行(您将创建的图块添加为TMS图层,但是猜测正确的源URL和图层名称花费了一些时间,谷歌搜索),然后花了几个小时摆弄基本的html / CSS问题。我想要一个100%宽/高的地图,上面有一个浮动的图例,该图例遵循我的客户“公司”(如上所述,是直辖市)的身份准则。

哦,到目前为止,我使用Google Maps作为基本图层,但是可能很快就会被通过WMS提供的一些自定义航拍照片所取代(不是由我提供,而是由州政府的测量和地理数据管理提供)。

我希望我不会忘记任何重要的事情,但是如果我忘记了,请随时提出!我会偶尔检查该线程。


Tilemill现在也可用于Windows。Openlayers用户邮件列表中还有一个相对较新的主题,涉及使用mbtiles作为数据源(尚未尝试)。
马特·威尔基

啊,谢谢,很高兴知道。绝对必须尝试一下,一直在win7和ubuntu之间切换有点烦人。
SAnderka'3

3

如果您有1000个以下的多边形,请考虑@Mapperz关于矢量解决方案的注释- 如果只有几个多边形,则无需创建和存储非交互式平铺图像。

平铺图像最适合用于高密度信息,例如显示卫星图像,道路或50,000个人口普查区域多边形。

少数多边形的最简单解决方案是将shapefile转换为KML,然后将其上传到Google我的地图。

如果您使用Javascript编码,则最具交互性的解决方案是Google Maps API(或OpenLayers)来绘制多边形并创建信息弹出窗口。您可以先使用GDAL库将shapefile多边形转换为geoJSON文件(一种存储地理信息的Java方式)。

或者,如果您沿着瓷砖路线走,则可以将瓷砖存储在亚马逊或Google的云上而不会产生内部麻烦。

该主题映射博客条目很好地总结了矢量方法相对于您要考虑的切片方法的优势。

祝好运!


我发现,在单个视图上将大约500个点视为向量会趋于缓慢。我们会将所有超过500点的内容平铺。
Michalis Avraam 2013年

1

我感到很高兴,因为我一直在慢慢地努力得出同样的结论。学习了QGIS之后,我尝试了Quantamnik和Mapnik。但是,尽管它将单向地移植qgis样式,并且样式系统1对1的价格也不是,因此无论如何您都必须学习mapnik样式。我猜想这也适用于qgis mapserver导出功能。似乎没有“简单的方法”可以在mapserver上进行升级,只是了一下并留出了很多时间。

Mapnik,geoserver,mapserver,似乎每个都有奉献者,但mapserver似乎是中间道路。

话虽如此,我发现了一个快捷方式,即qgis有一个命令行选项,可以将qgis映射栅格化到您选择的分辨率和范围,并创建一个worldfile。这样,您可以使用maptiler或gdal2tiles一次平铺一层。显然对于20个缩放级别没有好处,我也不知道最大png大小限制是多少。


2
QGIS MapServer与MapServer不同。
伊恩·透顿

2
由于存在混淆的可能性,因此应将其称为QGIS Server。
昏暗
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.