[Bing Maps] Poner un pushpin al resultado del método Find (where)

Desarrollando un callejero para un portal de SharePoint, me he encontrado la necesidad de añadir un pushpin al resultado del método Find que por defecto no lo hace. Es una tarea sencilla pero en mi caso he tenido que estar mirando la documentación y así lo dejo escrito, que tengo mala memoria y seguro que echo mano de ello alguna vez más :)

Si nos fijamos, el último parámetro del método Find, podemos ver que es una función:

callback : Nombre de la función a la que el servidor llama con los resultados de la búsqueda

¿Cual es la firma de esa función?

function (layer, whatResults, whereResults, hasMore)

En este caso particular, no detenedremos en el parámetro whereResults (También puedes usar whatResults para cuando buscas sitios tales como bares, restaurantes…), que es de tipo VEFindResult, donde podremos acceder a su propiedad LatLong que nos devolverá las coordenadas necesarias para crear el pushpin:

map.AddShape(new VEShape(VEShapeType.Pushpin, whereResults[0].LatLong));

 

A continuación os muestro una imagen y el código completo del ejemplo:

image

Código completo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
   <head>
      <title></title>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 
      <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"></script>
      <script type="text/javascript">
        var map = null;
        var index = 0;
        var results = null;
 
        function GetMap()
        {
            map = new VEMap('myMap');
            map.LoadMap();
        }
 
        function FindLocation()
        {
            map.Clear();
            
            try
            {
               results = map.Find(null,
                                  document.getElementById('txtWhere').value,
                                  null,
                                  null,
                                  null,
                                  null,
                                  true,
                                  true,
                                  true,
                                  true,
                                  onSearchCompleted);
            }
            catch(e)
            {
               alert(e.message);
            }
        }
         
        function onSearchCompleted(layer, whatResults, whereResults, hasMore)
        {
            if(whereResults != null)
            {
                map.AddShape(new VEShape(VEShapeType.Pushpin, whereResults[0].LatLong));
            }
        }
      </script>
</head>
<body onload="GetMap();" style="font-family:Arial">
   <div id='myMap' style="position:relative; width:400px; height:400px;"></div>
   Where:
   <input id="txtWhere" type="text" name="txtWhere" value="Toledo, OH"/>
   <input id="find" type="button" value="Find" name="find" onclick="FindLocation();"/>
</body>
</html>

Un saludo

Published 15/12/2009 17:19 por Luis Ruiz Pavón
Archivado en: ,,
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2009/12/15/bing-maps-poner-un-pushpin-al-resultado-del-m-233-todo-find-where.aspx