2014-10-17 18 views
0

所以我有(或有)OpenStreetMaps的工作版本,但現在我想添加彈出到地圖上,整個事情打破。這是有關彈出窗口問題的代碼。瘋狂的事情是,我複製並粘貼官方wiki中的代碼,以便得到一個可行的例子。OpenLayers不讓我添加Popup

function init() { 

    map = new OpenLayers.Map('heatmapArea'); 

    var query = new OpenLayers.LonLat(-122.2928337167, 37.5549570333).transform(
        new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); 
    var popup = new OpenLayers.Popup.FramedCloud("Popup", query, null, "Text", null, true); 
    map.addPopup(popup, false); 

    var lat = 39.3138895; 
    var lon = -98.2233523; 
    var zoom = 4; 
    var position = new OpenLayers.LonLat(lon, lat).transform(EPSG_WGS84, EPSG_900913); 
    map.setCenter(position, zoom); 

} 

,因爲它出現在我的瀏覽器控制檯的問題是:

errors

我已刪除,我不認爲這是有關這個問題的代碼,但我可以提供更多的如果是必要的。我廣泛搜索了所有的例子,我發現在我訪問的網站上工作得很好,但是打破了我的地圖,並且對其他人的每個StackOverflow答案似乎對原始海報都很好,但是又一次地打破了我的地圖。

這裏的網站,我試圖複製之一:

http://www.rigacci.org/openlayers/other_examples/markers.html

我非常渴望得到這個問題的解決,任何幫助,將不勝感激。謝謝!

-C.J.

+1

請告訴我們您的完整代碼包括你包含的腳本。 – scai 2014-10-17 06:45:05

+0

正如scai所說,片段不足以診斷,我們需要一個jsfiddle或完整的工作示例。 – 2014-10-17 09:21:49

+0

我會稍微引起爭議,並說我認爲CJ提供了足夠的代碼來強調他的問題 - 你認爲太多的代碼經常會令人困惑?訣竅在於讓示例恰到好處,ref http://sscce.org/ – sifriday 2014-10-17 10:58:06

回答

1

真正瞭解OLAP API的人將能夠正確解釋這一點,但基本上,您的代碼很好,但您需要對其重新排序。在您調用addPopup之前,您需要添加地圖圖層並縮放到某個範圍。我認爲這是因爲addPopup不需要自己的顯式層;它使用地圖圖層;因此在嘗試使用它之前,您需要在地圖上使用地圖圖層。這是有道理的,但我不知道爲什麼你還需要調用zoom/zoomToExtent函數。

這裏有一個小提琴,我試圖離開你的代碼不變地:

http://jsfiddle.net/sifriday/u3j6h97d/3/

而這裏的JS有一些意見:

function init() { 

    var map = new OpenLayers.Map('heatmapArea'); 
    // Add a map layer before trying to use addPopup 
    map.addLayer(new OpenLayers.Layer.OSM()); 

    // Call the zoom function before trying to use addPopup 
    var lat = 39.3138895; 
    var lon = -98.2233523; 
    // I've changed the zoom to 1 so you can immediately see the popup in the small fiddle window 
    var zoom = 1; 
    var position = new OpenLayers.LonLat(lon, lat).transform(
     "EPSG_WGS84", "EPSG_900913" 
    ); 
    map.setCenter(position, zoom); 

    // Finally here's your addPopup code 
    var query = new OpenLayers.LonLat(
     -122.2928337167, 37.5549570333 
    ).transform(
     new OpenLayers.Projection("EPSG:4326"), 
     map.getProjectionObject() 
    ); 
    var popup = new OpenLayers.Popup.FramedCloud(
     "Popup", 
     query, 
     // I added a size to make it fit in the small fiddle window 
     new OpenLayers.Size(100,100), 
     "Text", 
     null, 
     true 
    ); 
    map.addPopup(popup); 
} 
+0

非常好!非常感謝你的例子和解釋,我現在就開始工作。 – 2014-10-17 23:02:02