Google मैप्स एपीआई मल्टीपल मार्कर्स इनफॉवर विंडोज


92

मैं अपने स्वयं के infowindow के साथ कई मार्करों को जोड़ने की कोशिश कर रहा हूं जो क्लिक करने पर सामने आते हैं। मुझे इनफ्लो विंडो के आने से परेशानी हो रही है, जब मैं कोशिश करता हूं कि या तो बिना इनवॉइस के केवल एक मार्कर दिखाई दे।

धन्यवाद, मुझे बताएं कि क्या आपको कुछ और जानकारी चाहिए

<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
<style type="text/css">
html {
    height: 100%
}

body {
    height: 100%;
    margin: 0;
    padding: 0
}

#map_canvas {
    height: 100%
}
</style>
<script type="text/javascript"
    src="http://maps.googleapis.com/maps/api/js?key=AIzaSyB1tbIAqN0XqcgTR1-FxYoVTVq6Is6lD98&sensor=false">
</script>
<script type="text/javascript">

var locations = [
    ['loan 1', 33.890542, 151.274856, 'address 1'],
    ['loan 2', 33.923036, 151.259052, 'address 2'],
    ['loan 3', 34.028249, 151.157507, 'address 3'],
    ['loan 4', 33.80010128657071, 151.28747820854187, 'address 4'],
    ['loan 5', 33.950198, 151.259302, 'address 5']
];

function initialize() {

    var myOptions = {
        center: new google.maps.LatLng(33.890542, 151.274856),
        zoom: 8,
        mapTypeId: google.maps.MapTypeId.ROADMAP

    };
    var map = new google.maps.Map(document.getElementById("default"),
        myOptions);

    setMarkers(map, locations)
}


function setMarkers(map, locations) {

    var marker, i
    for (i = 0; i < locations.length; i++) {

        var loan = locations[i][0]
        var lat = locations[i][1]
        var long = locations[i][2]
        var add = locations[i][3]

        latlngset = new google.maps.LatLng(lat, long);

        var marker = new google.maps.Marker({
            map: map, title: loan, position: latlngset
        });
        map.setCenter(marker.getPosition())

        var content = "Loan Number: " + loan + '</h3>' + "Address: " + add

        var infowindow = new google.maps.InfoWindow()

        google.maps.AddListener(marker, 'click', function (map, marker) {
            infowindow.setContent(content)
            infowindow.open(map, marker)
        });
    }
}


</script>
</head>
<body onload="initialize()">
<div id="default" style="width:100%; height:100%"></div>
</body>
</html>

2
मार्करों से पहले बनाए गए केवल एक infowindow का उपयोग करें। फिर प्रत्येक मार्कर के लिए आपका क्लिक इवेंट सही ढंग से काम करेगा। contentआपके ईवेंट श्रोता के अंदर का चर उस फ़ंक्शन के भीतर परिभाषित नहीं होता है।
js1568

1
एक त्वरित टिप्पणी के रूप में, यदि आप अपने कोड को अच्छी तरह से प्रारूपित करते हैं, तो यह पढ़ना बहुत आसान है।
13

1
@ अंपुलब मैं इसे सुधार दूंगा, मैंने यह सवाल 4 साल पहले लिखा था जब मैं एक नौसिखिया से अधिक था :)
स्टेक्ट्रेस्यो

क्लिक और हॉवर freakyjolly.com/ के
कोड जासूस

जवाबों:


206

आप एक बंद का उपयोग कर सकते हैं। अपना कोड इस तरह संशोधित करें:

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

यहाँ DEMO है


2
मुझे यह काम मिल गया है, लेकिन मैं कोड को कैसे बदलूंगा ताकि जब मैं किसी अन्य मार्कर पर क्लिक करूं तो यह एक infowindow को खोलता है जो उस infowindow को बदल देता है जो पहले खुला था, हर बार जब मैं किसी अन्य मार्कर पर क्लिक करता हूं तो लगातार अधिक infowindows खोलने के बजाय?
'17:

यह काम करता हैं! लेकिन क्या कोई pls मुझे समझा सकता है कि यह इस तरह से काम क्यों कर रहा है?
Lakshay

1
@ लाक्षय आप इसी तरह की समस्या के बारे में यहाँ
इंजीनियर

1
इस स्थिति में, जब आप मानचित्र के बाहर क्लिक करते हैं, तो आपको infowindow को कैसे बंद करना चाहिए?
रोहित तिग्गा

Infowindow को कैसे बंद करें? infowindow.close()काम नहीं करते।
मोकिसआरबी

10

यहाँ कोड स्निपेट दिया गया है जो निश्चित रूप से काम करेगा। आप काम करने वाले jsFiddle और स्पष्टीकरण के लिए नीचे दिए गए लिंक पर जा सकते हैं । कैसे सही ज़ूम के साथ गूगल मैप्स पर कई पते खोजने के लिए

var infowindow = new google.maps.InfoWindow();  
google.maps.event.addListener(marker, 'mouseover', (function(marker) {  
           return function() {  
               var content = address;  
               infowindow.setContent(content);  
               infowindow.open(map, marker);  
           }  
         })(marker));  

