Top Banner
Descripción general de las superposiciones Las superposiciones son objetos del mapa que están vinculados a coordenadas de latitud y longitud, por lo que se mueven al arrastrar el mapa o aplicar el zoom sobre él. Las superposiciones son los objetos que "añades" al mapa para designar puntos, líneas, áreas o grupos de objetos. Google Maps API incorpora varios tipos de superposiciones: Los puntos en el mapa se muestran mediante marcadores. En algunas ocasiones, los marcadores pueden mostrar imágenes de iconos personalizados, que se denominan normalmente "iconos". Los marcadores e iconos son objetos de tipo Marker (para obtener más información, consulta las secciones Marcadores e Iconos que se incluyen más adelante). Las líneas sobre el mapa se muestran mediante polilíneas, que representan una serie ordenada de ubicaciones. Las líneas son objetos de tipo Polyline (para obtener más información, consulta la sección Polilíneas). Las áreas del mapa con forma irregular se muestran mediante polígonos, que son similares a las polilíneas. Al igual que las polilíneas, los polígonos representan una serie ordenada de ubicaciones; la diferencia estriba en que los polígonos definen la región que engloban (para obtener más información, consulta la sección Polígonos incluida más adelante). Las capas de mapa se pueden visualizar mediante los tipos de mapas de superposición. Puedes crear un conjunto de mosaicos personalizado creando tipos de mapas personalizados que reemplacen los conjuntos de mosaicos de mapas base o se muestren sobre conjuntos de mosaicos de mapas base existentes en forma de superposiciones (para obtener más información, consulta Tipos de mapas personalizados). La ventana de información es también un tipo de superposición especial para la visualización de contenido (normalmente texto o imágenes) en un globo emergente que se muestra sobre el mapa en una ubicación determinada (para obtener más información, consulta Ventanas de información). Si quieres, también puedes implementar superposiciones personalizadas. Estas superposiciones personalizadas implementan la interfaz OverlayView (para obtener más información, consulta Superposiciones personalizadas). Cómo añadir superposiciones Las superposiciones se suelen añadir al mapa en el momento de su creación; todas las superposiciones definen un objeto Options que se utiliza durante la creación y que permite designar el mapa en el que deben aparecer. También puedes añadir una superposición mediante el método setMap() de la superposición, transmitiéndolo al mapa al que quieres añadir la superposición. var myLatlng = new google.maps.LatLng(-25.363882,131.044922); var mapOptions = { zoom: 4, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP, } var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); var marker = new google.maps.Marker({ position: myLatlng, title:"Hello World!" });
31
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Descripcin general de las superposiciones

    Las superposiciones son objetos del mapa que estn vinculados a coordenadas de latitud y longitud,

    por lo que se mueven al arrastrar el mapa o aplicar el zoom sobre l. Las superposiciones son los

    objetos que "aades" al mapa para designar puntos, lneas, reas o grupos de objetos.

    Google Maps API incorpora varios tipos de superposiciones:

    Los puntos en el mapa se muestran mediante marcadores. En algunas ocasiones, los

    marcadores pueden mostrar imgenes de iconos personalizados, que se denominan

    normalmente "iconos". Los marcadores e iconos son objetos de tipo Marker (para obtener ms informacin, consulta las secciones Marcadores e Iconos que se incluyen ms adelante).

    Las lneas sobre el mapa se muestran mediante polilneas, que representan una serie

    ordenada de ubicaciones. Las lneas son objetos de tipo Polyline (para obtener ms informacin, consulta la seccin Polilneas).

    Las reas del mapa con forma irregular se muestran mediante polgonos, que son similares a

    las polilneas. Al igual que las polilneas, los polgonos representan una serie ordenada de

    ubicaciones; la diferencia estriba en que los polgonos definen la regin que engloban (para

    obtener ms informacin, consulta la seccin Polgonos incluida ms adelante).

    Las capas de mapa se pueden visualizar mediante los tipos de mapas de superposicin.

    Puedes crear un conjunto de mosaicos personalizado creando tipos de mapas personalizados

    que reemplacen los conjuntos de mosaicos de mapas base o se muestren sobre conjuntos de

    mosaicos de mapas base existentes en forma de superposiciones (para obtener ms

    informacin, consulta Tipos de mapas personalizados).

    La ventana de informacin es tambin un tipo de superposicin especial para la

    visualizacin de contenido (normalmente texto o imgenes) en un globo emergente que se

    muestra sobre el mapa en una ubicacin determinada (para obtener ms informacin,

    consulta Ventanas de informacin).

    Si quieres, tambin puedes implementar superposiciones personalizadas. Estas

    superposiciones personalizadas implementan la interfaz OverlayView (para obtener ms informacin, consulta Superposiciones personalizadas).

    Cmo aadir superposiciones

    Las superposiciones se suelen aadir al mapa en el momento de su creacin; todas las

    superposiciones definen un objeto Options que se utiliza durante la creacin y que permite designar

    el mapa en el que deben aparecer. Tambin puedes aadir una superposicin mediante el mtodo

    setMap() de la superposicin, transmitindolo al mapa al que quieres aadir la superposicin.

    var myLatlng = new google.maps.LatLng(-25.363882,131.044922);

    var mapOptions = {

    zoom: 4,

    center: myLatlng,

    mapTypeId: google.maps.MapTypeId.ROADMAP,

    }

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var marker = new google.maps.Marker({

    position: myLatlng,

    title:"Hello World!"

    });

  • // To add the marker to the map, call setMap();

    marker.setMap(map);

    Cmo eliminar superposiciones

    Para eliminar una superposicin de un mapa, ejecuta el mtodo setMap() de la superposicin, que

    transmite el valor null. Ten en cuenta que, al utilizar este mtodo, la superposicin no se elimina, sino que simplemente se suprime del mapa. Si lo que quieres es suprimir completamente la

    superposicin, debers eliminarla del mapa y, a continuacin, establecerla en null.

    Si quieres administrar varias superposiciones, debers crear un conjunto que las incluya todas. Una

    vez creado este conjunto, podrs ejecutar setMap() en cada superposicin del conjunto cuando necesites eliminarlas. Ten en cuenta que, al contrario de lo que ocurra en la versin 2, no existe

    ningn mtodo clearOverlays(); es el usuario el que debe realizar un seguimiento de las superposiciones y eliminarlas del mapa cuando ya no sean necesarias. Para suprimir

    superposiciones, puedes eliminarlas del mapa y establecer el valor length del conjunto en 0, que elimina cualquier referencia hecha a las superposiciones.

    En el ejemplo siguiente, se colocan marcadores en un mapa al hacer clic en l y los incluye en un

    conjunto. Despus las superposiciones se pueden borrar, mostrar o suprimir:

    var map;

    var markersArray = [];

    function initialize() {

    var haightAshbury = new google.maps.LatLng(37.7699298, -122.4469157);

    var mapOptions = {

    zoom: 12,

    center: haightAshbury,

    mapTypeId: google.maps.MapTypeId.TERRAIN

    };

    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

    google.maps.event.addListener(map, 'click', function(event) {

    addMarker(event.latLng);

    });

    }

    function addMarker(location) {

    marker = new google.maps.Marker({

    position: location,

    map: map

    });

    markersArray.push(marker);

    }

    // Removes the overlays from the map, but keeps them in the array

    function clearOverlays() {

    if (markersArray) {

    for (i in markersArray) {

    markersArray[i].setMap(null);

    }

    }

    }

    // Shows any overlays currently in the array

  • function showOverlays() {

    if (markersArray) {

    for (i in markersArray) {

    markersArray[i].setMap(map);

    }

    }

    }

    // Deletes all markers in the array by removing references to them

    function deleteOverlays() {

    if (markersArray) {

    for (i in markersArray) {

    markersArray[i].setMap(null);

    }

    markersArray.length = 0;

    }

    }

    Ver ejemplo (overlay-remove.html)

    Smbolos

    Un elemento Symbol es una imagen basada en vectores que se puede mostrar tanto en un objeto

    Marker como Polyline. Los smbolos vienen definidos por una ruta (mediante la notacin de ruta SVG) y las opciones que controlan cmo se mostrar el smbolo. Existen varios smbolos

    predefinidos que estn disponibles a travs de la clase SymbolPath. Aunque path es la nica

    propiedad requerida, la clase Symbol admite gran variedad de propiedades que te permiten personalizar aspectos visuales, como el grosor y el color de fondo del trazo.

    Para obtener ms informacin sobre cmo mostrar o animar smbolos en una lnea, consulta la

    documentacin sobre smbolos en polilneas. Para obtener ms informacin sobre cmo utilizar una

    imagen de marcador, consulta la documentacin sobre imgenes vectoriales que aparece a

    continuacin.

    El objeto Symbol admite las propiedades que se indican a continuacin. Ten en cuenta que el

    comportamiento predeterminado de Symbol vara ligeramente en funcin de si aparece en un marcador o en una polilnea.

    path (obligatoria) especifica la ruta que define la forma del smbolo. Puedes utilizar una de las rutas predefinidas en google.maps.SymbolPath o definir una ruta personalizada mediante

    la notacin de ruta SVG. Nota: las rutas vectoriales en una polilnea deben estar incluidas en

    un cuadrado de 22x22 pxeles. Si tu ruta incluye puntos fuera de este cuadrado, tendrs que

    ajustar la propiedad de escala a un valor fraccional (por ejemplo, 0,2) para que el resultado

    de los puntos de la escala estn dentro del cuadrado.

    anchor especifica la posicin del smbolo en relacin con el marcador o la polilnea. Las coordenadas X e Y del anclaje convierten las coordenadas de la ruta del smbolo en

    izquierda y arriba respectivamente. De forma predeterminada, los smbolos se anclan a

    elementos (0, 0). La posicin se expresa en el mismo sistema de coordenadas que la ruta del smbolo.

    fillColor especifica el color de relleno. Se admiten todos los colores CSS3 con excepcin de los colores expresados mediante nombres. Para los marcadores de smbolos, el color

  • predeterminado es el negro. Para los smbolos en polilneas, el color predeterminado es el

    color de trazo de la polilnea correspondiente.

    fillOpacity indica la opacidad del relleno del smbolo con un valor entre 0 y 1. El valor

    predeterminado es 0.

    rotation especifica el ngulo de rotacin del smbolo expresado en sentido de las agujas del reloj y en grados. De forma predeterminada, los marcadores de smbolos tienen una

    rotacin de 0 y los smbolos en polilneas definen su rotacin segn el ngulo del borde en

    el que se sitan. Al establecer la rotacin de un smbolo en una polilnea, se fijar la rotacin

    del smbolo de forma que ya no pueda seguir la curva de la lnea.

    scale especifica la escala de tamao que se aplica al smbolo. Para los marcadores de smbolos, el valor predeterminado es 1; una vez aplicada la escala, el smbolo puede tener

    cualquier tamao. Para los smbolos en polilneas, el valor predeterminado es el grosor del

    trazo de la polilnea; una vez aplicada la escala, el smbolo debe quedar comprendido en un

    cuadrado de 22x22 pxeles, centrado en el anclaje del smbolo.

    strokeColor especifica el color de trazo del smbolo. Se admiten todos los colores CSS3 con excepcin de los colores expresados mediante nombres. Para los marcadores de

    smbolos, el color predeterminado es el negro. Para los smbolos en polilneas, el color

    predeterminado es el color de trazo de la polilnea.

    strokeOpacity especifica la opacidad del trazo del smbolo con un valor entre 0 y 1. Para los marcadores de smbolos, el valor predeterminado es 1. Para los smbolos en polilneas, el

    valor predeterminado de opacidad de trazo es el correspondiente a la opacidad de trazo de la

    polilnea.

    strokeWeight especifica el grosor del trazo del smbolo. El valor predeterminado es el

    correspondiente al elemento scale del smbolo.

    En el ejemplo que se muestra a continuacin, se crea un smbolo con forma de estrella con un

    relleno amarillo claro y un borde grueso de color amarillo.

    var goldStar = {

    path: 'M 125,5 155,90 245,90 175,145 200,230 125,180 50,230 75,145 5,90 95,90

    z',

    fillColor: "yellow",

    fillOpacity: 0.8,

    scale: 1,

    strokeColor: "gold",

    strokeWeight: 14

    };

    var marker = new google.maps.Marker({

    position: new google.maps.LatLng(-25.363, 131.044),

    icon: goldStar,

    map: map

    });

    Rutas predefinidas

    El API de JavaScript de Google Maps ofrece algunos smbolos integrados que se pueden mostrar en

    marcadores o en polilneas. Los smbolos predeterminados incluyen un crculo y dos tipos de

    flechas. Debido a que la orientacin de un smbolo en una polilnea est fijada, estn disponibles

    tanto las flechas que sealan hacia delante como hacia atrs. Se considera que la que la flecha que

    seala hacia delante sigue la direccin del final de la polilnea. Los smbolos que se incluyen son los

    siguientes:

  • Nombre Descripcin Ejemplo

    google.maps.SymbolPath.CIRCLE Un crculo

    google.maps.SymbolPath.BACKWARD_CLOSED_ARROW Una flecha que seala hacia atrs

    y que est cerrada en todos sus

    lados

    google.maps.SymbolPath.FORWARD_CLOSED_ARROW Una flecha que seala hacia

    delante y que est cerrada en

    todos sus lados

    google.maps.SymbolPath.BACKWARD_OPEN_ARROW Una flecha que seala hacia atrs

    y que est abierta por un lado

    google.maps.SymbolPath.FORWARD_OPEN_ARROW Una flecha que seala hacia

    delante y que est abierta por un

    lado

    Puedes modificar el trazo o el relleno de los smbolos predefinidos utilizando cualquiera de las

    opciones predeterminadas del smbolo.

    Marcadores

    Los marcadores identifican ubicaciones en el mapa. De manera predeterminada, utilizan un icono

    estndar, aunque puedes establecer un icono personalizado dentro del constructor del marcador o

    mediante la ejecucin de setIcon() en el marcador. El constructor google.maps.Marker toma un

    nico objeto literal Marker options que especifica las propiedades iniciales del marcador. A continuacin se indican algunos campos especialmente importantes que se suelen definir al crear un

    marcador.

    position (obligatorio) especifica un valor de LatLng que identifica la ubicacin inicial del marcador.

    map (opcional) especifica el objeto Map en el que se sita el marcador.

    Ten en cuenta que debes especificar el mapa en el que vas a aadir el marcador dentro del

    constructor Marker. Si no especificas este argumento, el marcador se crear, pero no se aadir al

    mapa (o no mostrar). Puedes aadir el marcador ms tarde mediante la ejecucin del mtodo

    setMap() del marcador. Para eliminar un marcador, ejecuta el mtodo setMap() y transmite null como el argumento.

    Los marcadores estn diseados para ser interactivos. De forma predeterminada, reciben eventos

    'click', por ejemplo, y se suelen utilizar dentro de detectores de eventos para abrir ventanas de

    informacin. Puedes establecer la propiedad draggable de un marcador en true para que los usuarios puedan editar el marcador en el mapa.

    En el siguiente ejemplo, se aade un marcador simple a un mapa de Uluru, en el centro de

    Australia:

    var myLatlng = new google.maps.LatLng(-25.363882,131.044922);

    var mapOptions = {

    zoom: 4,

    center: myLatlng,

  • mapTypeId: google.maps.MapTypeId.ROADMAP

    }

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var marker = new google.maps.Marker({

    position: myLatlng,

    map: map,

    title:"Hello World!"

    });

    Este ttulo de Marker se mostrar como informacin sobre la herramienta.

    Si no quieres incluir ninguna opcin del marcador (Marker options) en el constructor del

    marcador, incluye un objeto {} vaco en el ltimo argumento del constructor.

    Ver ejemplo (marker-simple.html)

    Animaciones

    Tambin puedes animar los marcadores de forma que muestren un movimiento dinmico en

    numerosas circunstancias diferentes. La propiedad animation, del tipo google.maps.Animation, especifica la forma en que est animado un marcador. Actualmente, se admiten los siguientes

    valores Animation:

    DROP indica que el marcador debe caer desde la parte superior del mapa hasta su ubicacin definitiva en la que se colocase primero en el mapa. La animacin finalizar una vez el

    marcador empiece a quedarse quieto y animation se restablezca a null. Este tipo de

    animacin se suele especificar durante la creacin del marcador (Marker).

    BOUNCE indica que el marcador debe "rebotar" en el mismo sitio. Un marcador que rebota

    seguir hacindolo hasta que la propiedad animation se defina explcitamente en null.

    Puedes iniciar una animacin en un marcador existente ejecutando setAnimation() en el objeto

    Marker.

    El siguiente ejemplo crea un marcador en Estocolmo (Suecia) con una animacin DROP. Al hacer

    clic en el marcador, se alterna entre una animacin BOUNCE o ninguna animacin:

    var stockholm = new google.maps.LatLng(59.32522, 18.07002);

    var parliament = new google.maps.LatLng(59.327383, 18.06747);

    var marker;

    var map;

    function initialize() {

    var mapOptions = {

    zoom: 13,

    mapTypeId: google.maps.MapTypeId.ROADMAP,

    center: stockholm

    };

    map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    marker = new google.maps.Marker({

  • map:map,

    draggable:true,

    animation: google.maps.Animation.DROP,

    position: parliament

    });

    google.maps.event.addListener(marker, 'click', toggleBounce);

    }

    function toggleBounce() {

    if (marker.getAnimation() != null) {

    marker.setAnimation(null);

    } else {

    marker.setAnimation(google.maps.Animation.BOUNCE);

    }

    }

    Ver ejemplo (marker-animations.html)

    Nota: si tienes varios marcadores, puede que no quieras utilizarlos todos a la vez en el mapa. Puedes

    utilizar setTimeout() para espaciar las animaciones de los marcadores mediante un patrn como el que se indica a continuacin:

    function drop() {

    for (var i =0; i < markerArray.length; i++) {

    setTimeout(function() {

    addMarkerMethod();

    }, i * 200);

    }

    }

    Ver ejemplo (marker-animations-iteration.html)

    Cmo personalizar la imagen de marcador

    Los marcadores permiten definir un icono para que se muestre en lugar del icono predeterminado.

    Para definir un icono, hay que establecer diferentes propiedades que definen el comportamiento

    visual del marcador.

    Iconos sencillos

    En el caso ms bsico, un icono puede simplemente indicar una imagen que se debe utilizar en lugar

    del icono predeterminado con forma de chincheta de Google Maps. Para ello se debe incluir la URL

    de una imagen en la propiedad icon del marcador. En este caso, el API de Google Maps definir automticamente el tamao del icono.

    El fragmento de cdigo del siguiente ejemplo permite crear un icono para indicar la posicin de

    Bondi Beach en Sdney, Australia:

    function initialize() {

    var myLatlng = new google.maps.LatLng(-25.363882,131.044922);

    var mapOptions = {

    zoom: 4,

    center: myLatlng,

    mapTypeId: google.maps.MapTypeId.ROADMAP

  • }

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var image = 'beachflag.png';

    var myLatLng = new google.maps.LatLng(-33.890542, 151.274856);

    var beachMarker = new google.maps.Marker({

    position: myLatLng,

    map: map,

    icon: image

    });

    }

    Ver ejemplo (icon-simple.html)

    Iconos complejos

    Los iconos ms complejos sirven para especificar formas complejas (que indican regiones en las

    que se puede hacer clic), para aadir imgenes de sombra y para especificar el "orden de

    apilamiento" en el que deben aparecer en relacin a las dems superposiciones. Los iconos que se

    especifiquen de este modo deben establecer sus propiedades icon y shadow en un objeto del tipo

    MarkerImage.

    Las imgenes de sombra deben crearse generalmente con un ngulo de 45 grados (hacia arriba y a

    la derecha) desde la imagen principal, y la esquina inferior izquierda de la imagen de sombra debe

    alinearse con la esquina inferior izquierda de la imagen del icono. Las imgenes de sombra deben

    ser imgenes PNG de 24 bits con transparencia alfa, de modo que los lmites de la imagen se

    muestren correctamente en el mapa.

    Los objetos MarkerImage no solo definen una imagen, sino que adems definen el tamao (size) y

    el origen (origin) del icono (por ejemplo, si la imagen en cuestin forma parte de una imagen ms

    grande en un sprite), y el anclaje (anchor) donde debera encontrarse el punto de acceso del icono (que se basa en el origen).

    El fragmento de cdigo del ejemplo que aparece a continuacin permite crear marcadores

    complejos que sealan playas cercanas a Sdney, Australia. Ten en cuenta que el anclaje anchor se

    ha establecido en (0,32) para que corresponda con la base del mstil de la bandera.

    function initialize() {

    var mapOptions = {

    zoom: 10,

    center: new google.maps.LatLng(-33.9, 151.2),

    mapTypeId: google.maps.MapTypeId.ROADMAP

    }

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    setMarkers(map, beaches);

    }

    /**

    * Data for the markers consisting of a name, a LatLng and a zIndex for

    * the order in which these markers should display on top of each

    * other.

    */

  • var beaches = [

    ['Bondi Beach', -33.890542, 151.274856, 4],

    ['Coogee Beach', -33.923036, 151.259052, 5],

    ['Cronulla Beach', -34.028249, 151.157507, 3],

    ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],

    ['Maroubra Beach', -33.950198, 151.259302, 1]

    ];

    function setMarkers(map, locations) {

    // Add markers to the map

    // Marker sizes are expressed as a Size of X,Y

    // where the origin of the image (0,0) is located

    // in the top left of the image.

    // Origins, anchor positions and coordinates of the marker

    // increase in the X direction to the right and in

    // the Y direction down.

    var image = new google.maps.MarkerImage('images/beachflag.png',

    // This marker is 20 pixels wide by 32 pixels tall.

    new google.maps.Size(20, 32),

    // The origin for this image is 0,0.

    new google.maps.Point(0,0),

    // The anchor for this image is the base of the flagpole at 0,32.

    new google.maps.Point(0, 32));

    var shadow = new google.maps.MarkerImage('images/beachflag_shadow.png',

    // The shadow image is larger in the horizontal dimension

    // while the position and offset are the same as for the main image.

    new google.maps.Size(37, 32),

    new google.maps.Point(0,0),

    new google.maps.Point(0, 32));

    // Shapes define the clickable region of the icon.

    // The type defines an HTML element 'poly' which

    // traces out a polygon as a series of X,Y points. The final

    // coordinate closes the poly by connecting to the first

    // coordinate.

    var shape = {

    coord: [1, 1, 1, 20, 18, 20, 18 , 1],

    type: 'poly'

    };

    for (var i = 0; i < locations.length; i++) {

    var beach = locations[i];

    var myLatLng = new google.maps.LatLng(beach[1], beach[2]);

    var marker = new google.maps.Marker({

    position: myLatLng,

    map: map,

    shadow: shadow,

    icon: image,

    shape: shape,

    title: beach[0],

    zIndex: beach[3]

    });

    }

    }

    Ver ejemplo (icon-complex.html)

    Iconos vectoriales

  • Los marcadores admiten la visualizacin tanto de imgenes de trama como de rutas vectoriales,

    denominadas Symbols. Para mostrar una ruta vectorial, transmite un objeto literal Symbol con la

    ruta deseada a la propiedad icon del marcador. Puedes utilizar una de las rutas predefinidas en google.maps.SymbolPath o definir una ruta personalizada mediante la notacin de ruta SVG.

    Para obtener ms informacin sobre imgenes vectoriales en el API de JavaScript de Google Maps,

    consulta la documentacin sobre smbolos.

    El fragmento de cdigo que se muestra en el siguiente ejemplo permite crear un icono mediante una

    de las rutas vectoriales predefinidas. Para obtener ejemplos ms detallados, consulta la

    documentacin sobre smbolos.

    marker = new google.maps.Marker({

    position: new google.maps.LatLng(-25.363882, 131.044922),

    icon: {

    path: google.maps.SymbolPath.CIRCLE,

    scale: 10

    },

    draggable: true,

    map: map

    });

    Polilneas

    La clase Polyline define una superposicin de segmentos lineales conectados sobre el mapa. Un

    objeto Polyline incluye un conjunto de ubicaciones LatLng y crea una serie de segmentos lineales que conectan dichas ubicaciones en una secuencia ordenada.

    Opciones de polilneas

    El constructor Polyline toma un grupo de Polyline options que especifican las coordenadas

    LatLng de la lnea y un conjunto de estilos que definen la forma en que se visualizar la polilnea.

    Los objetos Polyline se representan en el mapa como una serie de lneas rectas. Puedes especificar colores, grosores y niveles de opacidad personalizados que se aplicarn al trazo de la lnea en un

    objeto Polyline options al crear la lnea, o bien cambiar estas propiedades despus de su creacin. A continuacin se indican los estilos de trazo que admiten las polilneas.

    strokeColor especifica un color HTML hexadecimal del formato "#FFFFFF". La clase

    Polyline no admite colores con nombre.

    strokeOpacity especifica un valor fraccional numrico entre 0.0 y 1.0 (predeterminado) correspondiente a la opacidad del color de la lnea.

    strokeWeight especifica el grosor del trazo de la lnea en pxeles.

    Por otra parte, la propiedad editable de una polilnea indica si esa forma pueden editarla los usuarios en el mapa.

    El fragmento de cdigo del siguiente ejemplo permite crear una polilnea de color rojo con un

    grosor de dos pxeles que conecta la ruta del primer vuelo sobre el Pacfico realizado por William

    Kingsford Smith entre Oakland (California, EE.UU.) y Brisbane (Australia):

  • function initialize() {

    var myLatLng = new google.maps.LatLng(0, -180);

    var mapOptions = {

    zoom: 3,

    center: myLatLng,

    mapTypeId: google.maps.MapTypeId.TERRAIN

    };

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var flightPlanCoordinates = [

    new google.maps.LatLng(37.772323, -122.214897),

    new google.maps.LatLng(21.291982, -157.821856),

    new google.maps.LatLng(-18.142599, 178.431),

    new google.maps.LatLng(-27.46758, 153.027892)

    ];

    var flightPath = new google.maps.Polyline({

    path: flightPlanCoordinates,

    strokeColor: "#FF0000",

    strokeOpacity: 1.0,

    strokeWeight: 2

    });

    flightPath.setMap(map);

    }

    Ver ejemplo (polyline-simple.html)

    Conjuntos de polilneas

    Una polilnea define una serie de coordenadas como un conjunto de objetos LatLng. Para recuperar

    estas coordenadas, ejecuta el objeto getPath() de Polyline, que devuelve un conjunto de tipo

    MVCArray. A continuacin se indican una serie de operaciones que permiten manipular e inspeccionar estos conjuntos.

    getAt() devuelve el objeto LatLng como un valor de ndice basado en cero determinado.

    insertAt() inserta un objeto LatLng transmitido en un valor de ndice basado en cero determinado. Ten en cuenta que cualquier coordenada que exista en ese valor de ndice se

    desplazar hacia delante.

    removeAt() elimina un objeto LatLng de un valor de ndice basado en cero determinado.

    Nota: el elemento i de un conjunto no se puede eliminar simplemente mediante la sintaxis

    mvcArray[i], sino que debes utilizar mvcArray.getAt(i).

    El fragmento de cdigo que aparece a continuacin permite crear un mapa interactivo que genera

    una polilnea basada en los clics del usuario. Ten en cuenta que la polilnea solo se muestra cuando

    la propiedad path contiene dos coordenadas LatLng.

    var poly;

    var map;

    function initialize() {

    var chicago = new google.maps.LatLng(41.879535, -87.624333);

    var mapOptions = {

  • zoom: 7,

    center: chicago,

    mapTypeId: google.maps.MapTypeId.ROADMAP

    };

    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

    var polyOptions = {

    strokeColor: '#000000',

    strokeOpacity: 1.0,

    strokeWeight: 3

    }

    poly = new google.maps.Polyline(polyOptions);

    poly.setMap(map);

    // Add a listener for the click event

    google.maps.event.addListener(map, 'click', addLatLng);

    }

    /**

    * Handles click events on a map, and adds a new point to the Polyline.

    * @param {MouseEvent} mouseEvent

    */

    function addLatLng(event) {

    var path = poly.getPath();

    // Because path is an MVCArray, we can simply append a new coordinate

    // and it will automatically appear

    path.push(event.latLng);

    // Add a new marker at the new plotted point on the polyline.

    var marker = new google.maps.Marker({

    position: event.latLng,

    title: '#' + path.getLength(),

    map: map

    });

    }

    Ver ejemplo (polyline-complex.html)

    Smbolos en polilneas

    Puedes aadir imgenes basadas en vectores a una polilnea en forma de smbolo. Para mostrar

    smbolos en una polilnea, establece la propiedad icons[] del objeto PolylineOptions. El

    conjunto icons[] toma uno o ms objetos literales IconSequence que se definen como se indica a

    continuacin:

    icon (obligatorio) indica el icono que se debe representar en la lnea. Para obtener ms informacin sobre cmo personalizar un smbolo, consulta la documentacin sobre

    smbolos.

    offset indica la distancia desde el inicio de la lnea en la que se debe representar el icono. Esta distancia se puede expresar como un porcentaje de longitud de lnea (por ejemplo,

    "50%") o en pxeles (por ejemplo, "50px"). El valor predeterminado es "100%".

    repeat indica la distancia entre iconos consecutivos situados en la lnea. Esta distancia se puede expresar como un porcentaje de longitud de lnea (por ejemplo, "50%") o en pxeles

  • (por ejemplo, "50px"). Para inhabilitar la repeticin del icono, especifica "0". El valor

    predeterminado es 0.

    Si tu polilnea es geodsica, las distancias especificadas para la compensacin y la repeticin se

    calculan en metros de forma predeterminada. Si estableces un valor en pxeles para la

    compensacin o la repeticin, las distancias se calcularn en pxeles en la pantalla.

    Con una combinacin de smbolos y la clase PolylineOptions, puedes controlar en gran medida el

    aspecto de las polilneas en tu mapa. A continuacin se proporcionan algunos ejemplos de personalizaciones que puedes aplicar.

    Flechas

    Utiliza la propiedad IconSequence.offset para aadir flechas al principio o al final de tu

    polilnea. En este ejemplo, al establecer la compensacin en 100%, la flecha se coloca al final de la

    lnea.

    var lineCoordinates = [

    new google.maps.LatLng(22.291, 153.027),

    new google.maps.LatLng(18.291, 153.027)

    ];

    var lineSymbol = {

    path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW

    };

    var line = new google.maps.Polyline({

    path: lineCoordinates,

    icons: [{

    icon: lineSymbol,

    offset: '100%'

    }],

    map: map

    });

    Lneas discontinuas

    Puedes conseguir un efecto de lnea discontinua estableciendo la opacidad de tu polilnea en el 0% y

    dibujando un smbolo opaco a intervalos regulares.

    var lineCoordinates = [

    new google.maps.LatLng(22.291, 153.027),

    new google.maps.LatLng(18.291, 153.027)

    ];

    var lineSymbol = {

    path: 'M 0,-1 0,1',

    strokeOpacity: 1,

    scale: 4

    };

    var line = new google.maps.Polyline({

    path: lineCoordinates,

    strokeOpacity: 0,

    icons: [{

    icon: lineSymbol,

  • offset: '0',

    repeat: '20px'

    }],

    map: map

    });

    Rutas personalizadas

    Los smbolos personalizados te permiten aadir muchas formas diferentes a una polilnea.

    var lineCoordinates = [

    new google.maps.LatLng(22.291, 153.027),

    new google.maps.LatLng(18.291, 153.027)

    ];

    var symbolOne = {

    path: 'M -2,0 0,-2 2,0 0,2 z',

    strokeColor: '#F00',

    fillColor: '#F00',

    fillOpacity: 1

    };

    var symbolTwo = {

    path: 'M -2,-2 2,2 M 2,-2 -2,2',

    strokeColor: '#292',

    strokeWeight: 4

    };

    var symbolThree = {

    path: 'M -1,0 A 1,1 0 0 0 -3,0 1,1 0 0 0 -1,0M 1,0 A 1,1 0 0 0 3,0 1,1 0 0 0

    1,0M -3,3 Q 0,5 3,3',

    strokeColor: '#00F',

    rotation: 0

    };

    var line = new google.maps.Polyline({

    path: lineCoordinates,

    icons: [{

    icon: symbolOne,

    offset: '0%'

    },{

    icon: symbolTwo,

    offset: '50%'

    },{

    icon: symbolThree,

    offset: '100%'

    }

    ],

    map: map

    });

    Smbolos animados

    Los smbolos se pueden animar a lo largo de una ruta mediante una funcin setTimeout() para cambiar la compensacin de un smbolo a intervalos fijos.

    var line;

    function initialize() {

  • var mapOptions = {

    center: new google.maps.LatLng(20.291, 153.027),

    zoom: 6,

    mapTypeId: google.maps.MapTypeId.ROADMAP

    };

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var lineCoordinates = [

    new google.maps.LatLng(22.291, 153.027),

    new google.maps.LatLng(18.291, 153.027)

    ];

    var lineSymbol = {

    path: google.maps.SymbolPath.CIRCLE,

    scale: 8,

    strokeColor: '#393'

    };

    line = new google.maps.Polyline({

    path: lineCoordinates,

    icons: [{

    icon: lineSymbol,

    offset: '100%'

    }],

    map: map

    });

    }

    function animateCircle() {

    var count = 0;

    offsetId = window.setInterval(function() {

    count = (count + 1) % 200;

    var icons = line.get('icons');

    icons[0].offset = (count / 2) + '%';

    line.set('icons', icons);

    }, 20);

    }

    Polgonos

    Los objetos Polygon son similares a los objetos Polyline en el sentido de que constan de una serie de coordenadas en una secuencia ordenada. No obstante, en lugar de tener los extremos abiertos, los

    polgonos estn diseados para definir las regiones con un bucle cerrado. De forma similar a lo que

    ocurre con las polilneas, es posible definir el trazo, lo cual afecta al contorno del polgono; sin

    embargo, al contrario de lo que ocurre con las polilneas, estos ltimos permiten definir una regin

    de relleno en su interior.

    Por otro lado, los objetos Polygon ofrecen la posibilidad de mostrar formas complejas, que incluyen discontinuidades (varios polgonos definidos como uno solo), "donuts" (en los aparecen reas

    poligonales dentro del polgono como si fueran "islas") e intersecciones entre uno o ms polgonos.

    Por esta razn, un solo polgono puede definir varias rutas.

    Opciones de polgonos

  • Al igual que ocurre con las polilneas, puedes definir colores, grosores y niveles de opacidad

    personalizados para el borde del polgono (el "trazo"), as como colores y opacidades

    personalizados para el rea que engloba (el "relleno"). Los colores se deben indicar en estilo HTML

    numrico hexadecimal.

    Dado que un rea poligonal puede incluir varios trazados diferentes, la propiedad paths del objeto

    Polygon especifica un "conjunto de conjuntos" (cada uno de ellos de tipo MVCArray), donde cada

    conjunto define una secuencia diferente de coordenadas LatLng ordenadas.

    Sin embargo, en el caso de los polgonos simples que constan de una sola ruta, puedes construir un

    objeto Polygon con un nico conjunto de coordenadas LatLng para una mayor comodidad. El API de Google Maps convierte este conjunto simple en un "conjunto de conjuntos" despus de su

    creacin al almacenarlo en la propiedad paths de Polygon. De la misma forma, el API proporciona

    mtodos getPath() sencillos para polgonos simples que solo consten de una ruta.

    Nota: aunque crees un polgono de esta forma, sigue siendo necesario que recuperes valores del

    polgono mediante la manipulacin de la ruta como un objeto MVCArray.

    Por otra parte, la propiedad editable de un polgono indica si esa forma pueden editarla los usuarios en el mapa.

    El siguiente fragmento de cdigo permite crear un polgono que representa el Tringulo de las

    Bermudas:

    function initialize() {

    var myLatLng = new google.maps.LatLng(24.886436490787712, -70.2685546875);

    var mapOptions = {

    zoom: 5,

    center: myLatLng,

    mapTypeId: google.maps.MapTypeId.TERRAIN

    };

    var bermudaTriangle;

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var triangleCoords = [

    new google.maps.LatLng(25.774252, -80.190262),

    new google.maps.LatLng(18.466465, -66.118292),

    new google.maps.LatLng(32.321384, -64.75737),

    new google.maps.LatLng(25.774252, -80.190262)

    ];

    // Construct the polygon

    // Note that we don't specify an array or arrays, but instead just

    // a simple array of LatLngs in the paths property

    bermudaTriangle = new google.maps.Polygon({

    paths: triangleCoords,

    strokeColor: "#FF0000",

    strokeOpacity: 0.8,

    strokeWeight: 2,

    fillColor: "#FF0000",

    fillOpacity: 0.35

    });

  • bermudaTriangle.setMap(map);

    }

    Ver ejemplo (polygon-simple.html)

    Cierre automtico de polgonos

    El objeto Polygon del objeto anterior consta de cuatro coordenadas, pero fjate en que la primera y la ltima coordenada corresponden a la misma ubicacin, lo cual permite definir la regin que

    engloba. Sin embargo, en la prctica, dado que lo polgonos definen reas cerradas, no es necesario

    que definas esta ltima coordenada. El API de Google Maps "cierra" automticamente cualquier

    polgono dibujando un trazo que une la ltima coordenada con la primera coordenada de una

    determinada ruta.

    El ejemplo siguiente es idntico al primero, con la excepcin de la ltima coordenada, que se ha

    omitido.

    Ver ejemplo (polygon-autoclose.html)

    Conjuntos de polgonos

    Un polgono especifica su serie de coordenadas como un conjunto de conjuntos, donde cada

    conjunto es de tipo MVCArray. Cada conjunto de "pgina" es un conjunto de coordenadas LatLng

    que especifican una nica ruta. Para recuperar estas coordenadas, ejecuta el mtodo getPaths() de

    Polygon. Dado que el conjunto es un objeto MVCArray, debes manipularlo e inspeccionarlo mediante las operaciones siguientes:

    getAt() devuelve el objeto LatLng como un valor de ndice basado en cero determinado.

    insertAt() inserta un objeto LatLng transmitido en un valor de ndice basado en cero determinado. Ten en cuenta que cualquier coordenada que exista en ese valor de ndice se

    desplazar hacia delante.

    removeAt() elimina un objeto LatLng de un valor de ndice basado en cero determinado.

    Nota: el elemento i de un conjunto no se puede eliminar simplemente mediante la sintaxis

    mvcArray[i], sino que debes utilizar mvcArray.getAt(i).

    El siguiente fragmento de cdigo permite procesar los eventos de clic en el polgono mostrando

    informacin sobre las coordenadas del polgono:

    var map;

    var infoWindow;

    function initialize() {

    var myLatLng = new google.maps.LatLng(24.886436490787712, -70.2685546875);

    var mapOptions = {

    zoom: 5,

    center: myLatLng,

    mapTypeId: google.maps.MapTypeId.TERRAIN

    };

  • var bermudaTriangle;

    map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var triangleCoords = [

    new google.maps.LatLng(25.774252, -80.190262),

    new google.maps.LatLng(18.466465, -66.118292),

    new google.maps.LatLng(32.321384, -64.75737)

    ];

    bermudaTriangle = new google.maps.Polygon({

    paths: triangleCoords,

    strokeColor: "#FF0000",

    strokeOpacity: 0.8,

    strokeWeight: 3,

    fillColor: "#FF0000",

    fillOpacity: 0.35

    });

    bermudaTriangle.setMap(map);

    // Add a listener for the click event

    google.maps.event.addListener(bermudaTriangle, 'click', showArrays);

    infowindow = new google.maps.InfoWindow();

    }

    function showArrays(event) {

    // Since this Polygon only has one path, we can call getPath()

    // to return the MVCArray of LatLngs

    var vertices = this.getPath();

    var contentString = "Bermuda Triangle Polygon";

    contentString += "Clicked Location: " + event.latLng.lat() + "," +

    event.latLng.lng() + "";

    // Iterate over the vertices.

    for (var i =0; i < vertices.length; i++) {

    var xy = vertices.getAt(i);

    contentString += "" + "Coordinate: " + i + "" + xy.lat() +"," +

    xy.lng();

    }

    // Replace our Info Window's content and position

    infowindow.setContent(contentString);

    infowindow.setPosition(event.latLng);

    infowindow.open(map);

    }

    Ver ejemplo (polygon-arrays.html)

    Crculos y rectngulos

    Adems de una clase Polygon genrica, el API de JavaScript de Google Maps incluye clases

    especficas para Circle y Rectangle a fin de simplificar su construccin.

  • Crculos

    Un crculo (Circle) es similar a un polgono (Polygon) en que puedes definir colores, grosores y niveles de opacidad personalizados para el borde del crculo (el "trazo"), as como colores y

    opacidades personalizados para el rea que engloba (el "relleno"). Los colores se deben indicar en

    estilo HTML numrico hexadecimal.

    A diferencia de un polgono (Polygon), no se definen rutas (paths) para un crculo (Circle); en su lugar, un crculo tiene dos propiedades adicionales que definen su forma:

    center especifica los valores de latitud y longitud en Google Maps (google.maps.LatLng) del centro del crculo.

    radius especifica el radio del crculo, en metros.

    Por otra parte, la propiedad editable de un crculo indica si esa forma pueden editarla los usuarios en el mapa.

    El siguiente fragmento de cdigo permite crear un crculo que representa poblaciones de Estados

    Unidos:

    // Create an object containing LatLng, population.

    var citymap = {};

    citymap['chicago'] = {

    center: new google.maps.LatLng(41.878113, -87.629798),

    population: 2842518

    };

    citymap['newyork'] = {

    center: new google.maps.LatLng(40.714352, -74.005973),

    population: 8143197

    };

    citymap['losangeles'] = {

    center: new google.maps.LatLng(34.052234, -118.243684),

    population: 3844829

    }

    var cityCircle;

    function initialize() {

    var mapOptions = {

    zoom: 4,

    center: new google.maps.LatLng(37.09024, -95.712891),

    mapTypeId: google.maps.MapTypeId.TERRAIN

    };

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    for (var city in citymap) {

    // Construct the circle for each value in citymap. We scale population by

    20.

    var populationOptions = {

    strokeColor: "#FF0000",

    strokeOpacity: 0.8,

    strokeWeight: 2,

    fillColor: "#FF0000",

    fillOpacity: 0.35,

    map: map,

  • center: citymap[city].center,

    radius: citymap[city].population / 20

    };

    cityCircle = new google.maps.Circle(populationOptions);

    }

    }

    Ver ejemplo (circle-simple.html)

    Rectngulos

    Un crculo (Rectangle) es similar a un polgono (Polygon) en que puedes definir colores, grosores y niveles de opacidad personalizados para el borde del rectngulo (el "trazo"), as como colores y

    opacidades personalizados para el rea que engloba (el "relleno"). Los colores se deben indicar en

    estilo HTML numrico hexadecimal.

    A diferencia de un polgono (Polygon), no se definen rutas (paths) para un rectngulo

    (Rectangle); en su lugar, un rectngulo tiene una propiedad bounds adicional que define su forma:

    bounds especifica google.maps.LatLngBounds del rectngulo.

    Por otra parte, la propiedad editable de un rectngulo indica si esa forma pueden editarla los usuarios en el mapa.

    El siguiente ejemplo crea un rectngulo a partir de la ventana grfica previa de cualquier evento

    'zoom_changed':

    function initialize() {

    var coachella = new google.maps.LatLng(33.6803003, -116.173894);

    var rectangle;

    var mapOptions = {

    zoom: 11,

    center: coachella,

    mapTypeId: google.maps.MapTypeId.TERRAIN

    };

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    rectangle = new google.maps.Rectangle();

    google.maps.event.addListener(map, 'zoom_changed', function() {

    // Get the current bounds, which reflect the bounds before the zoom.

    var rectOptions = {

    strokeColor: "#FF0000",

    strokeOpacity: 0.8,

    strokeWeight: 2,

    fillColor: "#FF0000",

    fillOpacity: 0.35,

    map: map,

    bounds: map.getBounds()

    };

  • rectangle.setOptions(rectOptions);

    });

    }

    Ver ejemplo (rectangle-simple.html)

    Formas que pueden editar los usuarios

    Todos los tipos de superposiciones de formas (polilneas, polgonos, crculos y rectngulos) se

    pueden configurar como formas que pueden editar los usuarios estableciendo editable en true en las opciones de la forma correspondiente.

    Para que los marcadores se puedan arrastrar, se debe establecer draggable en true en las opciones del marcador correspondiente.

    var circleOptions = {

    center: new google.maps.LatLng(-34.397, 150.644),

    radius: 25000,

    map: map,

    editable: true

    };

    var circle = new google.maps.Circle(circleOptions);

    Cuando una superposicin de forma se configura para que puedan editarla los usuarios, se aaden a

    esa forma una serie de "controles" que permiten que los usuarios cambien la ubicacin, la forma y

    el tamao de la figura en cuestin directamente en el mapa.

    Ver ejemplo (user-editable-shapes.html)

    Los cambios realizados por los usuarios en los objetos no se conservan de una sesin a otra. Para

    guardar los cambios realizados en los polgonos, la informacin se debe obtener y almacenar

    manualmente.

    Cmo editar eventos

    Cuando se edita una forma, se activa un evento una vez finalizada la edicin. A continuacin se

    muestra una tabla de formas y eventos.

    Forma Eventos

    Crculo radius_changed center_changed

    Polgono

    insert_at remove_at set_at

    El detector se debe establecer en la ruta del polgono. Si el polgono tiene varias rutas,

    se debe establecer un detector en cada una.

    Polilnea

    insert_at remove_at set_at

    El detector se debe establecer en la ruta de la polilnea.

  • Rectngulo bounds_changed

    google.maps.event.addListener(circle, 'radius_changed', function() {

    radius = circle.getRadius();

    });

    google.maps.event.addListener(outerPath, 'set_at', function() {

    print('Vertex moved on outer path.');

    });

    google.maps.event.addListener(innerPath, 'insert_at', function() {

    print('Vertex removed from inner path.');

    });

    Biblioteca de dibujo

    Los conceptos que se incluyen en este documento hacen referencia a recursos que solo estn

    disponibles dentro de la biblioteca google.maps.drawing. Al cargar el API de JavaScript de Google Maps, esta biblioteca no cargar de forma predeterminada, pero se debe especificar

    explcitamente mediante la utilizacin de un parmetro de inicializacin libraries. http://maps.googleapis.com/maps/api/js?sensor=false&libraries=drawing

    Para obtener ms informacin, consulta la documentacin sobre las bibliotecas de la versin 3 del

    API de Google Maps.

    La clase DrawingManagerproporciona una interfaz grfica que permite que los usuarios dibujen polgonos, rectngulos, polilneas, crculos y marcadores en el mapa. A continuacin se indica

    cmo se puede crear un objeto DrawingManager:

    var drawingManager = new google.maps.drawing.DrawingManager();

    drawingManager.setMap(map);

    Opciones de DrawingManager

    El constructor de DrawingManagerutiliza un conjunto de opciones que definen el conjunto de controles que se deben mostrar, su posicin y el estado de dibujo inicial.

    La propiedad drawingMode de DrawingManager define el estado de dibujo inicial de DrawingManager. Esta propiedad acepta una constante

    google.maps.drawing.OverlayType. El valor predeterminado es null, que hace que el cursor se encuentre en modo de no dibujo cuando se inicializa DrawingManager.

    La propiedad drawingControl de DrawingManager define la visibilidad de la interfaz de

    seleccin de herramientas de dibujo en el mapa. Esta propiedad admite un valor booleano. Tambin puedes definir la posicin del control y los tipos de superposiciones que se deben

    representar en l mediante la propiedad drawingControlOptions de DrawingManager.

    o position define la posicin del control de dibujo en el mapa y acepta una constante

    google.maps.ControlPosition.

    o drawingModesrepresenta un conjunto de constantes

    google.maps.drawing.OverlayType y define los tipos de superposiciones que se deben incluir en el selector de forma del control de dibujo. Siempre aparecer el

  • icono con forma de mano, que permite que el usuario interacte con el mapa sin

    dibujar.

    A cada tipo de superposicin se le puede asignar un conjunto de propiedades

    predeterminadas que permite definir la apariencia de la superposicin cuando se crea por

    primera vez. Estas propiedades se definen en la propiedad {overlay}Options de cada

    superposicin (donde {overlay} representa el tipo de superposicin). Por ejemplo, la posibilidad de hacer clic, la propiedad zIndex, las propiedades de trazo y las propiedades de

    relleno de un crculo se pueden definir con la propiedad circleOptions. Si se incluyen valores de mapa, ubicacin o tamao, se ignorarn. Para obtener informacin detallada

    sobre cules son las propiedades que se pueden definir, consulta la documentacin de

    referencia del API.

    Sugerencia: para hacer que los usuarios puedan editar una forma una vez creada, se debe

    establecer la propiedad editable en true.

    var drawingManager = new google.maps.drawing.DrawingManager({

    drawingMode: google.maps.drawing.OverlayType.MARKER,

    drawingControl: true,

    drawingControlOptions: {

    position: google.maps.ControlPosition.TOP_CENTER,

    drawingModes: [google.maps.drawing.OverlayType.MARKER,

    google.maps.drawing.OverlayType.CIRCLE]

    },

    markerOptions: {

    icon: new google.maps.MarkerImage('http://www.example.com/icon.png')

    },

    circleOptions: {

    fillColor: '#ffff00',

    fillOpacity: 1,

    strokeWeight: 5,

    clickable: false,

    zIndex: 1,

    editable: true

    }

    });

    drawingManager.setMap(map);

    Ver ejemplo (drawing-tools.html)

    Cmo actualizar el control de las herramientas de dibujo

    Una vez creado, el objeto DrawingManager, se puede actualizar realizando una llamada al mtodo

    setOptions() y especificando nuevos valores.

    drawingManager.setOptions({

    drawingControlOptions: {

    position: google.maps.ControlPosition.BOTTOM_LEFT,

    drawingModes: [google.maps.drawing.OverlayType.MARKER]

    }

    });

    El siguiente fragmento de cdigo permite mostrar u ocultar el control de las herramientas de dibujo:

    // To hide:

    drawingManager.setOptions({

  • drawingControl: false

    });

    // To show:

    drawingManager.setOptions({

    drawingControl: true

    });

    El siguiente fragmento de cdigo permite eliminar el control de las herramientas de dibujo del

    objeto map:

    drawingManager.setMap(null);

    Al ocultar el control de dibujo, no aparece el control de las herramientas de dibujo, pero siguen

    estando disponibles todas las funciones de la clase DrawingManager. De esa forma, si quieres,

    puedes implementar tu propio control. Al eliminar DrawingManager del objeto map, se inhabilitan todas las funciones de dibujo. Para restaurar estas funciones, habr que volver a asociarlo al mapa

    con drawingManager.setMap(map) o crear un nuevo objeto DrawingManager.

    Eventos de dibujo

    Cuando se crea una superposicin de forma, se activan dos eventos:

    un evento {overlay}complete (donde {overlay} representa el tipo de superposicin,

    como circlecomplete, polygoncomplete, etc. y se transmite una referencia a la superposicin como un argumento),

    un evento overlaycomplete (un objeto literal, que contiene el elemento OverlayType y una referencia a la superposicin, se transmite como un argumento).

    google.maps.event.addListener(drawingManager, 'circlecomplete', function(circle)

    {

    var radius = circle.getRadius();

    });

    google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event)

    {

    if (event.type == google.maps.drawing.OverlayType.CIRCLE) {

    var radius = event.overlay.getRadius();

    }

    });

    Ventanas de informacin

    Las ventanas de informacin (InfoWindow) muestran contenido en una ventana flotante situada encima del mapa. La ventana de informacin tiene un aspecto ligeramente parecido al de los

    bocadillos de los cmics. Tiene un rea de contenido y un pico afilado, cuyo extremo se encuentra

    en una ubicacin especificada en el mapa. Puedes ver cmo funcionan las ventanas de informacin

    si haces clic en los marcadores de negocios de Google Maps.

    El constructor InfoWindow utiliza un objeto InfoWindow options , que especifica un conjunto de parmetros iniciales para la visualizacin de la ventana de informacin. La ventana de informacin

    no se aade al mapa cuando se crea. Para mostrar la ventana de informacin, necesitas ejecutar el

    mtodo open() en el objeto InfoWindow, transmitir el mapa (Map) en el que se va a abrir y,

  • opcionalmente, el marcador (Marker) en el que se va a anclar. En caso de que no se especifique

    ningn marcador, la ventana de informacin se abrir en su propiedad position.

    El objeto InfoWindow options es un objeto literal que contiene los siguientes campos:

    content contiene una cadena de texto o un nodo DOM que se mostrar cuando se abra la ventana de informacin.

    pixelOffset contiene una compensacin de la punta de la ventana de informacin con relacin a la ubicacin en la que dicha ventana est anclada. En la prctica, no debe ser

    necesario modificar este campo.

    position contiene el objeto LatLng en el que se ancla esta ventana de informacin. Ten en cuenta que este valor se actualiza automticamente con una nueva posicin cuando se abre

    la ventana de informacin en un marcador.

    maxWidth especifica la anchura mxima en pxeles de la ventana de informacin. De forma predeterminada, las ventanas de informacin se amplan para ajustarse a su contenido y

    ajustan el texto automticamente si la ventana de informacin se ampla hasta cubrir el

    mapa. Si implementas un elemento maxWidth, la ventana de informacin se ajustar de manera automtica para respetar el ancho en pxeles. Cuando se alcanza el ancho mximo, la

    ventana de informacin se puede expandir verticalmente si la pantalla dispone de espacio

    real.

    El contenido de InfoWindow puede incluir una cadena de texto, un fragmento HTML o un elemento

    DOM. Para especificar este contenido, puedes trasmitirlo al constructor InfoWindow options o

    ejecutar setContent() explcitamente en el objeto InfoWindow. Si quieres especificar

    explcitamente el tamao del contenido, puedes utilizar elementos y, si quieres, habilitar el desplazamiento. Ten en cuenta que si no habilitas el desplazamiento y el contenido excede el

    espacio disponible en una ventana de informacin, dicho contenido puede salirse de la ventana de

    informacin.

    Las ventanas de informacin (InfoWindow) pueden adjuntarse a objetos Marker (en cuyo caso su

    posicin se basa en la ubicacin del marcador) o al propio mapa en un objeto LatLng especificado. Si quieres que solo se muestre simultneamente una ventana de informacin (como suele ocurrir en

    Google Maps), crea nicamente una ventana de informacin, que podrs reasignar a diferentes

    ubicaciones o marcadores en funcin de los eventos del mapa (por ejemplo, los clics del usuario).

    Sin embargo, a diferencia de lo que suceda en la versin 2 del API de Google Maps, los mapas

    ahora pueden mostrar varios objetos InfoWindow, si as lo indicas.

    Para cambiar la ubicacin de la ventana de informacin, puedes ejecutar setPosition() explcitamente en la ventana de informacin o bien adjuntarla a un nuevo marcador mediante el

    mtodo InfoWindow.open(). Ten en cuenta que si ejecutas open() sin transmitir un marcador, la

    ventana de informacin (InfoWindow) utilizar la posicin especificada en la construccin mediante

    el objeto InfoWindow options.

    El fragmento de cdigo que aparece a continuacin permite mostrar un marcador en el centro de

    Australia. Al hacer clic en el marcador, aparece la ventana de informacin.

    var myLatlng = new google.maps.LatLng(-25.363882,131.044922);

    var mapOptions = {

    zoom: 4,

    center: myLatlng,

  • mapTypeId: google.maps.MapTypeId.ROADMAP

    }

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var contentString = ''+

    ''+

    ''+

    'Uluru'+

    ''+

    'Uluru, also referred to as Ayers Rock, is a large ' +

    'sandstone rock formation in the southern part of the '+

    'Northern Territory, central Australia. It lies 335 km (208 mi) '+

    'south west of the nearest large town, Alice Springs; 450 km '+

    '(280 mi) by road. Kata Tjuta and Uluru are the two major '+

    'features of the Uluru - Kata Tjuta National Park. Uluru is '+

    'sacred to the Pitjantjatjara and Yankunytjatjara, the '+

    'Aboriginal people of the area. It has many springs, waterholes, '+

    'rock caves and ancient paintings. Uluru is listed as a World '+

    'Heritage Site.'+

    'Attribution: Uluru, '+

    'http://en.wikipedia.org/w/index.php?title=Uluru (last visited June 22,

    2009).'+

    ''+

    '';

    var infowindow = new google.maps.InfoWindow({

    content: contentString

    });

    var marker = new google.maps.Marker({

    position: myLatlng,

    map: map,

    title:"Uluru (Ayers Rock)"

    });

    google.maps.event.addListener(marker, 'click', function() {

    infowindow.open(map,marker);

    });

    Ver ejemplo (infowindow-simple.html)

    A continuacin aparece un ejemplo en el que el elemento maxWidth de la ventana de informacin se ha establecido en 200 pxeles:

    Ver ejemplo (infowindow-simple-max.html)

    Superposiciones de suelo

    Los polgonos son superposiciones que resultan tiles para representar zonas de tamao irregular,

    pero no permiten mostrar imgenes. Si tienes una imagen que quieres colocar en un mapa, puedes

    utilizar un objeto GroundOverlay. El constructor de un objeto GroundOverlay permite especificar

    la URL de una imagen y el objeto LatLngBounds de la imagen en forma de parmetros. La imagen se mostrar en el mapa, dentro de los lmites establecidos y de acuerdo con la proyeccin del mapa.

  • En el ejemplo siguiente, se superpone un mapa antiguo de Newark (Nueva Jersey, EE.UU.) sobre

    uno reciente:

    var newark = new google.maps.LatLng(40.740, -74.18);

    var imageBounds = new google.maps.LatLngBounds(

    new google.maps.LatLng(40.716216,-74.213393),

    new google.maps.LatLng(40.765641,-74.139235));

    var mapOptions = {

    zoom: 13,

    center: newark,

    mapTypeId: google.maps.MapTypeId.ROADMAP

    }

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var oldmap = new google.maps.GroundOverlay(

    "http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg",

    imageBounds);

    oldmap.setMap(map);

    Ver ejemplo (groundoverlay-simple.html)

    Superposiciones personalizadas

    La versin 3 del API de Google Maps proporciona una clase OverlayView para crear tus propias

    superposiciones personalizadas. OverlayView es una clase base que proporciona diferentes mtodos que debes implementar cuando crees tus superposiciones. Esta clase tambin proporciona

    algunos mtodos que hacen posible la conversin entre las coordenadas de pantalla y las

    ubicaciones del mapa.

    Para crear una superposicin personalizada:

    En la propiedad prototype del objeto define una nueva instancia de

    google.maps.OverlayView(). Esto establecer eficazmente la clase de superposicin como subclase.

    Crea un constructor para tu superposicin personalizada y, dentro de dicho constructor,

    establece las propiedades personalizadas en los parmetros de inicializacin.

    Implementa un mtodo onAdd() en tu prototipo y adjunta la superposicin al mapa. Se

    ejecutar OverlayView.onAdd() cuando el mapa est preparado para que se le adjunte la superposicin.

    Implementa un mtodo draw() en tu prototipo y define la visualizacin de tu objeto.

    OverlayView.draw() tambin se ejecutar cuando se muestre el objeto por primera vez.

    Tambin debes implementar un mtodo onRemove() para eliminar cualquier elemento aadido en la superposicin.

    A continuacin seguimos con la explicacin.

    Cmo subclasificar una superposicin

  • Utilizaremos OverlayView para crear una superposicin de imagen sencilla (de forma similar a

    GGroundOverlay en la versin 2 del API). Crearemos un objeto USGSOverlay que contenga una imagen del USGS de una zona en cuestin y los lmites de la imagen.

    var overlay;

    function initialize() {

    var myLatLng = new google.maps.LatLng(62.323907, -150.109291);

    var mapOptions = {

    zoom: 11,

    center: myLatLng,

    mapTypeId: google.maps.MapTypeId.SATELLITE

    };

    var map = new google.maps.Map(document.getElementById("map_canvas"),

    mapOptions);

    var swBound = new google.maps.LatLng(62.281819, -150.287132);

    var neBound = new google.maps.LatLng(62.400471, -150.005608);

    var bounds = new google.maps.LatLngBounds(swBound, neBound);

    // Photograph courtesy of the U.S. Geological Survey

    var srcImage = 'images/talkeetna.png';

    overlay = new USGSOverlay(bounds, srcImage, map);

    }

    A continuacin, crearemos un constructor para esta clase e iniciaremos los parmetros trasmitidos

    como propiedades del nuevo objeto. Adems, necesitaremos establecer como subclase explcita el

    objeto USGSOverlay de OverlayView. Para llevar a cabo esta accin, se establece la propiedad

    prototype de la nueva clase en una instancia de la clase principal (definimos el prototipo como una instancia en vez de definir la propia clase principal, puesto que no queremos modificar la clase

    principal).

    function USGSOverlay(bounds, image, map) {

    // Now initialize all properties.

    this.bounds_ = bounds;

    this.image_ = image;

    this.map_ = map;

    // We define a property to hold the image's

    // div. We'll actually create this div

    // upon receipt of the add() method so we'll

    // leave it null for now.

    this.div_ = null;

    // Explicitly call setMap() on this overlay

    this.setMap(map);

    }

    USGSOverlay.prototype = new google.maps.OverlayView();

    Todava no podemos adjuntar esta superposicin al mapa en el constructor de la superposicin. En

    concreto, tenemos que asegurarnos de que todos los paneles del mapa (que especifican el orden en

    el que se muestran los objetos en un mapa) estn disponibles. De manera oportuna, el API

    proporciona un mtodo ayudante para indicar que esto sucede as. Abordaremos este mtodo en la

    prxima seccin.

  • Cmo inicializar una superposicin

    Cuando la superposicin ya se ha creado y est preparada para mostrarse, tenemos que adjuntarla al

    mapa mediante el DOM del navegador. El API indica que la superposicin se ha aadido al mapa al

    ejecutar el mtodo onAdd() de la superposicin. Para procesar este mtodo, hay que crear un

    elemento para alojar nuestra imagen, aadir un elemento , adjuntarlo al elemento

    y, por ltimo, adjuntar la superposicin a uno de los paneles del mapa, que son nodos dentro del rbol DOM.

    Este conjunto de paneles del tipo MapPanes especifica el orden de apilado de las diferentes capas del mapa. A continuacin se muestran posibles paneles que estn enumerados en el orden en que

    estn apilados de abajo arriba:

    MapPanes.mapPane MapPanes.overlayLayer MapPanes.overlayShadow MapPanes.overlayImage MapPanes.floatShadow MapPanes.overlayMouseTarget MapPanes.floatPane

    Dado que nuestra imagen es una "superposicin de suelo", utilizaremos el panel de mapa

    overlayLayer. Una vez tengamos el panel, le asociaremos nuestro objeto como objeto secundario.

    USGSOverlay.prototype.onAdd = function() {

    // Note: an overlay's receipt of onAdd() indicates that

    // the map's panes are now available for attaching

    // the overlay to the map via the DOM.

    // Create the DIV and set some basic attributes.

    var div = document.createElement('div');

    div.style.border = "none";

    div.style.borderWidth = "0px";

    div.style.position = "absolute";

    // Create an IMG element and attach it to the DIV.

    var img = document.createElement("img");

    img.src = this.image_;

    img.style.width = "100%";

    img.style.height = "100%";

    div.appendChild(img);

    // Set the overlay's div_ property to this DIV

    this.div_ = div;

    // We add an overlay to a map via one of the map's panes.

    // We'll add this overlay to the overlayImage pane.

    var panes = this.getPanes();

    panes.overlayLayer.appendChild(div);

    }

    Cmo dibujar una superposicin

  • Ten en cuenta que en realidad no hemos ejecutado todava ninguna visualizacin especial. El API

    ejecuta un mtodo draw() independiente en la superposicin siempre que necesite dibujar la

    superposicin en el mapa (incluso cuando se aade por primera vez).

    Por tanto, implementaremos este mtodo draw(), recuperaremos el objeto MapCanvasProjection

    de la superposicin mediante getProjection() y calcularemos las coordenadas exactas en las que anclar los puntos inferior izquierdo y superior derecho del objeto, desde los que volveremos a

    definir el tamao del elemento , que a su vez define el tamao de la imagen para que coincida con los lmites que especificamos en el constructor de la superposicin.

    USGSOverlay.prototype.draw = function() {

    // Size and position the overlay. We use a southwest and northeast

    // position of the overlay to peg it to the correct position and size.

    // We need to retrieve the projection from this overlay to do this.

    var overlayProjection = this.getProjection();

    // Retrieve the southwest and northeast coordinates of this overlay

    // in latlngs and convert them to pixels coordinates.

    // We'll use these coordinates to resize the DIV.

    var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());

    var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());

    // Resize the image's DIV to fit the indicated dimensions.

    var div = this.div_;

    div.style.left = sw.x + 'px';

    div.style.top = ne.y + 'px';

    div.style.width = (ne.x - sw.x) + 'px';

    div.style.height = (sw.y - ne.y) + 'px';

    }

    Cmo eliminar una superposicin

    Aadimos tambin un mtodo onRemove() para eliminar perfectamente la superposicin del mapa. Este mtodo se ejecutar automticamente desde el API si alguna vez establecemos la propiedad

    map de la superposicin como null.

    USGSOverlay.prototype.onRemove = function() {

    this.div_.parentNode.removeChild(this.div_);

    this.div_ = null;

    }

    Ver ejemplo (overlay-simple.html)

    Cmo mostrar y ocultar una superposicin

    Si quieres ocultar o mostrar una superposicin en lugar de simplemente crearla o eliminarla, puedes

    implementar tus propios mtodos hide() y show() para ajustar la visibilidad de la superposicin. Tambin puedes desvincular la superposicin del DOM del mapa, aunque el coste de esta operacin

    es algo ms elevado. Ten en cuenta que si vuelves a vincular la superposicin al elemento DOM del

    mapa, se volver a ejecutar el mtodo onAdd() de la superposicin.

    En el siguiente ejemplo se aaden los mtodos hide() (ocultar) y show() (mostrar) al prototipo de

    la superposicin que alterna la visibilidad del elemento del contenedor. Adems, se aade un

  • mtodo toogleDOM() que vincula la superposicin al mapa o la desvincula de este. Ten en cuenta

    que si se establece la visibilidad en "hidden" y, a continuacin, se desvincula el mapa del elemento

    DOM a travs de toggleDOM(), la superposicin volver a ser visible si volvemos a vincular el

    mapa, ya que se vuelve a crear el contenedor en el mtodo onAdd() de la superposicin.

    // Note that the visibility property must be a string enclosed in quotes

    USGSOverlay.prototype.hide = function() {

    if (this.div_) {

    this.div_.style.visibility = "hidden";

    }

    }

    USGSOverlay.prototype.show = function() {

    if (this.div_) {

    this.div_.style.visibility = "visible";

    }

    }

    USGSOverlay.prototype.toggle = function() {

    if (this.div_) {

    if (this.div_.style.visibility == "hidden") {

    this.show();

    } else {

    this.hide();

    }

    }

    }

    USGSOverlay.prototype.toggleDOM = function() {

    if (this.getMap()) {

    this.setMap(null);

    } else {

    this.setMap(this.map_);

    }

    }

    // Now we add an input button to initiate the toggle method

    // on the specific overlay

    Ver ejemplo (overlay-hideshow.html)

    Except as otherwise noted, the content of this page is licensed under the Creative Commons

    Attribution 3.0 License, and code samples are licensed under the Apache 2.0 License. For details,

    see our Site Policies.

    Last updated enero 31, 2013.

    Google

    Condiciones de servicio

    Poltica de privacidad