如何启动网络映射?


83

我想开始在工作时制作网络地图,以按城市绘制一些统计数据。

我有一个主意,但我不确定从哪里开始。

是否有确定的资源可以提供有关该操作的逐步指导?

Answers:


94

该问题已转换为“社区Wiki”,并且Wiki已锁定,因为它是一个问题的示例,它寻求答案列表,并且似乎很受欢迎,可以防止其被关闭。应该将其视为特殊情况,并且不应将其视为鼓励在此或任何Stack Exchange网站上使用的问题类型,但是,如果您希望向其中贡献更多内容,请随时通过编辑此答案来这样做。 。


您可以选择是否使用带地图服务器组件的解决方案。服务器解决方案当然支持更多数据和更复杂的应用程序。

如果您知道QGIS要创建一次性的数据可视化,我建议使用 QGIS2LeafExport to OpenLayers 3,它们都是QGIS的插件,可用于将图层导出到Web地图。更新(基于Tom Chadwin的评论):qgis2leaf和qgis-ol3现在已合并到qgis2web中

中间的一个选项是QGIS Cloud,它是托管的QGIS Server选项:您只需在本地准备项目,然后将其发布到Web上,即可在现成的查看器中找到它。他们有免费帐户,最多可以存储一定数据量。因此,如果这对您来说是一个问题,则不需要您自己的服务器。

如果要运行自己的开源服务器,则可以从去年的FOSS4G的Geoserver简介开始:http ://workshops.opengeo.org/geoserver-intro/ 。涉及的工具通常是Geoserver,PostGIS和OpenLayers。启动成本是您的工作时间加上托管费用。

在不知道用例的情况下很难估计部署时间。


7
qgis2leaf和“导出到OpenLayers 3”现在已合并到qgis2web中。
汤姆·查德温

关于qgis2web的要点。我是一个视频课程的作者,该课程从零开始讲授GIS以及如何使用qgis2web构建Web地图:udemy.com/gis-for-everyone/?
multigoodverse

为什么要通过GIS?他可以直接从数据库转到Leaflet。
Fjellrev

@Fjellrev怎么样?查询提取为GeoJSON?我认为这比使用GIS更难。
Tom Chadwin

您可以浏览GeoGATE 链接,GeoGATE与PostGIS和Geoserver很棒,并且包括数百种现成的工具,您可以通过用户友好的控制面板使用数据进行配置
Hani Draidi

41

宾夕法尼亚州立大学有一个Open Web Mapping类。足以教您Web映射的工作原理以及所涉及的技术。该类中使用的大多数工具(如果不是全部的话)都是免费的,因此您的成本不成问题。这是目录:

第0课:方向

第1课:开放式Web映射简介

第2课:Web地图服务器(WMS)

第3课:Web功能服务器(WFS)

第4课:可扩展标记语言(XML)

第5课:高级Web地图服务器

第6课:地理标记语言(GML)

第7课:再谈WFS

第8课:构建Web映射应用程序

第9课:构建瘦自定义Web映射客户端

玩得开心 :)


40

Google Fusion Tables在映射和空间查询方面看起来很有前途

优点:易于设置

缺点:您的所有数据都在Google服务器上(好还是坏?)

http://sites.google.com/site/fusiontablestalks/stories

在此处输入图片说明

注意:许多媒体/新闻公司都在使用它-英国《卫报》示例 http://www.guardian.co.uk/environment/datablog/interactive/2011/mar/07/carbon-emissions-public-buildings-map

现在有一个简洁的Fusion Wizard,可以帮助您更快地设置 http://gmaps-samples.googlecode.com/svn/trunk/fusiontables/fusiontableslayer_builder.html

例如:http//www.latimes.com/news/local/la-me-us-congress-census-map,0,4500533.htmlstory

最好的之一:http : //tinyurl.com/England-Deprivation-Mapped


1
Google Mymaps是否是Google Fusion Tables的实现?似乎是相似的,其中MyMaps是基于浏览器的,而Fusion Tables是基于服务器的。
sabre23t 16/09/21

40

那里有很多选择,而且已经有很多不错的答案。我尚未在此处列出的最喜欢的两个选择是CartoDBMapBox。两者都提供基于Web的托管和数据可视化以及一些非常精美的工具,价格从免费开始。

使用台式机软件来设置数据将使您受益。对于桌面部件,ArcMap和Quantum GIS都是不错的选择。

