Cordova Openlayers地图直到map div单击后才显示,然后在错误的位置显示

Cordova Openlayers地图直到map div单击后才显示,然后在错误的位置显示,cordova,openlayers,openstreetmap,Cordova,Openlayers,Openstreetmap,我试图在使用PhoneGap和JQuery Mobile的应用程序中放置OpenLayers OSM地图,但在单击区域或控件之前,地图不会显示在Xcode iOS模拟器中。我已经阅读了相关问题,并实施了“DeviceRady”检查,但这没有任何区别 更重要的是,当我确实让地图出现时,它会以接近最大的范围出现,而不是放大。我已经在代码中添加了警报,我发现虽然警报1正确触发,但警报2没有触发。但是,如果我将.setCenter和.zoom指令替换为.zoomToMaxExtent,它会这样做(尽管未

我试图在使用PhoneGap和JQuery Mobile的应用程序中放置OpenLayers OSM地图,但在单击区域或控件之前,地图不会显示在Xcode iOS模拟器中。我已经阅读了相关问题,并实施了“DeviceRady”检查,但这没有任何区别

更重要的是,当我确实让地图出现时,它会以接近最大的范围出现,而不是放大。我已经在代码中添加了警报,我发现虽然警报1正确触发,但警报2没有触发。但是,如果我将.setCenter和.zoom指令替换为.zoomToMaxExtent,它会这样做(尽管未单击地图仍无法加载)。有人能帮忙吗

贾尔斯


我的页面
变量映射
函数init(){
map=newOpenLayers.map(“mapholder”,{maxResolution:300});
addLayer(新的OpenLayers.Layer.OSM());
var lonlat=新OpenLayers.lonlat(-0.1279688,51.5077286)
.变换(
新OpenLayers.Projection(“EPSG:4326”),//从WGS 1984转换而来
map.getProjectionObject()//到球形墨卡托投影
);
var=16;
警报(“1!”);
//map.zoomToMaxExtent;//如果我取消注释并添加注释,将触发警报2
//下面的两行
地图设置中心(lonlat);
map.zoom(缩放);
警报(“2!”;//在设置中心和缩放线处于活动状态时不会触发,并且
//地图也不会居中或缩放。
}
$(函数(){//ready
}); //准备就绪
函数onBodyLoad(){
document.addEventListener(“deviceready”,init(),false);
}
固定收割台

好的,我试着从头开始重建我的文件,从一个简单的地图视图开始,然后添加其他页面组件。这似乎不是OpenLayers的问题,但与页面或div加载有关-我的应用程序布局在同一html文件中有两个单独的页面,地图在第二个页面上,这似乎是问题的根源。将地图与第一个页面上的内容交换(因此,当html加载时,地图是您看到的第一件事),它工作得很好——但是在第二个页面上作用于div的jQuery脚本现在不起作用了!现在我已经澄清了这个问题,我将寻找解决方案,如果有必要,发布一个定义更严格的问题…

更改您的函数

  function onBodyLoad(){
      init();
      document.addEventListener("deviceready",init(),false);
  }
改变你的功能

  function onBodyLoad(){
      init();
      document.addEventListener("deviceready",init(),false);
  }

我以前也遇到过同样的问题,并找到了一个有效的解决方案,但感觉有点粗糙。问题在于,出于某种原因,OpenLayers会使平铺不可见,因此解决方案是在加载贴图时使其可见:

$(document).delegate("#map-page", "pageshow", function() {
    $(".olLayerDiv").children("div").not(":visible").show();
});

我以前也遇到过同样的问题,并找到了一个有效的解决方案,但感觉有点粗糙。问题在于,出于某种原因,OpenLayers会使平铺不可见,因此解决方案是在加载贴图时使其可见:

$(document).delegate("#map-page", "pageshow", function() {
    $(".olLayerDiv").children("div").not(":visible").show();
});
此代码:

document.addEventListener("deviceready",init(),false);
立即调用init(),而不是在调度事件时传递对要调用的函数的引用

实际上,init是在onload处理程序中调用的,而不是作为设备就绪处理程序调用的,这正是您想要的

请尝试以下方法:

document.addEventListener("deviceready",init,false);
此代码:

document.addEventListener("deviceready",init(),false);
立即调用init(),而不是在调度事件时传递对要调用的函数的引用

实际上,init是在onload处理程序中调用的,而不是作为设备就绪处理程序调用的,这正是您想要的

请尝试以下方法:

document.addEventListener("deviceready",init,false);

谢谢你的建议,约格什-我已经改变了你标记的功能,但这似乎对我遇到的任何问题都没有任何影响!另外一条信息-当我点击地图加载时,它看起来确实在正确的坐标上居中-但它没有应用任何缩放。。。谢谢GilesThanks的建议,Yogesh-我已经更改了你标记的函数,但它似乎对我遇到的任何问题都没有任何影响!另外一条信息-当我点击地图加载时,它看起来确实在正确的坐标上居中-但它没有应用任何缩放。。。谢谢GilesThanks给我的建议igorti-我试了一下以防万一,但我不认为我有同样的问题。。。正如我在上面的回答中所说,似乎我在识别“第二”页上的事件时遇到了一个更普遍的问题,不管它是什么。可能我遗漏了一些明显的东西(我对这一切都是新手!),但我将尝试几个实验来缩小范围…:-)感谢igorti的建议-我尝试过以防万一,但我不认为我有同样的问题。。。正如我在上面的回答中所说,似乎我在识别“第二”页上的事件时遇到了一个更普遍的问题,不管它是什么。可能我遗漏了一些明显的东西(我对这一切都是新手!),但我将尝试几个实验来缩小范围…:-)