谷歌地图,coldfusion,动态标记和信息,打开infowindow与页面上的链接

时间:2012-07-23 18:39:54

标签: google-maps-api-3 coldfusion

我有一个自定义谷歌地图,我添加了样式,它是一个带有动态标记的事件地图,我已经让地图工作,它加载所有动态标记和信息,在我的页面上有结果在地图下面,我希望能够点击结果中的链接,这将在地图上打开相关的信息窗口。我一直在使用来自这个article的Raymond Camdens演示,我无法让最后一部分与页面上的链接一起工作(我不得不把脚本的地理编码部分拿出来,因为我不需要它来进行地理编码地址,我使用坐标。)

这是我的代码:

var map;

var lastinfowindow;

function initialize() {


    // Create an array of styles.
  var styles = [
    {
      stylers: [
        { hue: "#0b9cc1" },
        { saturation: -20 }
      ]
    },{
      featureType: "road",
      elementType: "geometry",
      stylers: [
        { lightness: 100 },
        { visibility: "simplified" }
      ]
    },{
      featureType: "administrative.country",
      elementType: "labels",
      stylers: [
        { visibility: "on" }
      ]
    },

    { featureType: "water", 
     elementType: "geometry", 
    stylers: [ { visibility: "on" }, { lightness: -10 }] },
    { featureType: "poi", 
    stylers: [ { visibility: "on" } ] }

  ];

  // Create a new StyledMapType object, passing it the array of styles,
  // as well as the name to be displayed on the map type control.
  var styledMap = new google.maps.StyledMapType(styles,
    {name: "Styled Map"}); 





    var latlng = new google.maps.LatLng(38, -90);
    var mapOptions = {
        zoom: 3,
        center: latlng,
        mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']
    };
    map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);

    var image = 'sp-mark.png';



   latLng = new google.maps.LatLng ('23.00593', '12.65287');
            var marker1 = new google.maps.Marker({
                map: map,
                position: LatLng,
                title: 'Event 1 - 38',
                icon:image
            });

            var infowindow = new google.maps.InfoWindow({
            content: "<h3 class=maph3>Event 1</h3><p>Location: here</p>"
            });

            google.maps.event.addListener(marker, 'click', function() {
             infowindow.open(map,marker);
            });

            marker.gigid = 38;
            marker.infowindow = infowindow;
            markers[markers.length] = marker;

   latLng = new google.maps.LatLng ('57.19173', '-1.7083');
            var marker2 = new google.maps.Marker({
                map: map,
                position: LatLng,
                title: 'Event 2 - 30',
                icon:image
            });

            var infowindow = new google.maps.InfoWindow({
            content: "<h3 class=maph3>Event 2</h3><p>Location: here</p>"
            });

            google.maps.event.addListener(marker, 'click', function() {
             infowindow.open(map,marker);
            });

            marker.gigid = 30;
            marker.infowindow = infowindow;
            markers[markers.length] = marker;

   latLng = new google.maps.LatLng ('56.98083', '1.30056');
            var marker3 = new google.maps.Marker({
                map: map,
                position: LatLng,
                title: 'Event 3 - 32',
                icon:image
            });

            var infowindow = new google.maps.InfoWindow({
            content: "<h3 class=maph3>Event 3</h3><p>Location: here, Ibiza</p>"
            });

            google.maps.event.addListener(marker, 'click', function() {
             infowindow.open(map,marker);
            });

            marker.gigid = 32;
            marker.infowindow = infowindow;
            markers[markers.length] = marker;

   latLng = new google.maps.LatLng ('58.96', '1.39861');
            var marker4 = new google.maps.Marker({
                map: map,
                position: LatLng,
                title: 'Event 4 - 41',
                icon:image
            });

            var infowindow = new google.maps.InfoWindow({
            content: "<h3 class=maph3>Event 4</h3><p>Location: here</p>"
            });

            google.maps.event.addListener(marker, 'click', function() {
             infowindow.open(map,marker);
            });

            marker.gigid = 41;
            marker.infowindow = infowindow;
            markers[markers.length] = marker;

   latLng = new google.maps.LatLng ('-43.92528', '28.42389');
            var marker5 = new google.maps.Marker({
                map: map,
                position: LatLng,
                title: 'Event 5 - 47',
                icon:image
            });

            var infowindow = new google.maps.InfoWindow({
            content: "<h3 class=maph3>Event 5</h3><p>Location: Here</p>"
            });

            google.maps.event.addListener(marker, 'click', function() {
             infowindow.open(map,marker);
            });

            marker.gigid = 47;
            marker.infowindow = infowindow;
            markers[markers.length] = marker;


    //Associate the styled map with the MapTypeId and set it to display.
     map.mapTypes.set('map_style', styledMap);
     map.setMapTypeId('map_style');

    $(".order").click(function() {
        var thisgig = $(this).data("gigid");
        for(var i=0; i<markers.length; i++) {
            if(markers[i].gigid == thisgig) {
                console.log("found my match");
                //get the latlong
                if(lastinfowindow instanceof google.maps.InfoWindow) lastinfowindow.close();
                console.dir(markers[i]);
                map.panTo(markers[i].getPosition());
                markers[i].infowindow.open(map, markers[i]);
                lastinfowindow = markers[i].infowindow;
            }
        }
    });



}

