Openlayers и выделение по запросу

Кроме QGIS
Ответить
wwall
Новоприбывший
Сообщения: 4
Зарегистрирован: 19 дек 2011, 13:41
Репутация: 0

Openlayers и выделение по запросу

Сообщение wwall » 20 дек 2011, 17:55

Добрый день. Подскажите по вопросу
Взял код отсюда. http://openlayers.org/dev/examples/cql-format.html переделал немного под себя и как результат не работает
пишет "ERROR: In parsing: ['Шальское0132'], expected one of: VALUE: /^('\w+'|\d+(\.\d*)?|\.\d+)/ "

Все данные - в UTF8

Код скрипта

Код: Выделить всё

html>
<head>
  <title>OpenLayers Example</title>
    <script
    src="openlayers/lib/OpenLayers.js"></script>
    </head>
      <script  type="text/javascript">
      function init()
      {

}
      </script>
    <body onload="init()">
     <p>start</p>
              <div id="docs">
            <p>
                Enter text for a CQL filter to update the features displayed.
                <br>
                <form name="cql_form" id="cql_form">
                    <label for="cql">CQL</label>

                    <input id="cql" type="text" value="NAME='Шальское0132'">
                    <input type="submit" value="update">
                    <input type="reset" value="reset">
                </form>
                <input type="text" id="outputer" value="no error"></textarea>
            </p>
     
     
      <div style="width:100%; height:100%" id="map" >
      <script>
      // use a CQL parser for easy filter creation
var format = new OpenLayers.Format.CQL();





        var map = new OpenLayers.Map('map',
            	    {
	    maxExtent: new OpenLayers.Bounds(6639219.024636,  6819481.241107 ,6759417.664334,  6928208.616593), 
	    maxResolution: "auto", // Можно также указать "auto" - автоматически растянуть карту
	    projection:"EPSG:28406",    // Код будет использоваться в запросах к WMS/WFS серверу.
	    units: "m"                  // Нужно для работаты с масштабами.
} 		
       );
        var wms = new OpenLayers.Layer.WMS("kv",
    					    "http://localhost:8080/cgi-bin/myserv?", 
    					    {layers: 'kv'}
    				    );
        var wms1 = new OpenLayers.Layer.WMS("popplace",
    					    "http://localhost:8080/cgi-bin/myserv?", 
    					    {layers: 'popplace'}
    				    );


var style = new OpenLayers.Style();

var rule = new OpenLayers.Rule({
    name: 'shals',
    filter: new OpenLayers.Filter.Logical({
        type: OpenLayers.Filter.Logical.OR,
        filters: [
            new OpenLayers.Filter.Comparison({
                type: OpenLayers.Filter.Comparison.LIKE,
                property: 'country',
                value: '%Шальское%',
            }),
            new OpenLayers.Filter.Comparison({
                type: OpenLayers.Filter.Comparison.LIKE,
                property: 'country',
                value: '%Шальское%',
            })
        ]
    }),
    symbolizer: {
        fillColor: "#ff0000",
        strokeColor: "#ffcccc",
        fillOpacity: "0.5"
    } 

});

var states = new OpenLayers.Layer.Vector("States", {
    styleMap: new OpenLayers.StyleMap({
        "default": new OpenLayers.Style(null, {rules: [rule]})
    })
});

    var lat = 6700000;
var lon = 6870000;
var zoom = 6;
        map.addLayer(wms);
        map.addLayer(wms1);
        map.addLayer(states);


map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
map.addControl(new OpenLayers.Control.LayerSwitcher());
        map.zoomToMaxExtent();
        
        
        
// called when features are fetched
function loadFeatures(data) {
    var features = new OpenLayers.Format.GeoJSON().read(data);

    states.addFeatures(features);
};

// update filter and redraw when form is submitted

function updateFilter() {
    var filter;
var output = document.getElementById("outputer");
var cql = document.getElementById("cql");
    try {
        filter = format.read(cql.value);
	alert(filter);
    } catch (err) {
        output.value = err.message;
    }
    if (filter) {
        output.value = "";
        rule.filter = filter;
        states.redraw();
    }
    return false;
}
updateFilter();
var form = document.getElementById("cql_form");
form.onsubmit = updateFilter;

      
      </script>
      </div>
      
      
            
      <p>end</p>
</body>
</html>




wwall
Новоприбывший
Сообщения: 4
Зарегистрирован: 19 дек 2011, 13:41
Репутация: 0

Re: Openlayers и выделение по запросу

Сообщение wwall » 21 дек 2011, 08:43

И почему-то не работает запрос даже на английские имена.
Как должен выглядеть map-файл что бы можно было использовать filter из openlayers?
может в нем ошибка?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Openlayers и выделение по запросу

Сообщение Denis Rykov » 21 дек 2011, 10:58

map-файл? Не уверен, что MapServer поддерживает CQL.
Spatial is now, more than ever, just another column- The Geometry Column.

wwall
Новоприбывший
Сообщения: 4
Зарегистрирован: 19 дек 2011, 13:41
Репутация: 0

Re: Openlayers и выделение по запросу

Сообщение wwall » 21 дек 2011, 12:47

и вот настал момент осознания собственной тупости... Даже гугл не помогает.

Подскажите любой пример где есть поиск по наименованию. Наименование должно браться из shp. Пример предложеный здесь на сайте с аяксом и постгисом не подходит увы. Не принципиально на чем будет сделано - openlayers или mapscript или что-то свое.

Очень надо. Помогите пожалуйста

wwall
Новоприбывший
Сообщения: 4
Зарегистрирован: 19 дек 2011, 13:41
Репутация: 0

Re: Openlayers и выделение по запросу

Сообщение wwall » 24 дек 2011, 19:15

победил.
правда через геосервер, но все равно - победил!

тему можно считать закрытой

Ответить

Вернуться в «Свободные, бесплатные, открытые ГИС»

Кто сейчас на конференции

Сейчас этот форум просматривают: Amazon [Bot] и 2 гостя