【发布时间】:2014-05-25 16:35:44
【问题描述】:
我正在尝试在 Google 地图上渲染 WMS 图层,并且除了 getfeatureinfo 事件之外它的工作正常。当我打开 Geoserver 并尝试单击 WMS 功能时,我可以获得功能信息。但是在我的页面中,我可以看到空的弹出窗口。我认为问题出在 Google 地图投影上。
代码:
function init(){
var gmap = new OpenLayers.Layer.Google("Google Streets", {
visibility: false});
var options = {
controls : [],
units : "m",
numZoomLevels : 22,
maxResolution : 156543.0339,
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
maxExtent : new OpenLayers.Bounds(-20037508.34, -20037508.34,
20037508.34, 20037508.34)
};
var map = new OpenLayers.Map('map', options);
var layer1 = new OpenLayers.Layer.WMS("Layer1 - Tiled",
"http://localhost:8090/geoserver/Layers/wms", {
layers : "Layer1",
transparent : "true",
format : "image/png",
srs : 'EPSG:4326',
zoomOffset : 3,
}, {
isBaseLayer : false
});
map.addLayer(gmap);
map.addLayer(layer1);
info = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://localhost:8090/geoserver/Layers/wms',
title: 'Identify features by clicking',
layers: [layer1],
infoFormat: 'text/html',
queryVisible: true,
eventListeners: {
getfeatureinfo: function(event) {
map.addPopup(new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(event.xy),
null,
event.text,
null,
true
));
}
}
});
map.addControl(info);
info.activate();
map.setCenter(new OpenLayers.LonLat(-104.949, 40.924).transform(
new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()),5);
map.addControl(new OpenLayers.Control.Navigation());
}
<body onload="init()">
<div style="visibility: visible; height: 100%;" id="map"></div>
</body>
在谷歌地图 (EPSG:900913) 和 WMS 图层 (EPSG:4326) 的情况下,有什么方法可以获取特征信息?我需要更改我的代码吗?请分享您的宝贵想法。
我们将不胜感激:)
【问题讨论】:
-
getLonLatFrompixel 返回经度/纬度坐标,而您使用的是 900913(以米为单位)。您是否尝试过在 map.getLonLatFromPixel(event.xy) 上用于 map.setCenter 的相同转换?
-
@JohnBarça:是的,我试过了,兄弟。没有运气:(
-
可能是一个明显的问题,但是 event.text 和 map.getLonLatFromPixel(event.xy); 的一些示例值是什么;
-
我得到空的回应约翰。我认为当我们点击功能时,OpenLayers
getfeatureinfo无法从地理服务器调用/获取数据。 -
当您在 geoserver 中设置图层时,它会要求您提供已声明的原生投影,并且还有一个强制声明选项,它将尝试将所有传入查询转换为该投影。我会检查您从 OpenLayers 到 Geoserver 的传出请求在 getFeatureInfo 请求中的样子,并且它的投影与您在 Geoserver 中设置为原生/声明的任何内容相匹配。
标签: javascript google-maps google-maps-api-3 openlayers geoserver