openlayers - OpenLayers 6 - 覆盖定位不起作用
问题描述
我在我的 OpenLayers 应用程序中面临以下问题(基于 Angular):
我有一张仅限于奥地利的地图。我创建了一个按钮,用户可以使用它来更改图层。
该功能工作正常,但模态叠加层总是在我的页面中间,因为它被缩放到所需的国家/地区,所以根本不可见:
我总是必须先缩小才能看到我的模态窗口。
这是我的代码:
onChangeLayer() {
this.showLayerModel = true;
const container = document.getElementById('popup-layer');
const closer = document.getElementById('popup-closer-layer');
/**
* Create an overlay to anchor the popup to the map.
*/
const overlay = new Overlay({
element: container,
});
overlay.setPosition([14.12456, 47.59397]);
this.map.addOverlay(overlay);
var object = (document.getElementById("line") as HTMLTextAreaElement);
const layerCollection = this.map.getLayers().getArray();
object.addEventListener("change", function () {
layerCollection.forEach((e) => {
e.setVisible(object.value === e.get('title'))
});
});
closer.onclick = function () {
overlay.setPosition(undefined);
}
}
我给出的 overlay.setPosition() 并不重要,模态总是在屏幕的中间。
<button type="button" class="roundedButton" style="margin-top: 20px; margin-left: 20px;" (click)="onChangeLayer()">
Change layer
</button>
<div [hidden]="!showLayerModel" id="popup-layer" class="modal">
<a href="#" id="popup-closer-layer" class="ol-popup-closer"></a>
<div>
<select id="line">
<option value="first">First option</option>
<option value="second">Second option</option>
</select>
</div>
</div>
.modal {
position: absolute;
background-color: white;
box-shadow: 0 1px 4px rgba(0,0,0,0.2);
padding: 15px;
border-radius: 10px;
border: 1px solid #cccccc;
bottom: 12px;
left: -50px;
min-width: 280px;
}
有任何想法吗?
请注意,切换功能就像一个魅力。
提前非常感谢!
下面迈克的回答效果很好!
另一个角度来看:
如何让我的模型始终位于给定视口的中间?
我有以下代码片段:
var extent = this.map.getView().calculateExtent(this.map.getSize());
var extent = transformExtent(extent, 'EPSG:3857', 'EPSG:4326');
console.log(extent);
overlay.setPosition(fromLonLat(extent)), this.map.getView().getProjection();
this.map.addOverlay(overlay);
但这会将模式定位在给定视图的右下角:
啊,好的。这里的答案是:
overlay.setPosition(this.map.getView().getCenter());
解决方案
推荐阅读
- python - 从另一个 .py 文件导入函数不仅仅导入该函数?
- ember.js - 升级到 Ember-Data 2.14 破坏了 hasMany 上的计算过滤器
- ios - 暂停游戏后如何从停止的地方重新启动游戏计时器?
- r - Docker compose - R 服务器 - 致命错误:您必须指定“--save”、“--no-save”或“--vanilla”
- javascript - 添加到数组后更改对象的值
- python - 将 pandas.DataFrame 列分配给具有默认值的系列
- c++ - C++中的多维变长数组
- http - 错误:该 URL 未使用可识别的协议
- json - 在 Swift 4 中使用可编码解析嵌套的 JSON
- python - 在 $PATH 中找不到可接受的 C 编译器 - 安装 Python 和 GCC