2014-08-12 4 views
0

У меня есть карта, которая заполняет кнопки из базы данных. И круг. Я хочу узнать, какие другие кнопки находятся в радиусе окружности VE Shape и создать список их адресов.Обнаружение Pushpins внутри формы VE на карте Bing

 function addPushPin(lat, long) { 
    //var point = new Microsoft.Maps.Point(e.getX(), e.getY()); 

    //var pushpinLocation = new(lat, long); 
    var s = new VEShape(VEShapeType.Pushpin, new VELatLong(lat,long)); 


    var customIcon = new VECustomIconSpecification(); 
    //customIcon.TextContent = "yo bana4na4"; 
    customIcon.Image = "http://universidadescancun.com/wp-content/themes/GeoUnis3/images/pinpoint-fiesta.png"; 
    //customIcon.ImageOffset = new VEPixel(); 

    s.SetTitle("First Pin <span style=color:red>Demo Title<>/span>"); 
    s.SetDescription("This comes to the <b>description</b> of pushpin."); 
    s.SetMoreInfoURL("http://dotnetricks.blogspot.com"); 
    s.SetPhotoURL("http://upload.wikimedia.org/wikipedia/commons/8/8a/Banana-Single.jpg"); 

    s.SetCustomIcon(customIcon); 
    s.SetIconAnchor(new VELatLong(lat, long)); 
    map.AddShape(s); 


} 

У меня также есть моя карта, населяющая круг вокруг одной из этих кнопок. Он населен так.

 function getCircleNow(lat, long) { 

    var latin = lat; 
    var lonin = long; 
    var latlong = new VELatLong(latin, lonin); 
    centerPoint = (latlong); 
    //var center = map.GetCenter().toString(); 
    //alert(center); 
    //Get initial circle points 
    var circlePoints = buildCircle(centerPoint.Latitude, centerPoint.Longitude, 50.74); 
    //Build circle 
    circle = new VEShape(VEShapeType.Polygon, circlePoints); 
    circle.HideIcon(); 
    circle.SetLineWidth(2); 
    map.AddShape(circle); 
    //Build mask 
    circleMask = new VEShape(VEShapeType.Polygon, circlePoints); 
    circleMask.HideIcon(); 
    circleMask.Hide(); 
    circleMask.SetLineColor(new VEColor(0, 0, 0, 0.5)); 
    circleMask.SetFillColor(new VEColor(0, 0, 0, 0.0)); 
    circleMask.Primitives[0].symbol.stroke_dashstyle = "Dash"; 
    map.AddShape(circleMask); 


} 

И вот функция buildCircle(), которую он вызывает.

 function buildCircle(latin, lonin, radius) { 
    var locs = new Array(); 
    var lat1 = latin * Math.PI/180.0; 
    var lon1 = lonin * Math.PI/180.0; 
    var d = radius/3956; 
    var x; 
    for (x = 0; x <= 360; x += 10) { 
     var tc = (x/90) * Math.PI/2; 
     var lat = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1) * Math.sin(d) * Math.cos(tc)); 
     lat = 180.0 * lat/Math.PI; 
     var lon; 
     if (Math.cos(lat1) == 0) { 
      lon = lonin; // endpoint a pole 
     } 
     else { 
      lon = ((lon1 - Math.asin(Math.sin(tc) * Math.sin(d)/Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI; 
     } 
     lon = 180.0 * lon/Math.PI; 
     var loc = new VELatLong(lat, lon); 
     locs.push(loc); 
    } 
    return locs; 

} 

Это то, что моя карта выглядит как после того, как я добавил и защелки я заселил круг на карте, с ним вокруг одно из мест, и с радиусом в 50 миль.

What my code populates

, что я хочу быть в состоянии сделать

Я хочу, чтобы иметь возможность использовать либо JavaScript или C#, чтобы обнаружить, что другие PushPins, кроме того, круг вокруг, являются в радиусе центра. Или, проще говоря, какие другие местоположения/кнопки находятся в круге и заполняют список значениями каждого адреса. Я не могу придумать никаких специальных методов, которые могли бы сделать это, чтобы любая помощь была оценена. Это Bing-карты, которые я использую.

ответ

1

Это довольно легко сделать. Возьмем точку центра и радиус окружности необходимо выполнить следующие действия:

Всё. Я также написал статью MSDN об этом для v6 карт Bing давным-давно, но похоже, что она была отключена в автономном режиме, а также вся документация для v6.3 карт Bing.

С учетом всего этого стоит отметить, что Bing Maps V6.3 действительно старый и последний раз обновлялся около 5 или 6 лет назад. Не рекомендуется делать какие-либо новые разработки, но вместо этого использовать версию 7, которая намного мощнее, имеет больше возможностей и значительно меньше с точки зрения размера загрузки. У меня есть руководство по миграции здесь: http://social.technet.microsoft.com/wiki/contents/articles/20958.migrating-bing-maps-v6-3-to-v7.aspx

+0

Я, хотя я использовал версию 7? Разве я не? Большое спасибо, я дам ему шанс, это имеет смысл, поэтому я думаю, что это сработает, и я буду держать вас в курсе. Приветствия. – Benny

+0

Все имена классов, которые вы упоминаете, начинаются с VE. VE означает Virtual Earth, которая была переименована в Bing Maps до выпуска V7. Вместо этого V7 использует пространство имен для таких классов, как Microsoft.Maps.Map. Документацию по V7 можно найти здесь: http://msdn.microsoft.com/en-us/library/gg427610.aspx – rbrundritt