¡Ayúdanos a traducir esta Web y consigue licencias gratis!
Usuario anónimo  |  Ingresar  |  Regístrate

Cómo...

GeoCoding Avanzado

Para recoger información detallada del sitio que estamos buscando, necesitaremos el Geocoding avanzado.

Usarlo es muy sencillo. Básicamente consiste en pasarle un lugar como parámetro y recoger toda la información que la API de Google nos provee. Hay dos modos de ejecutar esta acción:
  • Si tenemos un GMap instanciado en nuestra página, no hay más que llamar a GMap1.getGeoCodeRequest(...) [geoCodeRequestes obsoleto desde la versión 3].
  • Pero también podemos acceder a un método estático, que no requiere que el GMap esté en la página. Lo único que hay que tener en cuenta es que deberemos pasarle como parámetro nuestro Key de la API de Google. La llamaríamos así: GMap.geoCodeRequest(...).
El método estático devuelve dos tipos de datos. Por una parte está el Geocode (clase estructurada de manera idéntica al XML que Google nos provee) y por otra un string del que podemos elegir su modo (xml, kml, json y csv).

Estos son los parámetros que podemos pasarle a las funciones:
  • Query: lo que estamos buscando.
  • GoogleKey: sólo necesario en caso de usar los métodos estáticos.
  • GeoCode.outputEnum output: donde indicaremos el tipo de datos que queremos que nos devuelva (xml, kml, json y csv). Si no lo definimos nos devolverá el tipo Geocode.
  • baseCountryCode: indicando el código del país obtendremos el resultado en base a su cercanía con éste.
  • viewport: usando GLatLngBounds marca la zona de referencia sobre la que se quiere obtener el resultado.
Accediendo al campo status.code accederemos al mensaje de estado de la búsqueda, por ejemplo para saber qué error ha ocurrido. La definición de los mensajes de estado las encontramos aquí: http://code.google.com/apis/maps/documentation/reference.html#GGeoStatusCode

La clase Geocode la hemos estructurado de manera idéntica al XML que nos provee Google. Veamos un ejemplo de un XML de Google si buscáramos "1600 amphitheatre mtn view ca". Podemos compararla con el ejemplo de código que proveemos y veremos que las clases y sus propiedades son análogas al XML:

<kml>

  <Response>

    <name>1600 amphitheatre mtn view ca</name>

    <Status>

      <code>200</code>

      <request>geocode</request>

    </Status>

    <Placemark>

      <address>

        1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA

      </address>

      <AddressDetails Accuracy="8">

        <Country>

          <CountryNameCode>US</CountryNameCode>

              <AdministrativeArea>

            <AdministrativeAreaName>CA</AdministrativeAreaName>

           <SubAdministrativeArea>

             <SubAdministrativeAreaName>Santa Clara</SubAdministrativeAreaName>

             <Locality>

               <LocalityName>Mountain View</LocalityName>

                   <Thoroughfare>

                 <ThoroughfareName>1600 Amphitheatre Pkwy</ThoroughfareName>

               </Thoroughfare>

               <PostalCode>

                 <PostalCodeNumber>94043</PostalCodeNumber>

               </PostalCode>

             </Locality>

           </SubAdministrativeArea>

         </AdministrativeArea>

       </Country>

     </AddressDetails>

     <Point>

       <coordinates>-122.083739,37.423021,0</coordinates>

     </Point>

   </Placemark>

  </Response>

</kml>



Buscar una dirección


Code.aspx
<asp:Literal ID="Literal1" runat="server">Buscar una dirección</asp:Literal>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Buscar" OnClick="bt_Buscar_Click" />

<div>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
Code.aspx.cs
protected void bt_Buscar_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(tb_Buscar.Text))
{
string Key = System.Configuration.ConfigurationManager.AppSettings.Get("googlemaps.subgurim.net");

GeoCode geocode = GMap.geoCodeRequest(tb_Buscar.Text, Key);

System.Text.StringBuilder sb = new System.Text.StringBuilder();
if ((null != geocode) && geocode.valid)
{
sb.Append("<ul>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.name");
sb.Append("</i>: ");
sb.Append(geocode.name);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Status.code");
sb.Append("</i>: ");
sb.Append(geocode.Status.code);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Status.request");
sb.Append("</i>: ");
sb.Append(geocode.Status.request);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.address");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.address);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.AddressDetails.accuracy");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.AddressDetails.accuracy);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.AddressDetails.Country.CountryNameCode");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.AddressDetails.Country.CountryNameCode);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName");

sb.Append("</i>: ");
sb.Append(geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName);
sb.Append("</li>");

sb.Append("<li>");
sb.Append("<i>");
sb.Append("geocode.Placemark.coordinates");
sb.Append("</i>: ");
sb.Append(geocode.Placemark.coordinates.ToString());
sb.Append("</li>");

sb.Append("</ul>");
} else sb.Append("Ubicación no encontrada"); lb_Buscar.Text = sb.ToString(); } }
Powered by Subgurim.NET