Anterior: , Subir: draw   [Índice general][Índice]

47.4 Funciones y variables para worldmap

Este paquete carga automáticamente el paquete draw.

47.4.1 Variables y Funciones

Global variable: boundaries_array

Valor por defecto: false

boundaries_array es donde el objeto gráfico geomap lee las coordenadas de las líneas fronterizas.

Cada componente de boundaries_array es un array de números decimales en coma flotante representando las coordenadas que definen un segmento poligonal o línea fronteriza.

Véase también geomap.

Función: numbered_boundaries (nlist)

Dibuja una lista de segmentos poligonales (líneas fronterizas), etiquetadas con sus números correspondientes (coordenadas de boundaries_array). Esta función es de mucha ayuda a la hora de definir nuevas entidades geográficas.

Ejemplo:

Mapa de Europa con las fronteras y costas etiquetadas con su componente numérica de boundaries_array.

(%i1) load("worldmap")$
(%i2) european_borders: 
           region_boundaries(-31.81,74.92,49.84,32.06)$
(%i3) numbered_boundaries(european_borders)$
Función: make_poly_continent (continent_name)
Función: make_poly_continent (country_list)

Construye los polígonos necesarios para dibujar un continente o lista de países coloreados.

Ejemplo:

(%i1) load("worldmap")$
(%i2) /* A continent */
      make_poly_continent(Africa)$
(%i3) apply(draw2d, %)$
(%i4) /* A list of countries */
      make_poly_continent([Germany,Denmark,Poland])$
(%i5) apply(draw2d, %)$
Función: make_poly_country (country_name)

Construye los polígonos necesarios para dibujar un país coloreado. En caso de contener islas, un país tendrá asociados varios polígonos.

Ejemplo:

(%i1) load("worldmap")$
(%i2) make_poly_country(India)$
(%i3) apply(draw2d, %)$
Función: make_polygon (nlist)

Devuelve un objeto polygon a partie de una lista de líneas fronterizas y de costas. El argumento nlist debe ser una lista de componentes de boundaries_array.

Ejemplo:

La variable Bhutan (Bután) está definida con los números fronterizos 171, 173 y 1143, de manera que make_polygon([171,173,1143]) concatena los arrays boundaries_array[171], boundaries_array[173] y boundaries_array[1143] y devuelve un objeto polygon apto para ser dibujado por draw. A fin de evitar mensajes de errores, los arrays deben ser compatibles en el sentido de que dos de ellos consecutivos deben tener dos coordenadas comunes en los extremos. En este ejemplo, las dos primeras componentes de boundaries_array[171] son iguales a las dos últimas de boundaries_array[173], y las dos primeras de boundaries_array[173] coinciden con las dos primeras de boundaries_array[1143]; en conclusión, los números de segmentos poligonales171, 173 y 1143 (en este orden) son compatibles y el polígono coloreado se podrá dibujar.

(%i1) load("worldmap")$
(%i2) Bhutan;
(%o2)                        [[171, 173, 1143]]
(%i3) boundaries_array[171];
(%o3) {Array:  
       #(88.750549 27.14727 88.806351 27.25305 88.901367 27.282221
         88.917877 27.321039)}
(%i4) boundaries_array[173];
(%o4) {Array:
       #(91.659554 27.76511 91.6008 27.66666 91.598022 27.62499
         91.631348 27.536381 91.765533 27.45694 91.775253 27.4161 
         92.007751 27.471939 92.11441 27.28583 92.015259 27.168051
         92.015533 27.08083 92.083313 27.02277 92.112183 26.920271
         92.069977 26.86194 91.997192 26.85194 91.915253 26.893881
         91.916924 26.85416 91.8358 26.863331 91.712479 26.799999 
         91.542191 26.80444 91.492188 26.87472 91.418854 26.873329
         91.371353 26.800831 91.307457 26.778049 90.682457 26.77417
         90.392197 26.903601 90.344131 26.894159 90.143044 26.75333
         89.98996 26.73583 89.841919 26.70138 89.618301 26.72694 
         89.636093 26.771111 89.360786 26.859989 89.22081 26.81472
         89.110237 26.829161 88.921631 26.98777 88.873016 26.95499
         88.867737 27.080549 88.843307 27.108601 88.750549 
         27.14727)}
