গুগল ম্যাপস এপিআই একাধিক চিহ্নিতকারীকে ইনফাউন্ডো সহ


94

আমি ক্লিক করার সময় সামনে আসা প্রতিটি তার নিজস্ব ইনফিনডো সহ একাধিক মার্কার যুক্ত করার চেষ্টা করছি। ইনফাইন্ডাউসগুলি নিয়ে আসতে আমার সমস্যা হচ্ছে, যখন আমি চেষ্টা করে দেখি তবে হয় একটি ইনফাইন্ডো ছাড়াই কেবল একটি মার্কার দেখায়।

ধন্যবাদ, আপনার আরও কিছু তথ্যের প্রয়োজন হলে আমাকে জানান

<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>

4
চিহ্নিতকারীদের আগে তৈরি হওয়া কেবলমাত্র একটি ইনফাইন্ডো ব্যবহার করুন। তারপরে প্রতিটি চিহ্নিতকারীর জন্য আপনার ক্লিক ইভেন্ট সঠিকভাবে কাজ করবে। contentআপনার ইভেন্ট শ্রোতার ভিতরে পরিবর্তনশীল function ফাংশনের মধ্যে সংজ্ঞায়িত করা হয়নি।
js1568

4
একটি তাত্ক্ষণিক মন্তব্য হিসাবে, আপনি যদি আপনার কোডটি ভালভাবে ফর্ম্যাট করেন তবে এটি পড়া অনেক সহজ।
paullb

4
@ পাউলব আমি এটির পুনরায় ফর্ম্যাট করব, আমি এই প্রশ্নটি লিখেছিলাম 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));  

এখানে ডেমো রয়েছে


4
আমি এই কাজটি পেয়েছি তবে আমি কোডটি কীভাবে পরিবর্তন করব যাতে আমি যখন অন্য মার্কারটিতে ক্লিক করি তখন এটি একটি ইনফাইন্ডো খোলে যা পূর্বে খোলা ইনফাইন্ডোকে প্রতিস্থাপন করে, প্রতিবার যখন আমি অন্য চিহ্নিতকারীকে ক্লিক করি তখন নিয়মিতভাবে আরও ইনডিফিন্ডো খোলার পরিবর্তে?
রেলসি

এটি কাজ করে! তবে কেউ দয়া করে আমাকে ব্যাখ্যা করতে পারেন কেন এটি এভাবে কাজ করছে?
লক্ষ্যা

4
@ লক্ষ্যা আপনি এখানে
ইঞ্জিনিয়ার

4
এই ক্ষেত্রে, আপনি যখন মানচিত্রের বাইরের অংশে ক্লিক করবেন তখন কীভাবে একজন অবতরণ বন্ধ করবেন?
রোহিত তিগগা

কিভাবে বন্ধ বন্ধ? infowindow.close()কাজ করবেন না
মোকিএসআরবি

10

এখানে কোড স্নিপেট যা নিশ্চিতভাবে কাজ করবে। কাজ করার জন্য নীচের লিঙ্কটি দেখতে পারেন jsFood এবং বিশদ বিবরণ। নিখুঁত জুম সহ Google মানচিত্রে একাধিক ঠিকানাগুলি কীভাবে সনাক্ত করা যায়

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));  

6

উত্স লিঙ্ক

ডেমো লিঙ্ক

নিম্নলিখিত কোডটি ইনফো উইন্ডো সহ একাধিক চিহ্নিতকারী প্রদর্শন করবে । আপনি Uncomment কোডের উপর তথ্য প্রদর্শন করতে পারেন উপর কার্সার রেখে দেখুন পাশাপাশি

এখানে চিত্র বর্ণনা লিখুন

            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();
            }

এই সমাধানের প্রয়োজনীয়তা হ'ল ইনফাউইন্ডো এবং মার্কার জন্য কনস্টের ব্যবহার, অন্যথায় এটি কার্যকর হয় না ..
জিম জিমসন

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)

  }

4
google.maps.events.AddListenerহওয়া উচিতgoogle.maps.event.addListener
প্যাট্রিক ইয়ান

আমি TypeError: map.infowindow is undefinedযদি var infowindow = new google.maps.InfoWindow();আমার সূচনা () ফাংশনটির অভ্যন্তরে অন্তর্ভুক্ত করি তবে
ইনভোট করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.