Я работаю над некоторыми картами и застрял с чем-то, что кажется довольно простым.
Суть того, что я делаю, это добавление 10 флагов на карту, и мне нужно динамически устанавливать уровень масштабирования и центр карты в зависимости от положения штифтов (карту нужно увеличивать до возможно пока показываю все контакты).
Это работает точно так же, как и ожидалось с MultiMap без какого-либо вмешательства (как и ожидалось), но карта Virtual Earth не играет хорошо. Если я не укажу ему центр широты / долготы, по умолчанию будут показаны все США.
Кто-нибудь может указать мне правильное направление, чтобы заставить это работать?
EDIT:
Хорошо, я смог рассчитать правильный центр, используя следующее в моем контроллере MVC
''# we're going to rock the AVERAGE LAT/LON here
Dim eventCount As Integer = 0
Dim totalLat As Double = 0
Dim totalLon As Double = 0
For Each mel In MapEventList
totalLat += mel.lat
totalLon += mel.lon
eventCount += 1
Next
ViewData("centerLat") = totalLat / eventCount
ViewData("centerLon") = totalLon / eventCount
Теперь я застрял, пытаясь вычислить Лучший уровень масштабирования
РЕДАКТИРОВАТЬ 2:
Итак, я удалил вычисления из моего контроллера и добавил их в свой Javascript. Вес сценария довольно легкий, но расчеты будут выполняться клиентским компьютером, а не моим сервером (полезно, если / когда сайт начнет получать кучу хитов)
$(document).ready(function () {
// Load the Bing Map and populate it
var increment = 0; // used to increment event locations
var sumLat = 0; // used to find the average LAT location
var sumLon = 0; // used to find the average LON location
// Load the initial map
LoadMap();
// loop through all events and place a point on the map
// also add to the sumLat and sumLon variable
$.each(json_object, function () {
increment = ++increment;
sumLat = sumLat + this.lat;
sumLon = sumLon + this.lon;
LoadPoint(this.lat, this.lon, this.title, this.desc, increment);
});
// find the averate Lat and Lon for map centering
var centerLat = sumLat / increment;
var centerLon = sumLon / increment;
LatLon = new VELatLong(centerLat, centerLon);
// Set the new map Center based on the average of all points.
map.SetCenter(LatLon)
});
function LoadMap() {
map = new VEMap('bingMap');
mapOptions = new VEMapOptions
// sets map options for asthetics
mapOptions.DashboardColor = "black";
mapOptions.EnableDashboardLabels = false;
mapOptions.EnableBirdseye = false;
mapOptions.EnableDashboardLabels = false;
// Load the initial map
// note: the LatLon is "null" at this point because we are going to
// center the map later based on the average of all points.
map.LoadMap(null, zoomLevel, null, null, null, false, null, mapOptions);
};
function LoadPoint(lat, lon, title, desc, pinId) {
var point = new VELatLong(lat, lon);
var pin = new VEShape(VEShapeType.Pushpin, point);
pin.SetTitle(title);
pin.SetDescription(desc + "<br /><br />lat: " + lat + " lon: " + lon);
pin.SetCustomIcon("<div class='pinStyle'><div class='pinText'>" + pinId + "</div></div>");
map.AddShape(pin);
};
Однако я все еще пытаюсь рассчитать лучший уровень масштабирования