我要说的是MapBox的优势在于,它使用非常棒,易于使用的模板制作了精美的Web地图,并准备好了用户界面元素。MapBox需要一个名为TileMill(也是免费的)的桌面程序,该程序使用与CSS非常相似的样式界面。

CartoDB的优势在于它通过SQL API公开了PostGIS的根源

这两种都可以单独使用,也可以与其他javascript映射库(例如LeafletGoogle MapsOpenLayers)结合使用。

无论您决定开始使用哪种平台来进行Web映射,学习某些JavaScript无疑都会使您受益。 Codecademy是一个不错的起点(也是免费的!)。


2
为了使事情变得更加轻松,这里有“直接将ArcGIS和QGIS项目导入Tilemill的工具”
RyanDalton 2013年

2
理解MapBox和CartoDB的关键是价格(地图视图,数据量)以及要显示的数据量。CartoDB使较大的数据集更易于管理,而我建议将MapBox用于较小的项目。Leaflet是最简单的JavaScript映射库。
Zach

37

我还参加了一个会议,他们介绍了OpenGeo Suite,它是OpenLayers,GeoServer,GeoExt和PostGIS的堆栈。他们提供“企业版”(付费支持版本)或“ 社区版 ”(免费)版本。(更新)OpenGeo Suite现在是Boundless Suite。

会议上演示的另一个软件包是GeoMoose,它是MapServer和OpenLayers的堆栈。

您可能会考虑下载OSGEO Live DVD,可以在虚拟机环境中运行它,以防在测试时不想在计算机上安装很多东西。它预先打包了许多不同的开源GIS软件包,包括Web映射工具。


29

编辑

由于此问题和解答的受欢迎程度,由于过去几个月来提供程序和API的变化,我将在此帖子上添加一些内容的编辑。


API的选择与项目的范围和目的有关,更不用说您的预算,如果您实际上想使用某些特定功能。另一个主要警告是您的Web开发经验,以及您喜欢或感兴趣的语言。

我认为回答您问题的最好方法是为您提供一个不错的API清单。这是我想到的三个。这些绝不是全部!

的ArcGIS

蜜蜂:

优点:

