7 votos

Agregar la distancia a una latitud o longitud

Decir que tengo una latitud de 38.802610 y una longitud de -116.419389 y quiero ser capaz de agregar una distancia que, a 20 millas por ejemplo.

Hasta ahora he venido con una idea aproximada de cómo iba a hacer esto:

  • En primer lugar, el trabajo de cuántas millas son de 1° de latitud, digamos, por ejemplo, fue de 30
  • A continuación, dividir uno por:
    • 1 / 30 = 0.033333
  • Añadir a mi original latitud para obtener el máximo ° de latitud:
    • 38.802610 + 0.033333 = 38.8355943
  • Restar a mi original latitud para obtener mi mínimos ° de latitud:
    • 38.802610 - 0.033333 = 38.769277

Pero esto es erróneo, pues no parece haber ninguna conversión directa para la longitud como por lo que he leído el cálculo varía. He mirado por ahí y encontré algunos recursos, pero no soy capaz de encontrar uno que se aplica directamente a mi pregunta. Me llegó a través de la Fórmula de Haversine, pero no puedo encontrar una manera de aplicarlo a mi situación, por lo que he leído, se utiliza para calcular la distancia entre dos puntos.

En última instancia, tengo que ser capaz de encontrar la:

  • máxima flexibilidad (mi actual latitud de + la distancia dada e.g 20 millas)

  • latitud mínima (mi actual latitud dada por la distancia e.g 20 millas)

  • longitud máxima (mi actual longitud + distancia dada e.g 20 millas)

  • longitud mínima (mi actual longitud dada por la distancia e.g 20 millas)

4voto

znq Puntos 143

si está interesado en python sugerencia - el uso de OGR

from osgeo import ogr, osr

# setup function to reproject coordinates
def convertCoords(xy, src='', targ=''):

    srcproj = osr.SpatialReference()
    srcproj.ImportFromEPSG(src)
    targproj = osr.SpatialReference()
    if isinstance(targ, str):
        targproj.ImportFromProj4(targ)
    else:
        targproj.ImportFromEPSG(targ)
    transform = osr.CoordinateTransformation(srcproj, targproj)

    pt = ogr.Geometry(ogr.wkbPoint)
    pt.AddPoint(xy[0], xy[1])
    pt.Transform(transform)

    return([pt.GetX(), pt.GetY()])

puede a continuación, introduzca la lat/long coordenadas de la función, con las correspondientes códigos epsg (para este ejemplo, vamos a utilizar WGS84 como la entrada y albers para la salida):

coords =  (-116.419389, 38.802610)
albersXY = convertCoords(coords, 4326, 5070)

añadir 20 millas a la albers coordenadas (que están en metros)

albersXY[0] = albersXY[0] + 20 * 1609.344
albersXY[1] = albersXY[1] + 20 * 1609.344

a continuación, convertir de albers volver a WGS

newlatlon = convertCoords(albersXY, 5070, 4326)
print(newlatlon)
>>> [-116.13229978439009, 39.14407586190597]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X