Usuario anónimo  |  Ingresar  |  Regístrate


Inverse Geocoding
Volver a galería de código
Autor: subgurim
Publicado: 30/01/2007
Leído: 72160 veces
Comentarios (0)
Valoracion: 4,105077


/**** Explicación / Description  ****/
Español
Interesante uso del geoCoding inverso. Manejamos el evento de servidor "OnClick", desde donde hacemos la búsqueda de los 10 lugares más cercanos en un radio de 20Km del punto donde hemos clickado.

Los sitios devueltos los mostramos en un marcador que lanza un infoWindow.

Paralelamente, un infowindow muestra el mensaje "loading" hasta que hay respuesta del servidor.


English
Interesting use of the inverse Geocoding. We hand the Onclick server Event, and make a search of the nearest 10 places with a 20 Km radius from the point we have clicked.

Next we show a marker with an infoWindow with the returned places.

Meanwhile we show a loading infoWindow until a server response arrives.


/**** Código de servidor / Server code  ****/
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GMap1.GZoom = 5;
            GMap1.addControl(new GControl(GControl.preBuilt.LargeMapControl));

            StringBuilder sb = new StringBuilder();
            sb.Append("function(marker, point) {");
            GLatLng latlng = new GLatLng("point");
            GInfoWindow window = new GInfoWindow(latlng,
                "<blink>Loading...</blink>");
            sb.Append(window.ToString(GMap1.GMap_Id));
            sb.Append("}");

            GMap1.addListener(new GListener(GMap1.GMap_Id, GListener.Event.click, sb.ToString()));

        }
    }


    protected string GMap1_Click(object s, GAjaxServerEventArgs e)
    {
        inverseGeocodingManager igeoManager = new inverseGeocodingManager(e.point, 20, 10, "es");
        inverseGeocoding iGeos = igeoManager.inverseGeoCodeRequest();

        StringBuilder retorno = new StringBuilder();
        retorno.AppendFormat("{0}.clearOverlays();", e.map);

        GInfoWindow window;
        foreach(geoName geo in iGeos.geonames)
        {
            window = new GInfoWindow(new GMarker(geo.nearestPlacePoint), geo.name);

            retorno.Append(window.ToString(e.map));
        }

        if (iGeos.geonames.Count > 0)
        {
            retorno.AppendFormat("{0}.setZoom(10);", e.map);
            retorno.AppendFormat("{0}.panTo({1});", e.map, iGeos.geonames[0].nearestPlacePoint.ToString("new"));
        }
        return retorno.ToString();
    }   


/**** Código HTML / HTML Code  ****/
        Haz click y espera un momentito ;)
        <br />
        Click the map and Wait a little ;)
        <cc1:GMap ID="GMap1" runat="server" enableServerEvents="True" OnClick="GMap1_Click" />
Powered by Subgurim.NET