【问题标题】:Google Maps: Center Auto-Opening infoWindow谷歌地图:中心自动打开信息窗口
【发布时间】:2015-11-07 04:33:08
【问题描述】:

我有一个自动打开的信息窗口,我想将它放在我的 Google 地图上。

我不想以标记本身为中心,而是将标记加上 infoWindow,因为如果单击框时它会自动打开而不是默认打开。

这是我的代码:

    <script>
    function initMap() {
    var occ = {lat: 45.5280879, lng: -122.6630186};
    var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 14,
    draggable: false,
    scrollwheel: false,
    center: occ
    });
    var contentString = '<div id="content" style="font-family: Poppins, sans-serif; padding: 1em;">'+
    '<div id="siteNotice">'+
    '</div>'+
    '<h4 style="margin-bottom: .125em;">The Oregon Convention Center</h4>'+
    '<p>777 NE Martin Luther King Jr Blvd<br>'+
    'Portland, OR 97232<br>'+
    '<a href="https://www.google.com/maps/dir//Oregon+Convention+Center,+777+NE+Martin+Luther+King+Jr+Blvd,+Portland,+OR+97232,+United+States/@45.5280879,-122.6630186,15z/data=!4m12!1m3!3m2!1s0x0:0x610cf37babf5b9df!2sOregon+Convention+Center!4m7!1m0!1m5!1m1!1s0x5495a0adc5ff1af5:0x610cf37babf5b9df!2m2!1d-122.6630186!2d45.5280879" target="_blank">Get directions</a></p>'+
    '</div>';
    var infowindow = new google.maps.InfoWindow({
    content: contentString,
    pixelOffset: new google.maps.Size(0, 15),
    });

    var marker = new google.maps.Marker({
    position: occ,
    map: map,
    title: 'The Oregon Convention Center',
    });

    infowindow.open(map, marker);


    google.maps.event.addDomListener(window, "resize", function() {
    var center = map.getCenter();
    google.maps.event.trigger(map, "resize");
    map.setCenter(center);
    });
    }
    </script>

小提琴:http://jsfiddle.net/kz1hnec0/

我该怎么做?

【问题讨论】:

    标签: google-maps google-maps-api-3 infowindow


    【解决方案1】:

    基于此答案:https://stackoverflow.com/a/10722973/1023562

    创建一个将您的中心偏移一些像素的函数:

    function map_recenter(map,latlng,offsetx,offsety) {
        var point1 = map.getProjection().fromLatLngToPoint(
            (latlng instanceof google.maps.LatLng) ? latlng : map.getCenter()
        );
        var point2 = new google.maps.Point(
            ( (typeof(offsetx) == 'number' ? offsetx : 0) / Math.pow(2, map.getZoom()) ) || 0,
            ( (typeof(offsety) == 'number' ? offsety : 0) / Math.pow(2, map.getZoom()) ) || 0
        );  
        map.setCenter(map.getProjection().fromPointToLatLng(new google.maps.Point(
            point1.x - point2.x,
            point1.y + point2.y
        )));
    }
    

    使用projection_changed 事件调用此函数(因为在此事件发生之前map.getProjection() 不可用):

    google.maps.event.addListenerOnce(map,"projection_changed", function() {
        map_recenter(map, occ, 0, -100);
     });
    

    工作小提琴:http://jsfiddle.net/kz1hnec0/4/

    注意:

    我已将 Y 偏移设置为 -100。如果你知道你的信息窗口有多高(在这种情况下是 155px),那么你可以更精确地传递这个值——我猜这类似于(infoWindow.height + infoWindow.pixelOffset / 2)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2017-05-04
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多