0

有人可以帮助我吗,因为我陷入了需要循环 json 并将其作为标记添加到谷歌地图但它只返回 null 的情况

有没有办法将它自动​​连接到 Json,因为我计划有一个 Grid 并将其设置style="display: none;"为隐藏它,然后获取并读取 Grid 中的值

这是我的 Javascript

 <script type="text/javascript">
        var geocoder;
        var map;
        function initialize() {
            var minZoomLevel = 4;
            var zooms = 7;
            geocoder = new google.maps.Geocoder();
            map = new google.maps.Map(document.getElementById('map'), {
                zoom: minZoomLevel,
                center: new google.maps.LatLng(38.50, -90.50),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            });

            // Bounds for North America
            var strictBounds = new google.maps.LatLngBounds(
     new google.maps.LatLng(15.70, -160.50),
     new google.maps.LatLng(68.85, -55.90)
   );

            // Listen for the dragend event
            google.maps.event.addListener(map, 'dragend', function () {
                if (strictBounds.contains(map.getCenter())) return;

                // We're out of bounds - Move the map back within the bounds

                var c = map.getCenter(),
         x = c.lng(),
         y = c.lat(),
         maxX = strictBounds.getNorthEast().lng(),
         maxY = strictBounds.getNorthEast().lat(),
         minX = strictBounds.getSouthWest().lng(),
         minY = strictBounds.getSouthWest().lat();

                if (x < minX) x = minX;
                if (x > maxX) x = maxX;
                if (y < minY) y = minY;
                if (y > maxY) y = maxY;

                map.setCenter(new google.maps.LatLng(y, x));
            });


            // Limit the zoom level
            google.maps.event.addListener(map, 'zoom_changed', function () {
                if (map.getZoom() < minZoomLevel) map.setZoom(minZoomLevel);
            });
        }

        function codeAddress() {
            var address = $('#workerGrid').find("input[name=shiftDay]");
            alert(address);
            $.each(address, function () {

                address.each(function (e) {
                    e.preventDefault();

                    geocoder.geocode({ 'address': address }, function (results, status) {
                        if (status == google.maps.GeocoderStatus.OK) {

                            map.setCenter(results[0].geometry.location);
                            var marker = new google.maps.Marker({
                                map: map,
                                position: results[0].geometry.location,
                                title: address

                            });
                            if (results[0].geometry.viewport) {
                                map.setZoom(10);
                            }

                        }
                        else {
                            alert("Geocode was not successful for the following reason: " + status);
                        }
                    });
                });
            });
        }

        window.onload = function () {
            initialize();
            codeAddress();
        }

    </script>

这是我的 Json :

 public JsonResult LoadWorkerList(string search)
        {
            var workerList = new List<Worker_Address>();

            // check if search string has value
            // retrieve list of workers filtered by search criteria
            var list = (from a in db.Worker_Address
                        where a.LogicalDelete == false
                        select a).ToList();



            List<WorkerAddressInfo> wlist = new List<WorkerAddressInfo>();
            foreach (var row in list)
            {
                WorkerAddressInfo ci = new WorkerAddressInfo
                {
                    ID = row.ID,
                    Worker_ID = row.WorkerID,
                    AddressLine1 = row.Address_Line1 + " " + row.Address_Line2+ " " +row.City + " "+ GetLookupDisplayValById(row.State_LookID),
                    //AddressLine2 = row.Address_Line2,
                    //City = row.City,
                    //State = GetLookupDisplayValById(row.State_LookID),
                    LogicalDelete = row.LogicalDelete

                };
                wlist.Add(ci);
            }

                var wolist = (from a in wlist
                              where a.LogicalDelete == false
                              select a).ToList();
                wlist = wolist;



            return Json(wlist.ToList().OrderBy(p => p.AddressLine1), JsonRequestBehavior.AllowGet);
        }

希望可以有人帮帮我

4

1 回答 1

1

我相信你可以反过来做:获取你的地图,进入配置对象并在那里添加你的标记数组。

我上周工作的小例子(谷歌地图 v3):

proj.root.gmap3({
    marker: {
        values: markersList, // arrGeodesic 
        options: {
            icon: new google.maps.MarkerImage(cfg.markers.custom),
            draggable: false
        }
    }
);

我的标记数组是这样填充的:

// 2.10 Get markers from ajax request
// @param (lat): float value of latitude
// @param (lng): float value of longitude
// @doc (ajax data): http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/
// @doc (JSON.stringify): https://github.com/douglascrockford/JSON-js
ajaxGetMarkers: function (lat, lng) {
    var proj = this,
        json = {};

    if (lat && lng) {
        // param mapping
        json.country = proj.countries.val();
        json.postcode = proj.postcode.val();
        json.latitude = lat.toFixed(12);
        json.longitude = lng.toFixed(12);

        // ajax request
        $.ajax({
            url: cfg.ajaxUrls.locations, // '/GMAPS/Locations.aspx/GetLocations'
            data: JSON.stringify(json)
        }).done(function (data) {
            if (data && data.d) {
                proj.root.gmap3("clear", "markers");
                proj.loadMarkers(data.d.Locationslist);
            }
        });
    }
},

希望它不会使事情复杂化,但这就是我可以用你拥有的数据制作 LngLat 对象的方法......在我的例子中,它有国家和邮政编码......我相信你可以用你的数据实现同样的目标...... .

// 2.9 Load map
// @param (query): array [country, postcode]
loadMap: function (query) {
    var proj = this,
        options, loc, geocoder;

    // init
    if (query.length) {
        // 2.9.1 geocode
        geocoder = new google.maps.Geocoder();

        // 2.9.1 set address
        geocoder.geocode({ address: query.join(" ") }, function (result, status) {
            if (status === google.maps.GeocoderStatus.OK) {
                // center map
                loc = result[0].geometry.location;
                options = $.extend({}, cfg.mapOptions, { center: loc });

                // set map options & markers
                proj.initMap(options);
                proj.ajaxGetMarkers(loc.lat(), loc.lng());
            }
        });
    }
},
于 2013-10-22T09:06:46.770 回答