如何在地理服务器中启用全局设置
Posted
技术标签:
【中文标题】如何在地理服务器中启用全局设置【英文标题】:How to enable Global settings in geoserver 【发布时间】:2017-06-29 08:59:26 【问题描述】:我一直在尝试在系统的openlayers3中实现wfs-t服务。我可以看到
<wfs:FeatureCollection xmlns="http://www.opengis.net/wfs" xmlns:wfs="http://www.opengis.net/wfs" xmlns:sf="http://www.openplans.org/spearfish" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd http://www.openplans.org/spearfish http://localhost:9999/geoserver/sf/wfs?service=WFS&version=1.0.0&request=DescribeFeatureType&typeName=sf%3AAPRoad50MMI2015">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">76.771293,12.625601 84.727878,19.166098</gml:coordinates>
</gml:Box>
从我的地理服务器中删除的带有 featureID 的 XML 是:
<Transaction xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"><Delete typeName="feature:jktouristspots50poi2015" xmlns:feature="http://172.31.4.67:9999/geoserver/mywork"><Filter xmlns="http://www.opengis.net/ogc"><FeatureId fid="jktouristspots50poi2015.55"/></Filter></Delete></Transaction>
1。我的地理服务器详情:
构建信息 地理服务器版本 2.11.1 Git 修订版 0628848420a522efc1c6bbd90cb3346038929f6a 建造日期 2017 年 5 月 18 日 22:36 地理工具版本 17.1(版本 86d8efab5104df08c81acf7b2f2342e08c9dea4b) GeoWebCache 版本 1.11.0(修订版 1.11.x/02b79570ae64d548f9fb39bcab5edc9cb4d0c992)
对于上述 WFS 请求,我已将我的 ajax 函数设置如下:
<script type="text/javascript">
var formatWFS = new ol.format.WFS();
var formatGML = new ol.format.GML(
featureNS: 'http://localhost:9999/geoserver/mywork',
featureType: 'jktouristspots50poi2015',
srsName: 'EPSG:4326'
);
alert("GML",formatGML);
var xs = new XMLSerializer();
var sourceWFS = new ol.source.Vector(
loader: function (extent, resolution, projection)
var url = 'http://localhost:9999/geoserver/mywork/wfs?service=WFS&' +
'version=1.1.0&request=GetFeature&typename=mywork:jktouristspots50poi2015&' +
'outputFormat=text/javascript&srsname=EPSG:4326&' +
'bbox=' + extent.join(',') + ',EPSG:4326';
alert(url);
$.ajax(
url: url,
dataType: 'jsonp',
jsonpCallback: 'callback:loadFeatures',
jsonp: 'format_options'
).done(function (response)
alert("i am done");
);
,
strategy: ol.loadingstrategy.bbox
);
window.loadFeatures = function (response)
layerWFS
.getSource()
.addFeatures(new ol.format.GeoJSON().readFeatures(response));
;
var layerWFS = new ol.layer.Vector(
source: sourceWFS
);
var interaction;
var interactionSelectPointerMove = new ol.interaction.Select(
condition: ol.events.condition.pointerMove
);
var interactionSelect = new ol.interaction.Select(
style: new ol.style.Style(
stroke: new ol.style.Stroke(
color: '#FF2828'
)
)
);
var interactionSnap = new ol.interaction.Snap(
source: layerWFS.getSource()
);
var map = new ol.Map(
target: 'map',
controls: [],
interactions: [
interactionSelectPointerMove,
new ol.interaction.MouseWheelZoom(),
new ol.interaction.DragPan()
],
layers: [
new ol.layer.Tile(
title: 'India',
source: new ol.source.TileWMS(
url: 'http://ndem.nrsc.gov.in/geoserver_v3/ndem50k/wms',
params: LAYERS: 'ndem50k:stateadmin50census2011'
)
),
layerWFS
],
view: new ol.View(
projection: 'EPSG:4326',
center: [82.491,21.899],
zoom: 5
)
);
//wfs-t
var dirty = ;
var transactWFS = function (mode, f)
var node;
switch (mode)
case 'insert':
node = formatWFS.writeTransaction([f], null, null, formatGML);
alert("after insert node",node);
break;
case 'update':
node = formatWFS.writeTransaction(null, [f], null, formatGML);
break;
case 'delete':
node = formatWFS.writeTransaction(null, null, [f], formatGML);
break;
var payload = xs.serializeToString(node);
<!-- '<Transaction xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"><Delete typeName="feature:jktouristspots50poi2015" xmlns:feature="http://172.31.4.67:9999/geoserver/mywork"><Filter xmlns="http://www.opengis.net/ogc"><FeatureId fid="jktouristspots50poi2015.55"/></Filter></Delete></Transaction>'; -->
alert(payload);
$.ajax('http://localhost:9999/geoserver/mywork/ows',
service: 'WFS',
type: 'POST',
dataType: 'xml',
processData: true,
contentType: 'text/xml',
data: data:payload
).done(function()
alert("gekki hi ");
console.log("indside done");
sourceWFS.clear();
);
alert("out i am"+payload);
;
$('button').click(function ()
alert();
$(this).siblings().removeClass('btn-active');
$(this).addClass('btn-active');
map.removeInteraction(interaction);
interactionSelect.getFeatures().clear();
map.removeInteraction(interactionSelect);
switch ($(this).attr('id'))
case 'btnEdit':
map.addInteraction(interactionSelect);
interaction = new ol.interaction.Modify(
features: interactionSelect.getFeatures()
);
alert("am edit "+interaction);
map.addInteraction(interaction);
map.addInteraction(interactionSnap);
dirty = ;
interactionSelect.getFeatures().on('add', function (e)
e.element.on('change', function (e)
//alert("i am add ");
dirty[e.target.getId()] = true;
);
);
interactionSelect.getFeatures().on('remove', function (e)
var f = e.element;
if (dirty[f.getId()])
alert("i am in remove");
delete dirty[f.getId()];
var featureProperties = f.getProperties();
delete featureProperties.boundedBy;
var clone = new ol.Feature(featureProperties);
clone.setId(f.getId());
transactWFS('update', clone);
);
break;
case 'btnPoint':
interaction = new ol.interaction.Draw(
type: 'Point',
source: layerWFS.getSource()
);
map.addInteraction(interaction);
interaction.on('drawend', function (e)
transactWFS('insert', e.feature);
);
break;
case 'btnLine':
alert("line feature draw");
interaction = new ol.interaction.Draw(
type: 'LineString',
source: layerWFS.getSource()
);
map.addInteraction(interaction);
interaction.on('drawend', function (e)
var myAttrValue = prompt("Enter Attribute", "");
var myFeature= e.feature;
if (myAttrValue != null)
myFeature.set('column', myAttrValue);
transactWFS('insert', myFeature);
);
break;
case 'btnArea':
interaction = new ol.interaction.Draw(
type: 'Polygon',
source: layerWFS.getSource()
);
interaction.on('drawend', function (e)
transactWFS('insert', e.feature);
);
map.addInteraction(interaction);
break;
case 'btnDelete':
interaction = new ol.interaction.Select();
interaction.getFeatures().on('add', function (e)
transactWFS('delete', e.target.item(0));
interactionSelectPointerMove.getFeatures().clear();
interaction.getFeatures().clear();
);
map.addInteraction(interaction);
break;
default:
break;
);
</script>
如何在 geoserver 中启用全局设置,ows 是什么?如果我通过现有路径,它也会抛出错误,例如:
我在 GEOSERVER 中的工作区路径: C:\Program Files (x86)\GeoServer 2.11.1\data_dir\workspaces\mywork\jktourisam wfs-t.jpg
postgislayer.html:1 XMLHttpRequest 无法加载 http://localhost:9999/geoserver/mywork/wfs。 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,Origin 'http://localhost' 不允许访问。响应的 HTTP 状态代码为 403。
尝试了很多方法,都没有找到解决办法......
我能够在我的地图上查看添加的 WFS 矢量图层。我的代码中是否有任何参数错误?意思是,虽然我已经从我的地理服务器使用相同的图层 url 测试了 WFS-T,但在那里我也无法删除和插入地理服务器和 postgres 的功能,但我可以通过使用地图上的多边形、线和点特征在地图上绘制并且可以检索功能ID?我还想在我的代码中实现 CQL 和 ECQL 过滤器,请提供任何参考链接以供学习。谢谢你
虽然通过 ajax 调用(POST)提醒成功也不起作用,我认为这是因为我通过了错误的 url?这是正确的吗?请指导我在 geoserver 中设置环境以执行 wfs-t..
【问题讨论】:
我已经从搜索结果中尝试了所有可能的解决方案,我无法从地理服务器中找到全局设置选项 【参考方案1】:您需要在容器中启用 CORS。如果您使用 Jetty 作为容器,请参阅此 question,如果您使用 tomcat,请参阅此 question。
【讨论】:
以上是关于如何在地理服务器中启用全局设置的主要内容,如果未能解决你的问题,请参考以下文章