2015-04-07 2 views
0

Мне было интересно, есть ли способ получить ограничительную рамку не полного слоя, а только часть слоя, которая видна в текущем значении масштабирования карты ?Ограничивающая поле только для видимой части слоя

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

EDIT:

К сожалению, это не решает мою проблему. Это именно тот момент, который я получил до последнего, и в некоторых случаях он не работает. Поскольку stackoverflow не позволяет загружать изображения из-за моей репутации, я попытаюсь описать: Представьте, что у меня есть путь, который пересекает экран, почти параллельный оси y, однако вне экрана он по крайней мере длин оси x. В этом случае предлагаемое решение вернет минимальные и максимальные координаты экрана для оси x, где это должен быть короткий интервал, который пересекает экран. В некотором смысле мне нужен ограничивающий ящик видимой части слоя.

EDIT 2: Благодарим всех вас за ответы. Я попытался использовать функцию getFeaturesInExtent, но я получаю сообщение об ошибке: «Uncaught TypeError: undefined не является функцией». Я использую последнюю версию OpenLayers версии 3.4.0. Я предполагаю, что получаю эту ошибку, потому что эта функция не реализована в этой версии. Путь я использую следующее:

var mapExtent = map.getView().calculateExtent(map.getSize()); 
var features = result.getSource().getFeaturesInExtent(mapExtent); 

Какие решения вы предлагаете для меня? (Я пытался использовать основную версию, загружающую ZIP из: https://github.com/openlayers/ol3, но карта в этом случае не работала.) Еще раз спасибо!

+0

Я не уверен, что правильно понял, но ['ol.source.Vector # getFeaturesInExtent'] (http://openlayers.org/en/master/apidoc/ol.source.Vector.html#getFeaturesInExtent) с протяженностью карты дает вам все видимые функции. Тогда вы могли бы рассчитать реальную степень с этими функциями. – tsauerwein

ответ

0

Я нашел решение в следующем:

var mapExtent = map.getView().calculateExtent(map.getSize()); 

    var intersectedFeatures = []; 
    for (var i = 0; i < points.length; i++){ 
     if(ol.extent.containsCoordinate(mapExtent, points[i])) 
     intersectedFeatures.push(points[i]); 
    } 

    var visibleLayerExtent = ol.extent.boundingExtent(intersectedFeatures); 

Спасибо всем за помощь!

1

Я думаю, что единственное, что вам нужно - это степень зрения и протяженность слоя и функция ol.extent.getIntersection().

Вы можете получить экстента текущего вида на f.ex

map.getView().calculateExtent(map.getSize()); 

глобальные масштабы вашего слоя

`layer.getExtent()`. 

И пересекающиеся Степень с.

ol.extent.getIntersection(extent1, extent2,opt_extent) 

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

+0

Спасибо за ответ. Я редактировал свой вопрос. Вы можете проверить? –

+0

Задача (связанная с базовым правильным ответом цауэрваина), что методы протяженности векторных объектов пересекаются с заданной степенью, но они возвращают всю геометрию объекта. Поэтому я думаю, что вы получите обратную рамку, которая больше, чем представление, когда геометрия объекта перекрывается с областью без просмотра.Мое предложение состояло в том, чтобы получить все функцииInExtent (viewExtent), такие как tsauerwein, рекомендованные им и использовать объем этих функций вместо layer.getExtent() моего последнего ответа. Пожалуйста, дайте мне знать, как вы решили свой тест в конце. – foedchr

Смежные вопросы