Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 附近搜索的标记仅显示在最后一张地图上_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 附近搜索的标记仅显示在最后一张地图上

Javascript 附近搜索的标记仅显示在最后一张地图上,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我在下面展示了几张地图。首先,我对每个映射都有一个代码,这变得相当大,所以我尝试减少我的代码。 然而,我似乎无法让这最后一件事发挥作用。谷歌附近搜索的结果总是显示在最后一张地图上。是否有一种方法可以在createmarker函数中设置映射,以便将标记设置为正确的映射(map[I])? 我曾尝试将所有地图存储在MarkersArray中,但无法使其正常工作。谢谢 var map; var infoWindow; var service; var re

我在下面展示了几张地图。首先,我对每个映射都有一个代码,这变得相当大,所以我尝试减少我的代码。 然而,我似乎无法让这最后一件事发挥作用。谷歌附近搜索的结果总是显示在最后一张地图上。是否有一种方法可以在createmarker函数中设置映射,以便将标记设置为正确的映射(map[I])? 我曾尝试将所有地图存储在MarkersArray中,但无法使其正常工作。谢谢

var map;
        var infoWindow;
        var service;
        var request;
        var i;

        function initialize()
        {
            for (i = 2; i < locations.length-2; i++) {
                var MapCenter = new google.maps.LatLng(locations[i][1],locations[i][2]); //CENTRE  MAP: N/S, E(lower)/W
                MyOptions =
                {
                    zoom: 12,
                    center: MapCenter,
                    disableDefaultUI:true,
                    scrollwheel:false
                };
                map = new google.maps.Map(document.getElementById('map'+i), MyOptions);
                var weatherLayer = new google.maps.weather.WeatherLayer({
                temperatureUnits: google.maps.weather.TemperatureUnit.Celsius                   });
                weatherLayer.setMap(map);
                var cloudLayer = new google.maps.weather.CloudLayer();
                cloudLayer.setMap(map);
                infoWindow = new google.maps.InfoWindow();
                service = new google.maps.places.PlacesService(map);
                request = {
                    location: MapCenter,
                    radius: 10000,
                    types: ['airport','shopping_mall','subway_station','train_station','museum','place_of_worship','zoo','city_hall','local_government_office']
                };
                service.nearbySearch(request, callback);
            };
        };

        function callback(results, status) {
            if (status != google.maps.places.PlacesServiceStatus.OK) {
                alert(status);
                return;
            }
            for (var j = 0, result; result = results[j]; j++) {
                createMarker(result);
            }
        };

        function createMarker(place) {
            var gpmarker    = new google.maps.MarkerImage(place.icon, null, null, null, new google.maps.Size(place.rating*5, place.rating*5));
            var marker      = new google.maps.Marker({
                map: map,
                position: place.geometry.location,
                title: place.name,
                icon: gpmarker
            });
            google.maps.event.addListener(marker, 'click', function() {
                service.getDetails(place, function(result, status) {
                    if (status != google.maps.places.PlacesServiceStatus.OK) {
                        alert(status);
                        return;
                    }
                    infoWindow.setContent(result.name);
                    infoWindow.open(map, marker);
                });
            });
        };

        google.maps.event.addDomListener(window, 'load', initialize);
var映射;
var信息窗口;
var服务;
var请求;
var i;
函数初始化()
{
对于(i=2;i
当前,您正在覆盖循环内的变量
映射
信息窗口
&
服务
,最后所有变量都将在上一次迭代中分配值

保持变量不变(例如,通过函数使其“私有”),并将这些变量作为参数传递给
callback()
createMarker()

函数初始化(){
对于(i=2;i
谢谢!工作就像一个符咒:)
    function initialize() {

        for (i = 2; i < locations.length - 2; i++) {
            (function (i) {
                var MapCenter = new google.maps.LatLng(locations[i][1], locations[i][2]),
                    MyOptions = {
                        zoom: 12,
                        center: MapCenter,
                        disableDefaultUI: true,
                        scrollwheel: false
                      },
                    map = new google.maps.Map(document.getElementById('map' + i), MyOptions),
                    weatherLayer = new google.maps.weather.WeatherLayer({
                        temperatureUnits: google.maps.weather.TemperatureUnit.Celsius,
                        map: map
                      }),
                    cloudLayer = new google.maps.weather.CloudLayer(),
                    infoWindow = new google.maps.InfoWindow(),
                    service = new google.maps.places.PlacesService(map),
                    request = {
                        location: MapCenter,
                        radius: 10000,
                        types: ['airport',
                            'shopping_mall',
                            'subway_station',
                            'train_station',
                            'museum',
                            'place_of_worship',
                            'zoo', 'city_hall',
                            'local_government_office'
                        ]
                    };
                cloudLayer.setMap(map);
                service.nearbySearch(request, function (results, status) {
                    callback(results, status, map, infoWindow, service)
                });
            }(i))

        };
    };

    function callback(results, status, map, infoWindow, service) {
        if (status != google.maps.places.PlacesServiceStatus.OK) {
            alert(status);
            return;
        }
        for (var j = 0, result; result = results[j]; j++) {
            createMarker(result, map, infoWindow, service);
        }
    };

    function createMarker(place, map, infoWindow, service) {
      //your current code may stay as it is 
    };

    google.maps.event.addDomListener(window, 'load', initialize);