(%i5) boundaries_array[1143];
(%o5) {Array:  
       #(91.659554 27.76511 91.666924 27.88888 91.65831 27.94805 
         91.338028 28.05249 91.314972 28.096661 91.108856 27.971109
         91.015808 27.97777 90.896927 28.05055 90.382462 28.07972
         90.396088 28.23555 90.366074 28.257771 89.996353 28.32333
         89.83165 28.24888 89.58609 28.139999 89.35997 27.87166 
         89.225517 27.795 89.125793 27.56749 88.971077 27.47361
         88.917877 27.321039)}
(%i6) Bhutan_polygon: make_polygon([171,173,1143])$
(%i7) draw2d(Bhutan_polygon)$
Función: region_boundaries (x1,y1,x2,y2)

Detecta los segmentos poligonales almacenados en la variable global boundaries_array totalmente contenidos en el rectángulo de vértices (x1,y1) -superior izquierdo- y (x2,y2) -inferior derecho-.

Ejemplo:

Devuelve los números de los segmentos necesarios para dibujar el sur de Italia.

(%i1) load("worldmap")$
(%i2) region_boundaries(10.4,41.5,20.7,35.4);
(%o2)                [1846, 1863, 1864, 1881, 1888, 1894]
(%i3) draw2d(geomap(%))$
Función: region_boundaries_plus (x1,y1,x2,y2)

Detecta los segmentos poligonales almacenados en la variable global boundaries_array con al menos un vértice dentro del rectángulo definido por los extremos (x1,y1) -superior izquierdo- y (x2,y2) -inferior derecho-.

Ejemplo:

(%i1) load("worldmap")$
(%i2) region_boundaries_plus(10.4,41.5,20.7,35.4);
(%o2) [1060, 1062, 1076, 1835, 1839, 1844, 1846, 1858,
       1861, 1863, 1864, 1871, 1881, 1888, 1894, 1897]
(%i3) draw2d(geomap(%))$

47.4.2 Objetos gráficos

Objeto gráfico: geomap (numlist)
Objeto gráfico: geomap (numlist,3Dprojection)

Dibuja mapas cartográficos en 2D y 3D.

2D

Esta función trabaja junto con la variable global boundaries_array.

El argumento numlist es una lista de números o de listas de números. Todos estos números deben ser enteros mayores o iguales que cero, representando las componentes del array global boundaries_array.

Cada componente de boundaries_array es un array de decimales en coma flotante, las coordenadas de un segmento poligonal o línea fronteriza.

geomap (numlist) toma los enteros de sus argumentos y dibuja los segmentos poligonales asociados de boundaries_array.

Este objeto se ve afectado por las siguientes opciones gráficas: line_width, line_type y color.

Ejemplos:

Un sencillo mapa hecho a mano:

(%i1) load("worldmap")$
(%i2) /* Vertices of boundary #0: {(1,1),(2,5),(4,3)} */
   ( bnd0: make_array(flonum,6),
     bnd0[0]:1.0, bnd0[1]:1.0, bnd0[2]:2.0,
     bnd0[3]:5.0, bnd0[4]:4.0, bnd0[5]:3.0 )$
(%i3) /* Vertices of boundary #1: {(4,3),(5,4),(6,4),(5,1)} */
   ( bnd1: make_array(flonum,8),
     bnd1[0]:4.0, bnd1[1]:3.0, bnd1[2]:5.0, bnd1[3]:4.0,
     bnd1[4]:6.0, bnd1[5]:4.0, bnd1[6]:5.0, bnd1[7]:1.0)$
(%i4) /* Vertices of boundary #2: {(5,1), (3,0), (1,1)} */
   ( bnd2: make_array(flonum,6),
     bnd2[0]:5.0, bnd2[1]:1.0, bnd2[2]:3.0,
     bnd2[3]:0.0, bnd2[4]:1.0, bnd2[5]:1.0 )$
(%i5) /* Vertices of boundary #3: {(1,1), (4,3)} */
   ( bnd3: make_array(flonum,4),
     bnd3[0]:1.0, bnd3[1]:1.0, bnd3[2]:4.0, bnd3[3]:3.0)$
(%i6) /* Vertices of boundary #4: {(4,3), (5,1)} */
   ( bnd4: make_array(flonum,4),
     bnd4[0]:4.0, bnd4[1]:3.0, bnd4[2]:5.0, bnd4[3]:1.0)$
(%i7) /* Pack all together in boundaries_array */
   ( boundaries_array: make_array(any,5),
     boundaries_array[0]: bnd0, boundaries_array[1]: bnd1,
     boundaries_array[2]: bnd2, boundaries_array[3]: bnd3,
     boundaries_array[4]: bnd4 )$
(%i8) draw2d(geomap([0,1,2,3,4]))$

El paquete auxiliar worldmap asigna al array global boundaries_array líneas fronterizas reales en coordenadas (longitud, latitud). Estos datos son de dominio público y proceden de http://www-cger.nies.go.jp/grid-e/gridtxt/grid19.html. El paquete worldmap también define fronteras de países, continentes y líneas costeras a partir de las componentes de boundaries_array (véase el fichero share/draw/worldmap.mac para más información). El paquete worldmap carga automáticamente el paquete draw.

(%i1) load("worldmap")$
(%i2) c1: gr2d(geomap([Canada,United_States,
                       Mexico,Cuba]))$
(%i3) c2: gr2d(geomap(Africa))$
(%i4) c3: gr2d(geomap([Oceania,China,Japan]))$
(%i5) c4: gr2d(geomap([France,Portugal,Spain,
                       Morocco,Western_Sahara]))$
(%i6) draw(columns  = 2,
           c1,c2,c3,c4)$

worldmap se puede utilizar para dibujar países como polígonos. En este caso, ya no será necesario hacer uso del objeto gráfico geomap, pero sí de polygon. Puesto que en este caso se utilizan listas en lugar de arrays, los mapas se reproducirán de forma más lenta. Véanse también make_poly_country y make_poly_continent para comprender el siguiente código.

(%i1) load("worldmap")$
(%i2) mymap: append(
   [color      = white],  /* borders are white */
   [fill_color = red],             make_poly_country(Bolivia),
   [fill_color = cyan],            make_poly_country(Paraguay),
   [fill_color = green],           make_poly_country(Colombia),
   [fill_color = blue],            make_poly_country(Chile),
   [fill_color = "#23ab0f"],       make_poly_country(Brazil),
   [fill_color = goldenrod],       make_poly_country(Argentina),
   [fill_color = "midnight-blue"], make_poly_country(Uruguay))$
(%i3) apply(draw2d, mymap)$

3D

geomap (numlist) proyecta los mapas sobre la esfera de radio 1 y centro (0,0,0). Es posible cambiar la esfera o el tipo de proyección haciendo uso de geomap (numlist,3Dprojection).

Proyecciones 3D disponibles:

  • [spherical_projection,x,y,z,r]: proyecta los mapas sobre la esfera de radio r y centro (x,y,z).
    (%i1) load("worldmap")$
    (%i2) draw3d(geomap(Australia), /* default projection */
                 geomap(Australia,
                        [spherical_projection,2,2,2,3]))$
    
  • [cylindrical_projection,x,y,z,r,rc]: re-proyecta mapas esféricos sobre el cilindro de radio rc cuyo eje pasa a través de los polos del globo de radio r y centro (x,y,z).
    (%i1) load("worldmap")$
    (%i2) draw3d(geomap([America_coastlines,Eurasia_coastlines],
                        [cylindrical_projection,2,2,2,3,4]))$
    
  • [conic_projection,x,y,z,r,alpha]: re-proyecta mapas esféricos sobre los conos de ángulo alpha, cuyos ejes pasan a través de los polos del globo de radio r y centro (x,y,z). Ambos conos, norte y sur, son tangentes a la esfera.
    (%i1) load("worldmap")$
    (%i2) draw3d(geomap(World_coastlines,
                        [conic_projection,0,0,0,1,90]))$
    

En http://riotorto.users.sf.net/gnuplot/geomap hay ejemplos más elaborados.


Anterior: , Subir: draw   [Índice general][Índice]