我在从 v2升级到Google Maps v3时遇到问题。特别是MarkerManager。我以前没有使用过地图,并且正在帮助开发者放弃他们的人,他们在 v2 中开发了地图。
该地图将显示最多 100 个标记,单击这些标记会显示一个信息框。(还有一个与结果绑定的 Telerik RadGrid。)这一切似乎都有效,直到它进入DisplayAllMarkers() mgr.addMarkers()(见下文)。它在ProjectionHelperOverlay.prototype.LatLngToPixel中失败,并带有Uncaught TypeError: Cannot call method 'lng' of undefined。如果lat或lng未定义,我已经尝试在AddMarker中放入警报,但没有收到警报。之前对MarkerManager.prototype.addMarkerBatch_的调用将mPoint设置为 undefined,然后将其传递给调用LatLngToPixel的getTilePoint它失败的地方。
我认为这是听众的问题,但是尝试了各种听众都没有成功。我真的很感激这方面的一些帮助,因为我已经有一段时间无法取得进展并且让客户失望并且不知道下一步该尝试什么。
选择 SearchResult.js 代码片段:
$(document).ready(function () {
InitializeMap(originalScale);
});
var map;
var batch = [];
var mgr;
var geocoder = null;
function InitializeMap(scale) {
map = new google.maps.Map(
document.getElementById('MapContainer'), {
center: new google.maps.LatLng(Latitude, Longitude),
zoom: scale,
mapTypeId: google.maps.MapTypeId.ROADMAP,
scrollwheel: false
});
var listener = google.maps.event.addListener(map, "bounds_changed", function () {
MapMoved();
google.maps.event.removeListener(listener);
});
}
var south, west, north, east, zoom;
function MapMoved() {
zoom = map.getZoom();
//zoom = map.setZoom();
var bounds = map.getBounds();
var sw = bounds.getSouthWest();
var ne = bounds.getNorthEast();
south = sw.lat();
west = sw.lng();
north = ne.lat();
east = ne.lng();
Search();
}
搜索();加载搜索参数(包括北、南、东、西坐标)并调用 Telerik ajax 请求。
C# 片段:
if (Properties.Count >= 1 || zoom == "0") //display properties
{
RadAjaxManager1.ResponseScripts.Add("ClearAll();");
Properties.ForEach(p =>
{
string script = "AddMarker(" + p.ID.ToString() + "," + p.LatitudeShort.ToString() + "," + p.LongitudeShort.ToString() + ");";
RadAjaxManager1.ResponseScripts.Add(script);
});
RadAjaxManager1.ResponseScripts.Add("DisplayAllMarkers();");
}
else //zoom out map – which will start the search process all over again.
{
string delta = "1";
RadAjaxManager1.ResponseScripts.Add("ZoomOut(" + delta + ");");
}
SearchResult.js 片段继续:
function ClearAll() {
batch = [];
}
function AddMarker(id, lat, lng) {
batch.push(CreatePropertyMarker(lat, lng, id));
}
function DisplayAllMarkers() {
mgr = new MarkerManager(map, { trackMarkers: true });
google.maps.event.addListener(mgr, 'loaded', function () {
mgr.clearMarkers();
mgr.addMarkers(batch, 3, 17); // **Failing in here!!!**
mgr.refresh();
});
}
function CreatePropertyMarker(lat, lng, id) {
var redIcon3 = {
url: '../images/HouseIcon_ForGoogleMap.png',
size: new google.maps.Size(22, 22),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(0, 22)
};
var marker3 = new google.maps.Marker(new google.maps.LatLng(lat, lng), redIcon3);
google.maps.event.addListener(marker3, 'click', function () {
var data = "{'Id': '" + id + "'}";
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json",
url: 'searchresult.aspx/GetPropertyPopOut',
data: data,
success: function (data) {
var popout = data.d;
marker3.openExtInfoWindow(map, "custom_info_window_red", popout, { beakOffset: -1 });
},
error: function (result) {
alert('status:' + result.status + ' statusText:' + result.statusText);
}
});
});
return marker3;
}
脚本顺序和版本:
- jquery-ui-1.9.1.custom.min.css
- 谷歌地图:v3(我也尝试指定特定的版本 3 编号,例如 v=3.12 http://maps.googleapis.com/maps/api/js?key=MY_KEY&sensor=false
- jquery-1.8.2.js
- jquery-ui-1.9.1.custom.min.js
- extinfowindow.js v2.0
- MarkerManager.js v1.1
- 搜索结果.js
- jquery-ui-1.8.16.custom.min.js
- jquery-1.6.2.min.js