Necesita más información que un solo par de latitud/longitud para poder hacer esto.
En esta etapa, la información que ha proporcionado no se encuentra dos cosas:
- tamaño del área cubre su imagen (en términos de latitud/longitud)? En función de lo que ha proporcionado, no sé si la imagen muestra un área de un metro de ancho o un kilómetro de ancho.
- ¿en qué lugar de su imagen se refieren sus coordenadas de referencia (-37.803134, 145.132377)? ¿Es una de las esquinas? En el medio en algún lugar?
También voy a suponer que su imagen está alineada norte/sur; por ejemplo, no tiene el norte apuntando hacia la esquina superior izquierda. Eso tendería a complicar las cosas.
El enfoque más fácil es determinar exactamente qué coordenadas lat/lon corresponden al (0, 0) píxel y al (1017, 915) píxel. A continuación, puede calcular el píxel correspondiente a una coordenada lat/lon determinada a través del interpolation.
Para delinear brevemente ese proceso, imagine que su (-37.803134, 145.132377) latitud/lon corresponde a su (0, 0) píxel, y que ha descubierto que su (1017, 915) píxel corresponde al lat/lon (-37.798917, 145.138535). Asumiendo la convención usual con un píxel (0, 0) en la esquina inferior izquierda, esto significa que el norte está arriba en la imagen.
Entonces, si usted está interesado en el objetivo de coordenadas (-37.801465, 145.134984), se puede averiguar el número de píxeles correspondiente a la imagen que es el siguiente:
pixelY = ((targetLat - minLat)/(maxLat - minLat)) * (maxYPixel - minYPixel)
= ((-37.801465 - -37.803134)/(-37.798917 - -37.803134)) * (915 - 0)
= 362.138
Es decir, los correspondientes píxel es 362 píxeles desde la parte inferior de la imagen. A continuación, puede hacer exactamente lo mismo para la colocación horizontal de píxeles, pero utilizando longitudes y X píxeles en su lugar.
La pieza ((targetLat - minLat)/(maxLat - minLat))
determina la distancia que se encuentra entre las dos coordenadas de referencia, y da 0 para indicar que está en la primera, 1 para indicar la segunda y los números intermedios para indicar las ubicaciones intermedias. Entonces, por ejemplo, produciría 0.25 para indicar que estás al 25% del camino al norte entre las dos coordenadas de referencia. El último bit lo convierte en los píxeles equivalentes.
HTH!
EDIT Bueno, según su comentario puedo ser un poco más específico.Teniendo en cuenta que parece estar utilizando la esquina superior izquierda como punto de referencia principal, voy a utilizar las siguientes definiciones:
minLat = -37.803134
maxLat = -37.806232
MAP_HEIGHT = 916
Entonces, si utilizamos un ejemplo coordenada (-37.804465, 145.134984), la Y de coordenadas del píxel correspondiente, relativa a la esquina superior izquierda, es decir:
pixelY = ((targetLat - minLat)/(maxLat - minLat)) * (MAP_HEIGHT - 1)
= ((-37.804465 - -37.803134)/(-37.806232 - -37.803134)) * 915
= 393.11
por lo tanto, el píxel correspondiente es de 393 píxeles hacia abajo desde la parte superior. Te dejaré calcular el equivalente horizontal para ti - es básicamente lo mismo. NOTA El -1
con el MAP_HEIGHT
se debe a que si se inicia en cero, el número máximo de píxeles es 915, no 916.
EDIT: Una cosa que me gustaría tener la oportunidad de señalar es que este es una aproximación. En realidad, no hay una relación lineal simple entre las coordenadas de latitud y longitud y otras formas de coordenadas cartesianas por varias razones, incluidas las proyecciones que se utilizan al hacer mapas, y el hecho de que la Tierra no es una esfera perfecta. En áreas pequeñas, esta aproximación es lo suficientemente cercana como para no hacer una diferencia significativa, pero a mayor escala las discrepancias pueden ser evidentes. Dependiendo de tus necesidades, YMMV. (Mi agradecimiento a uray, cuya respuesta a continuación me recordó que este es el caso).
Para responder a su pregunta que usted ha pedido above..how grande es el área cubre su imagen Cubre roughtly de 2 - 4 miles.what mancha en la imagen se coordina su referencia (-37.803134, 145.132377) se refieren ¿a? ¿Es una de las esquinas? En el medio en algún lugar? Es la esquina superior izquierda. La coordenada completa es (-37.803134, -37.806232,145.132377,145.136733). –
Hola gracias por tu respuesta. Tenga una pequeña duda. Según su fórmula pixelY = ((targetLat - minLat)/(maxLat - minLat)) * (MAP_HEIGHT - 1), si estoy tratando de localizarlo (-37.803134,145.132377) que no es más que lo mismo que mi arriba a la izquierda debería ser 0 ¿no? Pero no lo es ?? ((-37.803134 - -37.806232)/(-37.803134 - -37.806232)) * 915 = 915 –
Correcto, buena captura, muy lo siento, parece que me he confundido publicando esa actualización. Cambie los valores de minLat y maxLat y debería estar bien. – Mac