缺点:

  • 价格(不是使用API​​的价格,而是更多价格,因此,如果您要发布自己的数据,请参见ArcGIS Online
  • 定制应用程序代码可能很麻烦

摘要:

ArcGIS为Web GIS产品提供了很多功能,并且有许多资源可以一路为您提供帮助。只是要知道在发布自己的数据时会遇到的潜在成本。

谷歌

蜜蜂:

  • 的JavaScript
  • 行动版(Android,iOS)

优点:

缺点:

摘要:

Google在市场上享有盛誉,并且拥有可靠的在线服务。只要确保了解其用法的来龙去脉,即可避免踩踏任何合法的脚趾。在这方面,新的“定价和计划”页面非常有用。

开源的

API(全部基于JavaScript):

优点:

缺点:

  • 官方支持不是众所周知,但所涉及的社区不仅有帮助(也许比商业GIS支持还要好)

摘要:

对于想要测试Web GIS的人们来说,开源确实是一个不错的选择。通过社区中每天进行的更改和增强,开源可以是满足您的地理空间需求的廉价方法。


就像我说的那样,这并不是您的全部选择,但是至少现在有一篇文章提供了您自己和其他人的链接,以熟悉Web GIS世界中的一些主要参与者。


好评论!您要更新吗?
Fjellrev

@Fjellrev-如果您有任何建议或可以就缺少的帖子提供一些指导,我当然可以更新该帖子。老实说,过去几年我主要专注于Esri技术,我什至不知道这个领域中发生的许多更新。最终,我仍然觉得上面的内容提到了该领域的重磅炸弹,并提供了每个链接的最新信息。同样,如果您有任何建议,我会很乐意添加它们,只要它们适合主题即可。
evv_gis

25

看来您已经在上述问题中获得了开源的答案。如果您的公司有预算,ESRI可能是一个很好的选择。需要说明的是,Web映射API本身可免费使用,但是后端ArcGIS Server和SDE会花费您钱。此外,将需要桌面软件来创建要在Web制图应用程序中使用的地图服务。如果您已经可以使用这些资源或可以购买它们,那么我绝对建议您研究一下ESRI解决方案。

这里的好处之一是您可以使用多种语言进行编码。有针对Flex和Silverlight的ESRI专用API:

Flex:http//help.arcgis.com/en/webapi/flex/index.html Silverlight:http//help.arcgis.com/en/webapi/silverlight/index.html

当前,似乎Web编程的趋势正在从需要插件的,特定于供应商的解决方案(上图)转向更加开放的源代码和基于标准的框架。ESRI对此使用了Javascript API:

Javascript:http//help.arcgis.com/en/webapi/javascript/arcgis/

如果您查看这些API网站,则说明文档非常好。此外,论坛还提供社区帮助以解决特定问题。通过ESRI的技术支持也非常好。因此,这取决于价格和资源,如果您已经拥有这些应用程序或有预算,那么这是一条绝妙的途径,如果没有上述开源解决方案值得研究的话。


4
自发布此答案以来,Esri已发布了ArcGIS Online,这可能消除了对本地ArcGIS Server和SDE的需求。有免费的开发人员计划可上手
Stephen Lead

20

如果您只是想为进行可行性研究以展示自己的老板而原型,这是我大约一年前要做的,那么对于后端,我建议您选择Geoserver,因为它的用户友好型Web界面,并得到了一些支持简单的shapefile。对于前端,OpenLayers是一个绝佳的选择,网站上有很多示例。无论如何,我都不是网络程序员,但我发现复制/粘贴/调整javascript示例变得轻而易举。我使用UbuntuGIS存储库中的软件包,将所有这些都放置在VirtualBox VM中,以将其放置在一个地方,而不会破坏我的常规开发环境。

对于生产来说,有很多东西要取决于您的用例。对我来说,我最终选择了Mapserver,因为它不像Geoserver那样肿,它在lighttpd Web服务器上像快速cgi进程一样运行。我们需要WFS-T(Geoserver开箱即用),但Mapserver不需要,因此我们使用了tinyows。我们还提供Mapserver支持的coverage(WCS),并且正在考虑将Rasdaman集成为其WCS-T支持。所有这些都由PostGIS数据库支持。

我建议将您的应用程序分解为后端,中端和前端,并阅读每个软件的优缺点。每层可能只有少数解决方案,但是组合起来会增加。

我相信ESRI可以使产品具备上述所有功能,但这会带来成本。如果您的时间不多,那么商业路线可能是正确的选择,但是开源路线正在朝着非常令人兴奋的方向发展,我怀疑最终将超过ESRI可以提供的一切。但是后来我成为有偏见的自由开放源码软件迷


2
看一看P.Mapper(pmapper.net)和GeoMoose(geomoose.org),它们非常“容易”设置自己的数据,您可以在装有MS4W的Windows机器上进行设置,然后随着进度的进行,您可以转向Linux设置。我对p.mapper的初始步骤进行了概述,以防您感兴趣。
jdeltoro1973

18

您可以查看MangoMap www.mangomap.com

您应该能够使用可用工具创建所需的地图。

它是托管且免费的,因此只需很少的时间和精力即可进行部署。


14

对于您建议的功能,我将看一下满足您需求的最直接,最容易安装的堆栈。软件说“您可以快速,强大或廉价。选择两个。” 绝对适用于这里。

如果您仅打算进行简单的查询(例如识别功能),则PostGIS的功能可能会过大。将shapefile作为数据存储直接上传到GeoServer更加简单。

OpenLayers再次很棒,并具有很多功能,例如支持WGS84和Web Mercator以外的坐标系,但是如果您不打算使用该功能,那么我来看一下Leaflet,根据我的经验,它的功能要少得多面向新用户的陡峭学习曲线。

另外,如果您没有要求将应用程序托管在自己的服务器上的要求,则可以查看一些托管选项,因为从投资之初您将获得更多回报。使用MangoMapGeoCommons,您最终可能会为用户获得一张优质的地图,而无需编写任何代码。

如果这是您要编写一些代码的项目,那么您也可以看看CartoDBMapBox。如果您想了解所有这些托管平台的更多信息,就该主题写了一本免费的电子书,其中提供了选择一个主题所需的所有详细信息。

披露:我是MangoMap的创始人


您的免费电子书链接已损坏,因为Domaine nae正在出售。您可以编辑它并更改与保管箱或其他网站的链接吗?
GeoStoneMarten

13

开发网络地图时,有很多地方可以开始。

如果您有作为Web开发人员的经验,则应先研究各种可用的服务,这些服务可以使您在Web上发布地图。在此站点上还有其他 问题可以回答,这些问题将为您提供有关可用平台之间差异的宝贵见解。

如果您是从头开始但又不想使用特定平台,请解决您的业务需求。您将如何在地图上绘制数据?数据将如何更新?谁将使用这个网站?他们将如何处理?尽早做出这些决定将帮助您组装各个部分,或做出有助于实现目标扩展的选择。

至于成本……我更喜欢借用现代谚语:“好,快,便宜。选两个。” 它的正式定义为“ 项目管理三角”,它描述了成本,进度和范围之间的平衡,以带来质量。


12

在数据库方面工作了很多年之后,我最近也开始了Web映射之旅。

真正帮助我学习基本的编程原理,使用MapBasic for MapInfo(或者我假设esri人群使用Python)确实帮助我了解了计算机如何“思考”。

从那里,CodeAcademy真是天赐之物。这是学习编程的一种非常有趣且直观的方式。它可以带您从“ Hello World”示例到完整的功能和交互式程序。学习曲线是循序渐进的,并且了解到有些人对此有天赋,而其他人(例如我)却没有。

第二条建议是安装GeoServer并查看演示请求,以了解Web服务的结构和工作方式。查看图层预览,以了解Javascript和HTML如何协同工作。您可以从字面上复制该“图层预览”代码(查看页面源代码),将其保存在某个位置并开始修补。

W3学校 -具有交互式示例,您可以使用它们并适应您刚刚起步的代码。如果您决定使用JavaScript,JS Fiddle也非常不错。



9

您可以将OpenLayers用于客户端。它稳定,简单,并且有大量的示例说明了如何使用WFS(在您的情况下连接到PostgreSQL)等。对于Geoserver,OSM将此用于呈现目的。

您也可以看看GeoExt,它提供了用于构建地图的extJS小部件。geoext再次使用OpenLayers进行地图渲染。

还有基于PHP的框架,该框架使用MapServer(OpenLayers已经支持),如GeoMooseCartoWeb等。

我投票支持OpenLayers,因为您可以决定整个Web页面的设计,而与运行具有默认模板的MapScript绑定的php框架不同,我发现管理如此大的代码库并不容易。


8

html,css和javascript是大多数任何Web开发(包括Web映射)所需的三项技能。学习这些语言的资源足够。GIS Stack交换问题“ 如何开始Web映射?”中相当详细地介绍了从何处开始学习如何开发Web地图应用程序的主题

如果您的编程经验有限,那么开发Web地图应用程序的一种资源是mapbox。您可以无需任何编码即可生成网络地图,尽管我认为如果不使用javascript或python这样的脚本语言,就很难生成与示例中所用的网络地图一样复杂和交互式的网络地图。


7

我使用leafletjs,我认为这非常简单。它基于javascript,可以使用各种数据源绘制要素。基本上,您将地图代码插入.html文件中,然后查看该文件。我无法评论其他API,但我认为Google和Openlayers一样简单。

此外,有些服务(例如MapBox)不需要您托管html文件,而只需将数据上传到其中即可。


6

我认为使用qgis + qgis2leaflet插件的最简单方法。您可以在qgis中编辑任何内容,而不是导出到传单并上传到Web服务器。或者,如果您选择比以下更有趣的方式:

  1. 桌面gis:qgis
  2. 数据库管理员:navicat
  3. 网络服务器:基本VPS
  4. webgis软件包:boundlessgeo地理服(包含:postgresql / postgis,geoserver和geoexplorer)

我将使用传单javascript,而不是geoexplorer,因为它看起来更好并且运行更顺畅...但是要花一些时间将一些代码复制/粘贴在一起。这是一个示例:http : //gis.xyz


5

需要注意的重要一点是,Web-Gis是一个广阔的领域,并且已经在多个项目和库上完成了大量工作以帮助实现这一目标。因此,我们需要查看是否有可以重用的内容,而不是从头开始。

坏消息是,在php中没有流行的用于网络映射的库/应用程序。好消息是您可能不需要一个。

我建议您首先尝试了解WebMapping,并了解已经存在的项目和库。为此,您可以参考以下问题:

一旦了解了可用的选项,就应该澄清您的要求。查看您的问题,您有非常基本的要求:在地图上显示宗地允许查询,获取宗地的属性并将其显示给用户,无论是查询结果还是当用户单击时。

使用Google Maps可以进行这种工作,但是我不建议这样做,因为当您有大量数据时,使用Google Maps API会很麻烦。

相反,我建议您使用Geoserver / OpenLayers解决方案,前提是您可以使用JavaScript。如果您的数据全部在功能的属性中,则您甚至不需要任何php代码。


我对JQuery和其他Jscript库很满意,之前也接触过ExtJS。一个问题,如何在地图上绘制我的区域以及如何将其导出到数据库?我是否需要完全依赖于地图所包含的内容,或者它可以让我在其上绘制?如何实现的?
丘吉尔

如果您的宗地数据可能是shapefile或其他格式的文件,则可以将其显示为wms图层,位于Google Maps /其他基础地图之上。该WMS层可以由Geoserver / mapserver提供服务。此外,您始终可以使用Vector图层绘制新要素。
Devdatta Tengshe

5

Leaflet是OpenLayers的一个不错的替代方案,它是流行的用于Web映射的大型javascript库。

我将Leaflet与GeoServer结合使用来制作一些精美的地图,包括一些交互性。它确实需要自定义编码,但数量不多,并且比OpenLayers易于使用。


5

在决定Leaflet和OpenLayers之前,可能值得看一下即将发布的版本,该版本有望清理API和提供更好的文档:

OpenLayers 3是对该库的全面重写,以HTML5和CSS3中的最新功能为目标。该库将继续为OpenLayers 2.x的投影,标准协议和编辑功能提供广泛的支持。该库的新版本将着重于性能改进,更轻便的构建,更漂亮的视觉组件,改进的API等。一些主要的亮点是:

------8 <------- 

新的代码库:这提供了清理OpenLayers中某些“笨拙”的工作方式的机会。该团队还将使用新的API设计进行创建,这将使所有人都可以使用。

高品质的文档:新版本还将在OpenLayers 3.0中提供文档,其中包含新鲜的示例和默认设计。使工具包脱颖而出的意义远不止实际代码。

http://openlayers.org/


5

我将从Google Maps API开始。它的自由和易于使用。它使用Javascript,可以通过许多好的资源来学习。如果您不熟悉 JS,我会推荐Codecademy

那里有许多免费的数据源,可以通过多种方式(KML,数据库,GeoRSS等)将其合并到Google Maps中。大多数州和许多大学都有免费的数据存储,可以将其合并到您的地图中。

我最喜欢的Google Maps示例网站之一是Google Maps Mania。有很棒的地图示例,展示了此API的功能。


5

GeoPHP可能值得一看。

GeoPHP是用于执行几何运算的开源本机PHP库。它完全用PHP编写,因此可以在共享主机上运行。它可以读写各种格式:WKT(包括EWKT),WKB(包括EWKB),GeoJSON,KML,GPX,GeoRSS。它适用于所有简单特征几何体(点,线串,多边形,GeometryCollection等),并可用于获取形心,边界框,面积以及各种其他有用的信息。

而且,您可以通过GEOS扩展(假设您具有安装GEOS的管理员权限)来解决这个问题。

使用GEOS,您可以获得PHP,Union,IsWithin,Touches等完整的openGIS功能。这意味着应用程序可以获得在所有环境中均可使用的有用的几何运算“核心集”,以及可扩展的“扩展集”。安装了GEOS的环境中进行操作。


4

好吧,自定义PHP脚本可能是一个更强大(更简单)的解决方案。毕竟,空间数据只是数据库中的行,可以像往常一样查询它们。无需繁琐的服务器GIS软件和/或可怕的OGC过滤器语法。如果您愿意,我会将数据存储在具有PostGIS扩展名的PostgreSQL数据库中,编写PHP后端以查询数据库并检索GeoJSON格式的数据(请参见本要点),以及一个基于Web的前端Web应用程序。 OpenLayers-比Google Maps API更加灵活,但是如果您愿意,您仍然可以使用Google基本地图。


尽管此方法行之有效,但它会变得笨拙且繁琐,并带有大量数据(如县/区的包裹)。
Devdatta Tengshe


2

好了,您可以使用几个映射库。

第一个(可能是最著名的)是Google Maps API,但是我认为如果您对Web映射比较陌生,这可能会非常复杂。

我建议看一看Leaflet.jsMapbox.js。Mapbox.js是在考虑Leaflet的情况下构建的,并且Mapbox提供了一些出色的教程,介绍了您可以使用Mapbox.js完成的各种任务。Leaflet也有一些示例和资源

以下是示例的具体链接,这些示例应有助于您朝正确的方向发展。




-3

您可以使用UMN Map Server。在这里,您可以使用PHP脚本(称为地图脚本)。这是基于Apache服务器的。如果您想要一个数据库,则可以使用具有空间扩展的MySQL或具有postGIS的PostgreSQL ...

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.