问题标签 [web-feature-service]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
leaflet - 实施传单绘制时我做错了什么。在这个具体示例中如何使用 WFST?
我是地理信息开发领域的新手。我遵循以下管道架构流程来实现基于 GIS 的应用程序问题。
PostGIS - 地理服务器 - 传单
我已经设置了我的传单客户端应用程序,它将图块组合到地图上。我还使用了一些传单插件(如 Draw、zoom),以便为用户提供在地图上进行标记和绘制的选项。
我能够绘制并获取所绘制多边形的 GeoJSON 特征,如下所示:
在弄清楚我需要如何发送绘制的多边形请求并以编程方式检索多边形(已保存)的这一部分之后,我陷入了困境。我知道答案是 WFS-T,但是如何在我的原始代码中使用它。这是原始代码示例:
原始代码链接:https ://pastebin.com/wCAHxVc0Follow the link
参考:
openlayers - OpenLayers 5 会加载 WFS 功能,但不会在地图中添加和显示它们
这实际上应该很容易,但是我在这里被困了两天,仍然找不到为什么 OpenLayers 没有按照我对 API 的预期执行的原因。
我想加载一个 WFS 图层并在我的地图中显示。功能可以在这里看到:http ://www.pegelonline.wsv.de/webservices/gis/aktuell/wfs?service=WFS&request=GetCapabilities
在完成 Capabilities 之后,我开始构建我的 VectorLayer。我从 Openlayers API 中了解到有两种加载功能的方法:一种是使用format和url,另一种是使用loader。
由于format + url的方式看起来很简单,所以我决定使用它。我根据从功能中获得的内容创建了 URL:http ://www.pegelonline.wsv.de/webservices/gis/aktuell/wfs?service=WFS&version=1.1.0&request=GetFeature&typeName=gk:waterlevels&outputFormat=GML3
如您所见,GML3 格式的所有 530 个特征都可以通过此 URL 加载,因此到此阶段为止都没有问题。
我开始编写 OpenLayers 5 代码:
我已经完成了所有的导入,但只是没有在这里显示以节省空间。第一个想法实际上是风格似乎不太好。但是在我检查图层后,layer.getSource().getFeatures()
我发现 Vectorlayer 中有 0 个特征。
但在网络分析中,我可以看到成功加载了 530 个特征的 GML 文件。所以我现在有点困惑。
如果有人能指出我在这里可能做错了哪一步,我将不胜感激。我已经多次检查了导入、WFS 功能,并且还多次更改了样式。我什至尝试过loader,但到目前为止没有任何效果。
gis - 在 onclick 客户端事件上从服务器运行 GDAL/OGR 函数
这个问题来自我对 GDAL/OGR 应该如何在服务器端工作的理解不足,但在尝试之前,我想知道我想要的内容是否适用于这个库。
基本上,我正在开发一个 webGIS 应用程序,用户应该在其中与 WFS 交互。我想让用户可以从这个 WFS 下载数据作为服务器不提供输出的格式,所以我需要先转换它。
我需要带有 WFS 驱动程序的函数 ogr2ogr才能将服务器的 GML 响应转换为(例如)Shapefile 格式。
我非常基本的问题是:当用户单击(例如)“下载”按钮时,如何调用安装在我的服务器上的 ogr2ogr?
我的想法很明显是将 onclick 事件与调用 ogr2ogr 的 JS 函数联系起来,但是在这里我缺乏服务器端 Web 开发知识并不能让我继续下去。
我应该准备一个内部调用 ogr2ogr 的脚本(如 PHP),还是应该将 GDAL/OGR 可执行文件放在 cgi-bin 文件夹中,以便我可以使用所需的参数指向和调用它们?
openlayers - 在 OpenLayers 手绘边界框中显示 WFS 返回的特征
我允许用户绘制特征,并且在 drawend 上我需要向我的 WFS 服务发出请求以返回特征。
我可以让 WFS 根据使用范围返回数据:
但是,尽管将此源注入图层并将图层注入地图,但我无法显示这些功能。
我可以使用以下方式显示所有功能:
但是,我一生无法弄清楚如何将此请求中请求的数据限制在四个坐标的边界框中。
潜在地,这可能是一个无限的指向几何图形,它将充当显示数据的千篇一律的工具。
我的搜索没有结果。
gis - 如何在 QGIS Server 中显示图层组
我想用 QQgis 服务器显示图层,但组图层没有显示,而是从服务器收到错误的请求响应:
这是 Qgis 中的 layer 部分:
postgresql - 带有大表的 Geoserver WFS + PostgreSQL 速度极慢
我有一个包含 950 万行的点位置的 PostgreSQL 表。我正在尝试运行此查询:
/geoserver/workspace/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=workspace:layer&maxFeatures=50&outputFormat=application/json
但需要几分钟才能响应。
当我查看地理服务器日志时,我看到:
在这一点上,它会停顿很多分钟。
当我查看我的 PostgreSQL 服务器的当前活动查询时,我看到:
SELECT count(*) FROM "public"."layer"
此查询本身需要335 秒才能返回响应。首先,wtf? 即使必须逐行计算,950 万行也不算多。有什么办法可以加快这个操作?
其次,它为什么要这样做SELECT count(*) FROM "public"."layer"
,有什么办法可以阻止它?我指定maxFeatures = 50,
了为什么要计算它们?
版本:x86_64-pc-linux-gnu 上的 PostgreSQL 11.2 (Debian 11.2-1.pgdg90+1),由 gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bi 编译
机器:n1-standard-2(2 个 vCPU,7.5 GB 内存)(来自 Google Cloud)
变量:
解释(分析、缓冲区、格式化文本):
索引:
编辑:看来是VACUUM ANALYZE
成功了。运行了 728 秒,但现在查询很快返回。我需要多久运行一次?
这是新的解释(分析、缓冲区、格式文本):
openlayers - 在客户端的 openlayers 中更新特征位置和方向的最佳方法是什么?
我有很多功能(数千个),其中一些(〜数百个)改变位置/方向/状态。所以我尝试用以下两种方式更新图层/地图:
我通过 setCoordinates 更新:(数据来自 socket.io)
feature.getGeometry().setCoordinates(ol.proj.transform([data.longitude, data.latitude], 'EPSG:4326', 'EPSG:3857'));
我创建了一个包含所有特征的全局数组,并设置了一个间隔(5 秒)并清除矢量源并再次从全局数组中添加特征。顺便说一下,我更新全局数组如下:
// 数据:这里是一个更新的特性。(位置、方向和自定义状态已更改)。
var index = globalFeaturesArray.findIndex(feature => feature.getId() == data.getId()); globalFeaturesArray[index] = 数据;// 在全局数组中设置了新特性
问题是,如果更新的功能太多,浏览器会在全局数组中找到它们并替换时冻结。随着更换,新的更新可能会一次又一次地出现(瓶颈)。第一种方式也一样。它还为每个功能更新重新计算集群。
如果他们不断获得更新,那么在 openlayers 地图中显示特征的最佳方式是什么?我阅读了有关 geoserver 和 WFS 的主题,但我不确定它是否适合我的情况?100x 功能可能会改变位置,而 900x 功能支架所以 wfs 服务器会一次又一次地向我发送 1k 功能?这可能会在地理服务器和客户端之间发生巨大而无用的流量吗?
希望有更好的方法来实时解决这个问题!
java - 无法使用 geoTools 获取 FeaturesCollection 中的内容
我正在使用 geoTools 库。我的目标是从 geoServer 返回功能。我已正确连接到 dataStore,但我无法接收集合功能的内容。
当我尝试:
在调试我的代码时,collectionFeature
containscashedSize = -1
和typeContent
contains 的响应是更正的propertyNames
,但没有特征数据。
我认为问题出在依赖项中,但我无法解决。
这是我的代码:
还有我的 POM.xml:
谢谢
javascript - 如何使用 OpenLayer 和 WFS 过滤特征?
我能够从 geojson 文件(从 GeoServer WFS 图层类型生成)中提取数据并使用 OpenLayer 在浏览器上显示它。但是当我只想显示具有某些功能(即过滤)的数据时,我遇到了问题。
我的 JSON 文件名 -> gpr.geojson
GeoServer 层名 -> 可视化:GPR
属性过滤器 -> branchCode = N01821 和 routeCode = 0650
我遵循了来自https://www.giserdqy.com/wp-content/guids/ol-v4.6.5/examples/vector-wfs-getfeature.html的过滤教程,我也尝试过使用CQL_FILTER
但没有运气
下面是我的代码,过滤不起作用
使用 Leaflet、WMS 和 CQL 过滤器非常简单,如下所示。如何使用 OpenLayer 和 WFS 做到这一点?