5

स्रोत लिंक

डेमो लिंक

निम्नलिखित कोड InfoWindow के साथ कई मार्कर दिखाएगाHover पर जानकारी दिखाने के लिए आप Uncomment code भी लगा सकते हैं

यहाँ छवि विवरण दर्ज करें

            var map;
            var InforObj = [];
            var centerCords = {
                lat: -25.344,
                lng: 131.036
            };
            var markersOnMap = [{
                    placeName: "Australia (Uluru)",
                    LatLng: [{
                        lat: -25.344,
                        lng: 131.036
                    }]
                },
                {
                    placeName: "Australia (Melbourne)",
                    LatLng: [{
                        lat: -37.852086,
                        lng: 504.985963
                    }]
                },
                {
                    placeName: "Australia (Canberra)",
                    LatLng: [{
                        lat: -35.299085,
                        lng: 509.109615
                    }]
                },
                {
                    placeName: "Australia (Gold Coast)",
                    LatLng: [{
                        lat: -28.013044,
                        lng: 513.425586
                    }]
                },
                {
                    placeName: "Australia (Perth)",
                    LatLng: [{
                        lat: -31.951994,
                        lng: 475.858081
                    }]
                }
            ];

            window.onload = function () {
                initMap();
            };

            function addMarkerInfo() {
                for (var i = 0; i < markersOnMap.length; i++) {
                    var contentString = '<div id="content"><h1>' + markersOnMap[i].placeName +
                        '</h1><p>Lorem ipsum dolor sit amet, vix mutat posse suscipit id, vel ea tantas omittam detraxit.</p></div>';

                    const marker = new google.maps.Marker({
                        position: markersOnMap[i].LatLng[0],
                        map: map
                    });

                    const infowindow = new google.maps.InfoWindow({
                        content: contentString,
                        maxWidth: 200
                    });

                    marker.addListener('click', function () {
                        closeOtherInfo();
                        infowindow.open(marker.get('map'), marker);
                        InforObj[0] = infowindow;
                    });
                    // marker.addListener('mouseover', function () {
                    //     closeOtherInfo();
                    //     infowindow.open(marker.get('map'), marker);
                    //     InforObj[0] = infowindow;
                    // });
                    // marker.addListener('mouseout', function () {
                    //     closeOtherInfo();
                    //     infowindow.close();
                    //     InforObj[0] = infowindow;
                    // });
                }
            }

            function closeOtherInfo() {
                if (InforObj.length > 0) {
                    InforObj[0].set("marker", null);
                    InforObj[0].close();
                    InforObj.length = 0;
                }
            }

            function initMap() {
                map = new google.maps.Map(document.getElementById('map'), {
                    zoom: 4,
                    center: centerCords
                });
                addMarkerInfo();
            }

इस समाधान के लिए एक आवश्यकता infowindow और मार्कर के लिए कास्ट का उपयोग है, अन्यथा यह काम नहीं करता है ..
जिम जिमसन

2

अगर आप भी किसी इवेंट में इनवॉइंडो के समापन को बांधना चाहते हैं, तो कुछ इस तरह का प्रयास करें

google.maps.event.addListener(marker,'click', (function(marker,content,infowindow){ 
    return function() {
        infowindow.setContent(content);
        infowindow.open(map,marker);
        windows.push(infowindow)
        google.maps.event.addListener(map,'click', function(){ 
            infowindow.close();
        }); 
    };
})(marker,content,infowindow)); 

0
function setMarkers(map,locations){

for (var i = 0; i < locations.length; i++)
 {  

 var loan = locations[i][0];
 var lat = locations[i][1];
 var long = locations[i][2];
 var add =  locations[i][3];

 latlngset = new google.maps.LatLng(lat, long);

 var marker = new google.maps.Marker({  
          map: map, title: loan , position: latlngset  
 });
 map.setCenter(marker.getPosition());


 marker.content = "<h3>Loan Number: " + loan +  '</h3>' + "Address: " + add;


 google.maps.events.addListener(marker,'click', function(map,marker){
          map.infowindow.setContent(marker.content);
          map.infowindow.open(map,marker);

 });

 }
}

तो ले जाने के var infowindow = new google.maps.InfoWindow()लिए initialize()समारोह:

function initialize() {

    var myOptions = {
      center: new google.maps.LatLng(33.890542, 151.274856),
      zoom: 8,
      mapTypeId: google.maps.MapTypeId.ROADMAP

    };
    var map = new google.maps.Map(document.getElementById("default"),
        myOptions);
    map.infowindow = new google.maps.InfoWindow();

    setMarkers(map,locations)

  }

1
google.maps.events.AddListenerहोना चाहिएgoogle.maps.event.addListener
पैट्रिक यान

मैं TypeError: map.infowindow is undefinedअगर मैं शामिल var infowindow = new google.maps.InfoWindow();मेरी इनिशियलाइज़ () फ़ंक्शन के अंदर
invot
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.