有人可以帮助我,因为我陷入了需要循环json并将其作为标记添加到谷歌地图的情况,但它只返回null
有没有办法自动将其连接到Json,因为我计划拥有一个网格并将其设置为style="display: none;"
以隐藏它,然后获取并读取网格中的值
这是我的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);
}
希望有人可以帮助我
答案 0 :(得分:1)
我相信你可以反过来做到这一点: 获取地图,进入配置对象并在那里添加标记数组。
我上周工作的一个小例子(google maps 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());
}
});
}
},