gpt4 book ai didi

javascript - OL3 : GetFeature from Layers by Coordinate

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:56 25 4
gpt4 key购买 nike

我想通过坐标获取图层的特征。此外,我想在弹出窗口中打开此功能,到目前为止我已经通过 onclick 事件解决了这个问题。但是我想通过给出特征的坐标并打开特征的弹出窗口来实现。

我有一个带有 map 的图层和一个带有特征的图层:

if (trackMap != null) {
for (var i = 0; i < trackMap.length; i++) {
var trackInfo = trackMap[i];
lat = parseFloat(trackInfo.lat);
lon = parseFloat(trackInfo.lon);

var layergpx = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.GPX(),
url: '${contextRoot}/gps/gpx2' + trackInfo.url
})
});
layers.push(layergpx);
}
}

我想在另一个 Javascript 函数中获取这一层的特性。

我如何通过单击 map 打开弹出窗口:

/**
* The Click Event to show the data
*/
var element = document.getElementById('popup');
var popup = new ol.Overlay({
element: element,
positioning: ol.OverlayPositioning.BOTTOM_CENTER,
stopEvent: false
});
map.addOverlay(popup);

map.on('singleclick', function(evt) {
map.getFeatures({
pixel: evt.getPixel(),
layers: vectorLayers,
success: function(layerFeatures) {
var feature = layerFeatures[0][0];
if (feature) {
var geometry = feature.getGeometry();
var coord = geometry.getCoordinates();
popup.setPosition(coord);
$(element).popover({
'placement': 'top',
'html': true,
'content': feature.get('desc')
});
$(element).popover('show');
} else {
$(element).popover('destroy');
}
}
});
});

但我不希望通过在 map 上单击它来打开此功能,而是通过在文本字段中输入坐标,然后 map 打开此弹出窗口,就像在 onclick 事件中一样。

最佳答案

看看这个例子,看看它是否对你有帮助: http://openlayers.org/en/latest/examples/kml.html

var displayFeatureInfo = function(pixel) {
map.getFeatures({
pixel: pixel,
layers: [vector],
success: function(featuresByLayer) {
var features = featuresByLayer[0];
var info = [];
for (var i = 0, ii = features.length; i < ii; ++i) {
info.push(features[i].get('name'));
}
document.getElementById('info').innerHTML = info.join(', ') || '&nbsp';
}
});

map.getFeatures() 有这个成功回调,它提供在 layers: [vector] 中指定的图层的特征。随意定制以获得您所需要的。

===更新===

在 OpenLayers 3 的 Map 对象中有一个函数:getPixelFromCoordinate

/**
* @param {ol.Coordinate} coordinate Coordinate.
* @return {ol.Pixel} Pixel.
*/
ol.Map.prototype.getPixelFromCoordinate = function(coordinate) {
var frameState = this.frameState_;
if (goog.isNull(frameState)) {
return null;
} else {
var vec2 = coordinate.slice(0, 2);
return ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix, vec2, vec2);
}
};

关于javascript - OL3 : GetFeature from Layers by Coordinate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20946616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com