这是链接所在的正文部分:

<body onload="initialize()">

<div id="map_canvas"></div>

<div id="orders">

    <p class="order" data-gigid="38">
    <b>Order 38</b><br/>
    Event 1
    </p>

    <p class="order" data-gigid="30">
    <b>Order 30</b><br/>
    Event 2
    </p>

    <p class="order" data-gigid="32">
    <b>Order 32</b><br/>
    Event 3
    </p>

    <p class="order" data-gigid="41">
    <b>Order 41</b><br/>
    Event 4
    </p>

    <p class="order" data-gigid="47">
    <b>Order 47</b><br/>
    Event 5
    </p>

</div>

</body>

有人可以帮我解决这个问题。

由于

1 个答案:

答案 0 :(得分:0)

如果您的网页中有任何javascript错误,通常无法加载Google地图。你有很多。

这里有语法错误:

var infowindow = new google.maps.InfoWindow({
            content: "<h3 class=maph3>Event 4</h3><p>Location: here</p>
            });

应该是:

var infowindow = new google.maps.InfoWindow({
            content: "<h3 class=maph3>Event 4</h3><p>Location: here</p>"
            });

LatLng需要两个浮点数,而不是两个字符串:

latLng = new google.maps.LatLng ('23.00593', '12.65287');

Javascript区分大小写。所以当你说:

latLng = new google.maps.LatLng ('23.00593', '12.65287');
var marker1 = new google.maps.Marker({
                ...
                position: LatLng
            });

它无法识别 LatLng ,因为您的变量名为 latLng

这里的问题:

marker.gigid = 38;

是你没有名为marker的变量;你有一个名为marker1的变量:

var marker1 = new google.maps.Marker({
                map: map,
                position: LatLng,
                title: 'Event 1 - 38',
                icon:image
            });

为了完整性,这里有一个标记应该如何完成(有更好的方法,但这应该有效): latLng = new google.maps.LatLng(23.00593,12.65287);             var marker1 = new google.maps.Marker({                 地图:地图,                 位置:latLng,                 标题:'事件1 - 38',                 图标:图像             });

        var infowindow = new google.maps.InfoWindow({
          content: "<h3 class=maph3>Event 1</h3><p>Location: here</p>"
        });

        google.maps.event.addListener(marker1, 'click', function() {
         infowindow.open(map,marker1);
        });

        marker1.gigid = 38;
        marker1.infowindow = infowindow;
        markers[markers.length] = marker1;