繁体   English   中英

OpenLayer弹出窗口,用于从Google电子表格导入的标记

[英]OpenLayer Popups for markers imported from google spreadsheet

我正在寻找一种在当前设置中使用framecloud类型弹出窗口的方法。 不幸的是,我的所有尝试都没有奏效,或者只会对最近放置的制造商起作用。

在尝试使其正常运行的过程中,我已将原始脚本从使用标记转换为使用向量,以放置标记点(如我所见,自定义向量比标记更容易。)

现在,我将使用哪一个我都可以使用,但是经过几天的努力后,我精打细算,需要朝正确方向伸出援助之手。

我的观点是使用tabletop.js从Google电子表格中提取的。 该功能正在按我希望的方式工作,基于我称为“类型”的字段将标记放置在它们各自的图层上。 虽然我感觉可能是Markers类型图层问题的根源,但我不确定如何解决它。

您可以通过这些页面查看编码

(由于位置更改,链接已删除。)

感谢您提前提供的所有帮助。

我终于得到它的工作。 对于处于类似情况的任何人,这是我最后的图层代码。 我的确更改了原始图层的名称,并涂黑了我使用的电子表格,但是更改应该很明显。

//
//// Set 'Markers'
//
            var iconMarker = {externalGraphic: 'http://www.openlayers.org/dev/img/marker.png', graphicHeight: 21, graphicWidth: 16};
            var iconGeo = {externalGraphic: './images/fortress.jpg', graphicHeight: 25, graphicWidth: 25};
            var iconAero = {externalGraphic: './images/aeropolae.jpg', graphicHeight: 25, graphicWidth: 25}; // Image is the creation of DriveByArtist: http://drivebyartist.deviantart.com/

            var vector1 = new OpenLayers.Layer.Vector("1");
            var vector2 = new OpenLayers.Layer.Vector("2");
            var vector3 = new OpenLayers.Layer.Vector("3");


// Pulls map info from Spreadsheet
//*
        Tabletop.init({
          key: 'http://xxxxxxxxxx', //Spreadsheet URL goes here
          callback: function(data, tabletop) { 
            var i,
                dataLength = data.length;

            for (i=0; i<dataLength; i++) { //following are variables from the spreadsheet
                locName = data[i].name;
                locLon = data[i].long;
                locLat = data[i].lat;
                locInfo = data[i].info;
                locType = data[i].type; // Contains the following string in the cell, which provides a pre-determined output based on provided information in the spreadsheet: =ARRAYFORMULA("<h2>"&B2:B&"</h2><b>"&G2:G&"</b><br /> "&C2:C&", "&D2:D&"<br />"&E2:E&if(ISTEXT(F2:F),"<br /><a target='_blank' href='"&F2:F&"'>Read More...</a>",""))

                locLonLat= new OpenLayers.Geometry.Point(locLon, locLat);

               switch(locType)
                {
                case "Geopolae":
                     feature = new OpenLayers.Feature.Vector(
                     locLonLat,
                     {description:locInfo},
                     iconGeo);
                    vector1.addFeatures(feature);        
                  break;
                case "POI":
                  feature = new OpenLayers.Feature.Vector(
                     locLonLat,
                     {description:locInfo},
                     iconMarker);
                    vector2.addFeatures(feature);             
                  break;
                case "Aeropolae":
                  feature = new OpenLayers.Feature.Vector(
                     locLonLat,
                     {description:locInfo},
                     iconAero);
                    vector3.addFeatures(feature);             
                  break;  
                }

              }
          },
          simpleSheet: true 
        });             

            map.addLayers([vector1, vector2, vector3]);

            map.addControl(new OpenLayers.Control.LayerSwitcher());

        //Add a selector control to the vectorLayer with popup functions
        var controls = {
          selector: new OpenLayers.Control.SelectFeature(Array(vector1, vector2, vector3), { onSelect: createPopup, onUnselect: destroyPopup })
        };

        function createPopup(feature) {
          feature.popup = new OpenLayers.Popup.FramedCloud("pop",
              feature.geometry.getBounds().getCenterLonLat(),
              null,
              '<div class="markerContent">'+feature.attributes.description+'</div>',
              null,
              true,
              function() { controls['selector'].unselectAll(); }
          );
          feature.popup.autoSize = true;
          feature.popup.minSize = new OpenLayers.Size(400,100);
          feature.popup.maxSize = new OpenLayers.Size(400,800);
          feature.popup.fixedRelativePosition = true;
          feature.popup.overflow ="auto";
          //feature.popup.closeOnMove = true;
          map.addPopup(feature.popup);
        }

        function destroyPopup(feature) {
          feature.popup.destroy();
          feature.popup = null;
        }

        map.addControl(controls['selector']);
        controls['selector'].activate();

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM