- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
看完很好tutorial on how to edit WFS with OpenLayers ,我尝试过复制它,但使用我自己的来自 Geoserver 的 WFS 层。需要一些 Javascript 帮助找出问题所在。
我成功加载了 WFS 和 basemap ,并成功显示了按钮。按钮正确显示,如 working example from that page但是,由于某种原因,几何数据没有被保存。每次用户绘制东西时,都会在表上创建一个新的 id,但其关联的几何列留空
发帖位是:
var formatWFS = new ol.format.WFS();
var formatGML = new ol.format.GML({
featureNS: 'http://geoserver.org/bftchamber',
featureType: 'bft',
srsName: 'EPSG:27700'
});
var transactWFS = function(p,f) {
switch(p) {
case 'insert':
node = formatWFS.writeTransaction([f],null,null,formatGML);
break;
case 'update':
node = formatWFS.writeTransaction(null,[f],null,formatGML);
break;
case 'delete':
node = formatWFS.writeTransaction(null,null,[f],formatGML);
break;
}
s = new XMLSerializer();
str = s.serializeToString(node);
$.ajax('http://localhost:8080/geoserver/wfs',{
type: 'POST',
dataType: 'xml',
processData: false,
contentType: 'text/xml',
data: str
}).done();
}
修改整个代码(如果看起来很乱,请见谅,其中大部分来自工作示例 2 ) https://jsfiddle.net/Luffydude/ex06jr1e/6/
应用看起来像这样:
此外,即使当我将 WFS 加载到 QGIS 中时,我的 WFS 正确显示在泰晤士河沿岸,但在我的应用程序中,它出现在海洋中的其他地方,即使我指定了 EPSG 27700(尽管目前这只是一个小烦恼)。
我现在的主要问题是如何让编辑按钮将用户编辑保存到 WFS 层?
最佳答案
我已经有一段时间没有真正愤怒地看过 OpenLayers 了,我有点漏更新了我的工作示例。我刚刚整理了一个新的 JSFiddle带有用于多边形的简单 WFS-T 插入件。
我在生产中使用 Geoserver 2.8(在开发和测试中使用 2.9)。
数据库后端是生产中的 PostGIS 2.1(2.2 开发)。
fiddle 使用 OpenLayers 3.16。
关于我的设置的一些注意事项。我倾向于在 EPSG:3857 中包含所有几何图形,并且我没有在 PostGIS 中指定 SRS。讨厌的人会讨厌,但我只是将我的几何列设置为几何。这样我就可以在同一个表中获取线、点和多边形。我在 QGIS 中看不到混合几何,但这是一个简单的测试设置。几何字段称为几何很重要。这可能是可能的,但我无法在名为 the_geom 或 geom 的字段中完成这项工作。在这种情况下,插入了一条记录,但几何字段为空,如帖子中所述。我相信这就是问题所在。
CREATE TABLE wfs_geom
(
id bigint NOT NULL,
geometry geometry,
CONSTRAINT wfs_geom_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE wfs_geom
OWNER TO geoserver;
这是来自 jsfiddle 的代码位。
var formatWFS = new ol.format.WFS();
var formatGML = new ol.format.GML({
featureNS: 'https://geolytix.net/wfs',
featureType: 'wfs_geom',
srsName: 'EPSG:3857'
});
var s = new XMLSerializer();
var sourceWFS = new ol.source.Vector({
loader: function (extent) {
$.ajax('https://maps.geolytix.net/geoserver/geolytix.wfs/wfs', {
type: 'GET',
data: {
service: 'WFS',
version: '1.1.0',
request: 'GetFeature',
typename: 'wfs_geom',
srsname: 'EPSG:3857',
bbox: extent.join(',') + ',EPSG:3857'
}
}).done(function (response) {
sourceWFS.addFeatures(formatWFS.readFeatures(response));
});
},
strategy: ol.loadingstrategy.bbox,
projection: 'EPSG:3857'
});
var layerWFS = new ol.layer.Vector({
source: sourceWFS
});
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM({
url: 'https://cartodb-basemaps-{a-d}.global.ssl.fastly.net/light_nolabels/{z}/{x}/{y}.png',
opaque: false,
attributions: []
})
}),
layerWFS
],
view: new ol.View({
center: ol.proj.fromLonLat([-0.1, 51.50]),
zoom: 13
})
});
var interaction = new ol.interaction.Draw({
type: 'Polygon',
source: layerWFS.getSource()
});
map.addInteraction(interaction);
interaction.on('drawend', function (e) {
$.ajax('https://maps.geolytix.net/geoserver/geolytix.wfs/wfs', {
type: 'POST',
dataType: 'xml',
contentType: 'text/xml',
data: s.serializeToString(formatWFS.writeTransaction([e.feature], null, null, formatGML))
}).done();
});
关于Javascript 使用 OpenLayers 从 GeoServer 编辑 WFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37615490/
我是 OpenLayers3 的初学者,而且我是这个网站的新手,所以这是我的第一个问题,希望我在这里正确地提出它。对我来说不起作用的是在 OpenLayers3 中打开一个(不是平铺的?)WFS 层。
我必须在我的应用程序中使用和加载 wfs 和 wms但所有 android 库都支持 wms,但不支持 wfs。 谁能帮帮我? 有人用引擎来做这个吗? 最佳答案 问题并未完全详细说明,可能需要有关您面
我正在尝试使用 JAXB 为该模式生成类:http://schemas.opengis.net/wfs/1.1.0/wfs.xsd 我将该模式下载到本地文件,现在我正在尝试生成 JAXB 类。首先我得
本文整理了Java中org.geoserver.wfs.WFSException类的一些代码示例,展示了WFSException类的具体用法。这些代码示例主要来源于Github/Stackoverfl
本文整理了Java中org.geoserver.wfs.WFSGetFeatureOutputFormat类的一些代码示例,展示了WFSGetFeatureOutputFormat类的具体用法。这些代
假设我有一个 Geoserver 运行,其中包含 WFS 公开的两个层(具有属性): StreetLayer (geom, StreetName, Lanes, Length) HouseLayer
我尝试使用 OpenLayers (v2.12) 加载 WFS 层,但不幸的是,在向我的 wfs 服务器发出 HTTP OPTIONS 请求后加载中断。 FireBug 显示我的服务器发送了一个空响应
这是我的场景。页面加载并加载带有空矢量图层的 map 。所以它在那里,但没有任何功能。然后用户点击一个按钮,CQL 过滤器根据 CQL 设置加载特征。 我实现它的方法。我设置了一个空的矢量图层,没有l
本文整理了Java中org.geotools.wfs.v1_0.WFSConfiguration类的一些代码示例,展示了WFSConfiguration类的具体用法。这些代码示例主要来源于Github
TL:DR 我想将 GeoJSON 格式的 GeoServer WFS FeatureCollection 反序列化为 GeometryField/GeometryCollection。 让我们从模型
我有一个 geoserver例如,包含我们的数据。通过 GET 请求可以正常工作并返回预期结果。但遗憾的是它不适用于 POST。 准确地说,这是对带有 GET 的 Capabilities 的请求,它
所以我有一个正在运行的 Web 应用程序,它能够通过从 Geoserver 获取数据来向现有的 Postgis 表添加点和线。我需要添加以下一个特定的功能: 我想让用户也可以在 map 界面上为每个点
我正在尝试使用 GeoServer 通过 WFS-T 保存更改:这是我从地理服务器获取功能的代码 var sourceWFS = new ol.source.Vector({ loader:
我们使用的是 geoserver 2.7.2 并且无法根据需要设置 WFS 安全性。我们的目的是仅向特定用户发布包含地理服务器图层的给定工作空间。我在文档中读到您不能“结合”层安全性和服务安全性。但是
经过长时间的搜索和尝试,我现在寻求帮助: 我的情况: 我有一个 jquery/openlayers-app,它允许用户创建简单的 具有 WFS-T 属性的几何图形... 我正在使用 tomcat6(:
我正在使用 Geotools 开发 wfs 应用程序。我正在使用比较过滤器对象来进行 wfs 要素属性过滤。例如,Shape_Area > 0 或 CITY ="ANKARA"查询工作正常,但如果我定
我正在构建一个应用程序,用户可以在其中检索地理服务器层(存储:postgres)的所有功能并将它们显示在表格上。为此,我使用 OWSLib (get_feature)。 现在我需要添加编辑数据的功能(
本文整理了Java中org.geoserver.wfs.WFSException.getCode()方法的一些代码示例,展示了WFSException.getCode()的具体用法。这些代码示例主要来
本文整理了Java中org.geoserver.wfs.WFSException.getLocator()方法的一些代码示例,展示了WFSException.getLocator()的具体用法。这些代
本文整理了Java中org.geoserver.wfs.WFSException.getMessage()方法的一些代码示例,展示了WFSException.getMessage()的具体用法。这些代
我是一名优秀的程序员,十分优秀!