2016-01-29 3 views
0

Я использую Geoserver/PostGIS/OpenLayersOpenLayers: поиск из WFS слоя

Я успешно установить векторный слой. И теперь я пытаюсь создать функцию поиска. Но что-то идет не так.

Это мой код

<form> 
 

 
<input id="sub01" type="submit" value="Search" onclick="changeFilter()"> 
 
</form> 
 

 

 
\t 
 

 

 
<script type="text/javascript"> 
 
     OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url="; 
 
\t 
 
\t var renderer = OpenLayers.Util.getParameters(window.location.href).renderer; 
 
renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers; 
 
\t 
 
var WGS84 = new OpenLayers.Projection("EPSG:4326"); 
 
var mercator = new OpenLayers.Projection("EPSG:900913"); 
 

 
var map = new OpenLayers.Map ("dMap", {  
 

 
controls:[ 
 
], 
 
maxResolution: 0.005, 
 
displayProjection: WGS84, 
 
units: 'degrees' 
 
}); 
 

 

 
var wfs = new OpenLayers.Layer.Vector("Editable Features", { 
 
renderers: renderer, 
 
    displayInLayerSwitcher: true, 
 
strategies: [ 
 
new OpenLayers.Strategy.Fixed(), 
 
new OpenLayers.Strategy.Cluster({distance: 
 
15}) 
 
], 
 

 
styleMap: new OpenLayers.StyleMap(style), 
 

 
protocol: new OpenLayers.Protocol.WFS({ 
 
version: "1.1.0", 
 
url: "http://localhost:8080/geoserver/wfs", 
 
featureNS : "http://www.openplans.org/tour", 
 
srsName: "EPSG:4326", 
 
featureType: "tourism", 
 
geometryName: "the_geom" 
 
}), 
 
extractStyles: true, 
 
strategies: [new OpenLayers.Strategy.BBOX()], 
 
filter: new OpenLayers.Filter.Logical({ 
 
type: OpenLayers.Filter.Logical.AND, 
 
filters: [ 
 
new OpenLayers.Filter.Comparison({ 
 
type: OpenLayers.Filter. 
 
Comparison.EQUAL_TO, 
 
property: prop1, 
 
value: testfil 
 
}), 
 
new OpenLayers.Filter.Comparison({ 
 
type: OpenLayers.Filter. 
 
Comparison.EQUAL_TO, 
 
property: prop2, 
 
value: testfil2 
 
}) 
 
] 
 
}) 
 

 
}); 
 
var prop1 = "tourismtype"; 
 
var testfil = "Recreation"; 
 
var prop2 = "tourismname"; 
 
var testfil2 = "Park"; 
 
function changeFilter(prop1, prop2, testfil, testfil2){ 
 
wfs.destroyFeatures(); 
 
filter: new OpenLayers.Filter.Logical({ 
 
type: OpenLayers.Filter.Logical.AND, 
 
filters: [ 
 
new OpenLayers.Filter.Comparison({ 
 
type: OpenLayers.Filter.Comparison.EQUAL_TO, 
 
property: prop1, 
 
value: testfil 
 
}), 
 
new OpenLayers.Filter.Comparison({ 
 
type: OpenLayers.Filter.Comparison.EQUAL_TO, 
 
property: prop2, 
 
value: testfil2 
 
}) 
 
] 
 
}) 
 
wfs.filter = filter; 
 
    wfs.refresh({force: true}); 
 
} 
 

 
\t \t 
 
    </script>

Это не работает. Я пробовал редактировать свой код, я не знаю, что делать, я искал ответ, и мне ничего не помогло. Пожалуйста, сообщите ...

Спасибо.

+0

есть какие-либо ошибки? –

+0

нет, у меня нет никаких ошибок – Ehsan

+0

На моей карте отображаются точки в основной загрузке, но они не изменяются при нажатии кнопки поиска, после перезагрузки карты она все еще показывает предыдущие точки – Ehsan

ответ

0

Проблема была решена, я вставил элемент ввода с видом типа из элемента формы. Оно работает. Мой исходный код был:

<form> 
Other code 
<input id="sub01" type="submit" value="Search" onclick="changeFilter()"> 
</form> 

Моя коррекция треска:

<form> 
Other code 
</form> 
<input id="sub01" type="submit" value="Search" onclick="changeFilter()"> 
Смежные вопросы