首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择WebGIS全栈体系结构

选择WebGIS全栈体系结构
EN

Software Recommendation用户
提问于 2020-05-29 08:01:27
回答 2查看 91关注 0票数 3

我需要构建一个WebGIS服务。我在Linux平台上工作,使用开源软件。

我现在有一些地理信息系统的经验(PostGIS,QGIS),但是GIS发布对我来说还是新的,尽管我以前对非GIS服务器(Apache/Tomcat,html / Java / MySQL)有过一些经验。

WebGIS完整堆栈的各个组件的角色对我来说仍然不太清楚,我仍然在寻找解释它的好的web资源。

这个维基百科图仍然是我至今发现的最好的解释。到目前为止,据我了解,WebGIS堆栈的各个组件的角色如下:

  • 数据库保存数据(也可以只是文件:.shp、.geojson、.gml、.kml、.)
  • 应用服务器,也称为web框架,在Python或Java等编程语言中,提供诸如模板之类的服务,以便动态修改网页内容。这包括用户控件。例如: Django,Rails。
  • HTTP服务器(Apache,Nginx .)响应用户的HTTP请求,为网页项目提供服务: HTML、CSS、图像等。这些项要么是静态的,要么是动态的,在这种情况下,它们是由应用服务器提供给web服务器的。
  • 客户端库(OpenLayers,传单,.)使用HTTP服务器发送的数据在web浏览器中显示地图的实际工作。

但是现在,GeoServer在这里面适合什么地方呢?它到底是做什么的?我相信它将地理信息系统数据转换成适合于网络发布的其他格式(WMS / WFS /等等)。但是如何与数据库、应用服务器、HTTP服务器和客户端库集成呢?

MapServer和QGIS扮演着与GeoServer相同的角色吗?所以我猜你会选择一个还是另一个?

选择我的组件:

我必须在web上发布的GIS数据首先是在一个现有的离线服务器上准备的,它使用Postgreql/PostGIS数据库进行处理(大量的GIS计算)。一旦它准备好了,它就可以被提取、传输和加载到另一台服务器上,负责网络发布。

我现在需要设置的是这个web服务器。我有一个单一的地图,有一个单一的层,有大约200000个特征,它可能会在未来扩大到100万。

该网站应具有某些关键功能:

  • 强大的用户控制:用户必须注册和认证。此外,必须记录它们的操作。我们还需要一个控制,地理信息系统的数据用户可以访问和记录它。
  • 用户必须能够对地图中显示的特征进行用户筛选。数据库已经设计成可以轻松地执行与不同可能的筛选器相对应的高效SQL查询。
  • 每个功能必须链接到特定的web内容(即:用户必须能够打开显示每个功能的详细内容的页面)。

到目前为止,我一直在使用以下组件,并做出了以下选择:

  • web服务器的数据存储是Postgresql/PostGIS数据库。这似乎是一个明显的最佳选择。
  • ETL是一个Python批处理系统。它使用来自应用服务器(Django)的ORM来输入web服务器数据库。
  • 应用服务器是Django。我已经为网站的管理部分设置了GeoDjango和传单,它运行良好,但这只是因为,在管理端,我只需要在地图上显示一个单一的功能。我试图通过同时提供GeoJson中所有的200000个特性来使用传单,这证明了它不是一个可行的解决方案(真的,非常慢;几乎崩溃了)。
  • GIS数据应该更好地作为WMS (或WMTS ?)而不是WFS,因为关注控制和记录用户看到和访问什么?

请注意,如果我确信这是正确的选择,我可能会将这些组件中的一个更改为其他组件,但这将意味着放弃几周的工作,所以我更愿意保留它们。

我的理解是,我现在必须:

  • 添加一个像GeoServer / QGIS / MapServer这样的组件,但是我不知道哪个组件。
  • 使此组件与应用程序服务器一起工作(如前面所述,用于用户控制)。
  • 还可以选择一个HTTP服务器和一个lient端库,并让它们与之协同工作。
EN

回答 2

Software Recommendation用户

发布于 2020-06-29 16:11:16

最后,我做的是:

  • 设置WMS服务器(QGIS服务器)。
  • 使用客户端的传单在浏览器中显示地图(WMS覆盖层和背景层- Google,OpenStreetMap)。
  • 使用Django作为WMS服务器的代理:因此,传单中的查询将发送给Django服务器,Django服务器在将查询发送到WMS服务器之前进行用户身份验证和权限控制,否则客户端将不可见。
票数 2
EN

Software Recommendation用户

发布于 2020-09-11 04:15:40

嗯看起来不错。Geoserver可能比QGIS服务器更加成熟,可能会给您提供更强的扩展/负载平衡等方面的健壮性和灵活性。但是我还没有在规模上实现QGIS,所以我的观点有点推测。

传单也是一个很好的客户端工具,是我的首选,而不是Openlayers,或者其他。不过,再说一遍--这只是个人喜好而已!

WMS本质上提供了简单的地图和单功能查询功能.WFS将为您提供编辑/多记录查询等,StackExchange文章 -他们也使用您的相同的图表!

关于您的关系图,它建议所有对数据存储的访问都必须通过“中间件”进行。这不一定总是100%的真实或要求。另一种架构方法是通过直接访问数据库实现客户端映射。这里有一篇好文章,客户端映射

我看到了使用略有不同的编程语言的类似方法,其中SQL请求是使用python发出的,而python是通过javascript (与您的Leaflet.js很好地结合在一起)公开的。干净的东西啊!

或者,为什么不两者兼得呢!您可以将上面提到的方法与Geoserver实现结合起来。Geoserver可以处理简单的WMS和地图,而嵌入式可以处理复杂的客户端数据库查询(比如搜索或数据编辑)。就我个人而言,通过特性服务--尤其是大型数据编辑--来处理数据事务充满了问题。

当然,所有这些都取决于您的业务需求。

票数 0
EN
页面原文内容由Software Recommendation提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwarerecs.stackexchange.com/questions/74758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档