Стратегия OpenLayers 3 BBOX

В этом примере http://openlayers.org/en/v3.0.0/examples/vector-wfs.js и с использованием стратегии BBOX означает ли это, что необходимо использовать часть &bbox=' + extent.join(',') в исходном URL-адресе?

Стратегия OpenLayers3 Strategy BBOX гласит: «Запрашивать новые функции всякий раз, когда границы карты выходят за пределы ранее запрошенного набора функций».


person Anuket    schedule 04.12.2014    source источник
comment
Я ответил на то, что, как я думаю, является вашим вопросом - это происходит из-за ошибки в комментариях к примеру, поскольку BBOX относится не к BBOX экстента карты, а к экстенту плитки.   -  person John Powell    schedule 05.12.2014


Ответы (1)


Да, &bbox=' + extent.join(',') при необходимости. Если вы удалите его, вы вообще не получите никаких функций wfs. Пример на самом деле несколько вводит в заблуждение, поскольку он называет его стратегией BBOX, тогда как на самом деле это стратегия createTile, использующая BBOX из каждой базовой плитки в качестве BBOX wfs. Если вы изучите исходный код ol.source. ServerVector вы найдете функцию loadFeatures, которая вызывает ol.loadingstrategy.createTile из ol.loadingstrategy, который возвращает требуемые экстенты для каждого тайла, которые затем используются для каждого вызова wfs. Это экстент, который вы видите в файле extension.join выше.

Или, если взглянуть на это с другой стороны, для каждого вызова для получения плитки изображения есть соответствующий вызов плитки wfs, что вы можете проверить, заглянув на вкладку сети инструментов разработчика вашего браузера. Итак, на самом деле это стратегия BBOX тайлов, а не стратегия BBOX представлений.

Я настоятельно рекомендую настроить локальную отладку для OL3, чтобы понять, что происходит. Вы можете сделать это, загрузив ol-debug.js, для несжатой версии js или путем настройки локального сервера см. эти инструкции

person John Powell    schedule 05.12.2014
comment
Теперь я запутался больше, чем раньше, потому что я удалил часть &bbox=' + extent.join(',') из своего URL-адреса (потому что он не работает с фильтром GeoServer CQL), и моя стратегия - bbox, и у меня есть все функции. - person Anuket; 05.12.2014
comment
Действительно, у меня не сработала локальная отладка против wfs, представленного в примере OL. Может быть, вы просто получаете все функции от Geoserver? Если Geoserver не имеет bbox, он вернет ряд функций для слоя, если этот слой достаточно мал, может показаться, что вы получили все. Если вы попытаетесь удалить bbox из примера OL, вы ничего не увидите. - person John Powell; 05.12.2014
comment
Я ничего не получаю от вашего wfs. Я вижу такие запросы, но они просто зависают: loom-gis.geo.ut.ee:8080/geoserver/ermas/ - person John Powell; 05.12.2014
comment
Я действительно не могу это комментировать. У меня запрос работает. Странный. - person Anuket; 05.12.2014
comment
jsfiddle.net/6nas4xq2/4 Я обновил вашу скрипку (извините, мой VPN блокировал ваш wfs , почему-то). Если убрать maxFeatures, посмотрите, что получится. Вы ничего не получите. установите его на maxFeatures=200, посмотрите, что произойдет. Как я уже сказал выше, поскольку у вас нет BBOX, ваш сервер просто отвечает на maxFeatures. - person John Powell; 05.12.2014
comment
Просто попробуйте подождать минуту, и без maxFeatures он ответит со всеми функциями (это займет некоторое время, около полминуты). - person Anuket; 05.12.2014
comment
Хорошо, потому что, если у вас нет maxFeatures и BBOX, то по умолчанию используется то, что по умолчанию Geoserver для maxFeatures (внезапно, 2000). Тем не менее, смысл остается, установите maxFeatures = 2, вы увидите 2 функции. Удалите maxFeatures и установите BBOX=...., и вы получите функции в ограничивающей рамке. Оставьте как maxFeatures, так и BBOX, вы получите maxFeatures по умолчанию (после долгой задержки), которые будут произвольными и не основанными на каких-либо экстентах. Я обнаружил это, тестируя wfs с 450 миллионами функций. Я смотрел в Лондоне и получил 20 000 функций в Шотландии. - person John Powell; 05.12.2014
comment
О, это интересно. Интересно, добавление &CQL_FILTER=(bbox(geometry,' + extent.join(',') + ') сделает то же самое, что и &bbox=' + extent.join(',')? - person Anuket; 05.12.2014
comment
Посмотрите файл wfs.xml в каталоге geoserver_data. В нашем случае у нас есть ‹maxFeatures›100000‹/maxFeatures›. Это то, что вы видите. Попробуйте установить это значение на 0, перезапустите сервер, удалите maxFeatures из своего запроса, вы ничего не увидите. - person John Powell; 05.12.2014
comment
Да, я думаю, что CQL_FILTER= должен иметь тот же эффект, что и установка bbox=... Однако это уже другой вопрос :-) - person John Powell; 05.12.2014
comment
Добро пожаловать. Я потратил на это довольно много времени, выполняя локальную отладку, просматривая исходный код и т. д., поэтому, если он ответил на ваш вопрос, было бы неплохо, если бы вы приняли ответ :-) - person John Powell; 05.12.2014
comment
Использование CQL-фильтра bbox делает то же самое, но намного медленнее. Если вы сравните временные шкалы NET/XHR в Firebugs, вы увидите, что обработка на стороне Geoserver занимает больше времени. - person Dennis Bauszus; 20.05.2015