¿Cómo encontrar relación entre el cambio en las latitudes en el centro del mapa y superior / inferior

StackOverflow https://stackoverflow.com/questions/2422770

Pregunta

Im having little trouble finding a relation between the movement at centre and edge of a circle, Im haciendo para la expansión mapa del mundo, mi mapa medida es 180,89: -180, -89, mis mapa se desplaza por la adición de cambio (dx, dy) a su extensión y no su centro. Ahora una situación ha arrrised donde tengo que mover el mapa a un centro específico, para calcular el cambio en las longitudes es muy fácil y simple, pero es el cambio en latitudes que ha causado un problema. Parece que el cambio en centreY del mapa es más que el cambio en el borde de la MAPY, o simplemente si tengo que mover el centro del mapa de 0long, 0lat a 73long, 33lat, por dX simplemente obtener 73, pero para dY al parecer 33 se ve pero si puedo añadir 33 a la parte superior de un mapa que es de 89, será 122, que es incorrecta, ya latitudes entre 90 y -90. Parece un caso una proyección de un círculo en el plano 2D en el que el borde de círculo desde se está moviendo hacia atrás debido al ángulo expereinces menos cambio y el centro expereinces más cambio, ahora hay una relación entre estos dos factores? He intentado convertir la diferencia entre OriginY y destinationY en radianes y luego agregar a la parte superior e inferior del mapa, pero cansaría realmente funciona para mí. Tenga en cuenta que el mapa es el proyecto en un lienzo virtual cuya anchura se inicia desde 256 y se incrementa en 256 * 2 ^ z, z = 0 es la opción predeterminada y en el mundo entero es visible en ese punto de la lona

public void moveMapTo(double destinationLongitude,double destinationLattitude) // moves map to the new centre
        {
            double dXLong=destinationLongitude-centreLongitude; // centreLongitude and centreLattitude are centre of current map position
            double atanhsinO = atanh(Math.sin(destinationLattitude * Math.PI / 180.00));
            double atanhsinD = atanh(Math.sin(centreLatitude * Math.PI / 180.00));
            double atanhCentre = (atanhsinD + atanhsinO) / 2;
            double latitudeSpan =destinationLattitude - centreLatitude;
            double radianOfCentreLatitude = Math.atan(Math.sinh(atanhCentre));
            double dXLat=latitudeSpan / Math.cos(radianOfCentreLatitude);
            dXLat*=getLattitudeSpan()*(Math.PI/180); //<--- HERE IS THE PORBLEM

            System.out.println("dxLong:"+dXLong+"_dxLat:"+dXLat);
    //map left.right.top,bottom are current extents of map
            mapLeft+=dXLong;
            mapRight+=dXLong;
                         mapTop+=dXLat;
            mapBottom+=dXLat;




    }
    private double getLattitudeSpan()
    {

            double latitudeSpan = mapTop - mapBottom;
            latitudeSpan = latitudeSpan / Math.cos(radianOfCentreLatitude);
            return Math.abs(latitudeSpan);

    } 
¿Fue útil?

Solución

He resuelto un problema similar hace un tiempo y puede ser capaz de darle algunas pistas.

Toma panorámica en las 4 direcciones mediante la adición de una longitud escalado o la latitud sólo funciona para una proyección de Mercator; Es esto lo que usted tiene? Si es así, bien.

Para obtener una panorámica de norte a sur, creo que la única cosa que puede hacer es mostrar un blanco (vacío) de fondo norte del polo si ha analizado detalladamente norte; es decir, que muestran menos del mapa.

Para obtener una panorámica de este a oeste, usted tiene que reemplazar la parte del mundo que se ha ido fuera de la pantalla con la envuelta alrededor del borde del lado opuesto.

He descubierto que mi código se vuelve muy simple si se crea un mapa de esta manera:

ws ws ws ws ws ws ws ws
eu po PO NA EU PO po na
af po PO SA AF PO po sa
ws ws ws ws ws ws ws ws

En la parte central, en letras mayúsculas, es su hoja de mundo original: NA, SA, la UE y la FA se destacan para América del Norte, América del Sur, Europa y África, respectivamente (mapa groseramente simplificada aquí). PO es el Océano Pacífico. Alrededor de ese mapa original que he cosido otra copia del mapa horizontal y un espacio en blanco (WS) verticalmente.

En un principio, su vista está centrada en 0/0, es decir, entre NA / SA y la UE / AF y recortado para mostrarle 90 ° norte y el sur y el este y el oeste de allí, para un total de 180 ° en ambas direcciones . A partir de ahí, puede desplazarse hasta 180 ° este o al oeste y seguir viendo la misma cantidad del mundo. Puede, por ejemplo, una panorámica de 180 ° al este de la línea internacional (en el Pacífico) y ver Europa y África a la izquierda y América del Norte / Sur a la derecha.

También puede desplazarse hacia arriba y hacia abajo de 90 °. Desde envolviendo no tendría ningún sentido aquí, parte de su visión será entonces el espacio en blanco.

La desventaja de esto es que su imagen del mapa será aproximadamente el doble de grande en tamaño del archivo comprimido y cuatro veces más grande en tamaño en píxeles. Se podría conseguir el mismo efecto mediante la costura en el código, pero utilizando el mapa del mundo de gran tamaño es un poco justo más fácil.

Otros consejos

Esto dependerá en gran medida de la mapa de proyección de la imagen original de la tierra. Sin conocer la proyección en particular que está utilizando, es imposible producir y ecuación que los mapas de distancias X-Y de píxel de la imagen a los números-Lat Long (y viceversa).

Si utiliza una de áreas equivalentes proyección, como el Gall-Peters , a continuación, usted se ahorrará una gran cantidad de tiempo y tocar el violín ya que no hay ecuaciones para aplicar:. distancias entre píxeles se relacionan linealmente a números de larga lat

Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top