Saltar al contenido

¿Cómo puedo generar una proyección interrumpida de un mapamundi?

Recuerda que en las ciencias informáticas un problema casi siempere puede tener varias soluciones, así que te compartimos lo más óptimo y mejor.

Solución:

Tomaré la interpretación de que desea aplicar la proyección transversal de Mercator a una imagen que tiene que producir algo como el de la página de Wolfram a la que se vinculó. Uno solo necesita hacer algunos cambios en el código en ese enlace. Usaré una imagen diferente, ya que la que está en el OP está recortada de manera incómoda, lo que interferirá con el mapeo.

With[Δ = 30,
     earth = Import["http://i.stack.imgur.com/jteWq.jpg"];
     ImageAssemble[MapThread[Rasterize[
          GeoGraphics[GeoBackground -> GeoStyling["GeoImage", #2], 
                      GeoRange -> -90, 90, #1[[1]], 
                      GeoProjection -> "TransverseMercator", "Centering" -> #1[[2]],
                      ImageSize -> Large], 
                    ImageSize -> Large] &,
                    Table[λ, λ + Δ, 0, λ + Δ/2, λ, -180, 180 - Δ, Δ],
                     First @ ImagePartition[earth, Scaled[Δ/360, 1]]]]]

transversal de Mercator


Aquí hay un Más lento método que utiliza ImageTransformation[] y las fórmulas 22-23 de aquí para transformar directamente el mapa (tenga en cuenta que me tomé la libertad de trabajar directamente en radianes en lugar de grados):

With[Δ = π/6,
     earth = Import["http://i.stack.imgur.com/jteWq.jpg"];
     ImageAssemble[Table[ImageTransformation[earth, 
                   Module[x = #[[1]], y = #[[2]], h = Δ/2, λt,
                          λt = ArcTan[Cos[y], Sinh[x]]; 
                          If[-h <= λt <= h,
                             λ + h + λt, ArcSin[Sin[y] Sech[x]],
                             π, π/2 (* dummy value for off-range pixels *)]] &, 
                   Background -> White, DataRange -> -π, π, -π/2, π/2, 
                   Masking -> All, 
                   PlotRange -> -InverseGudermannian[Δ/2], InverseGudermannian[Δ/2],
                                 -π/2, π/2],
                   λ, -π, π - Δ, Δ]]]

imagen transformada directamente

La respuesta de JM es la mejor y me ayudó a encontrar las ecuaciones paramétricas correctas desde aquí, pero el método en el que he estado trabajando es muy rápido (<0,5 segundos) y no incluye ningún espacio en blanco donde se conectan los cortes.

img = Import["http://i.stack.imgur.com/jteWq.jpg"];
gore = 12;
tex = First @ ImagePartition[img, Scaled[1/gore, 1]];
ImageAssemble[Table[
  ParametricPlot[ArcTanh[Cos[ϕ] Sin[λ]],  ArcTan[Cos[ϕ] Cos[λ], Sin[ϕ]],
   ϕ, -π/2, π/2, λ, -π/gore, π/gore,
   PlotStyle -> Directive[Texture[tex[[i]]], Opacity[1]], 
   TextureCoordinateFunction -> (#1, #2 &), Frame -> False, 
   Axes -> False, BoundaryStyle -> None, PlotRangePadding -> 0],
  i, 1, gore]]

Mapa proyectado por Mercator

Valoraciones y reseñas

Si posees algún dilema y disposición de medrar nuestro reseña puedes dejar una observación y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *