Geoalgorithm para encontrar las coordenadas del punto desde una ubicación conocida por distancia y el rumbo

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

  •  22-08-2019
  •  | 
  •  

Pregunta

Me gustaría utilizar Google Maps API estática para mostrar un mapa con una capa de ruta que indica un límite.

AFAICT la API estática no soporta polígonos, por lo que la intención de eludir esta trazando el límite utilizando rutas.

Para hacer esto necesito para determinar los puntos para dibujar las líneas rectas (rutas) entre; así que me gustaría un algoritmo que devuelve la ubicación geográfica (es decir WGS84 coordenadas) de un cojinete dada y la distancia de un punto conocido.

Puede alguien me punto a tal algoritmo. Preferiblemente en C #, pero otros idiomas son aceptables?

¿Fue útil?

Solución 5

Encontrados este (aquí: http://williams.best.vwh.net/ avform.htm # LL):

Un punto {lat, lon} es una distancia D hacia fuera en la dirección radial desde el punto tc 1 si:

lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
ENDIF

¿El radiales estar en radianes o grados?

Editar

radianes = grados * PI / 180

Otros consejos

I implementado y probado en C #, usando Degrees como entrada / salida en lugar de radianes:

    static readonly double FullCircleDegrees = 360d;
    static readonly double HalfCircleDegrees = FullCircleDegrees / 2d;
    static readonly double DegreesToRadians = Math.PI / HalfCircleDegrees;
    static readonly double RadiansToDegrees = 1 / DegreesToRadians;

    public LatLng GetPointGivenRadialAndDistance(LatLng center, double radius, double azimuth)
    {
        var lat1 = center.Lat * DegreesToRadians;
        var lng1 = center.Lng * DegreesToRadians;
        var lat = Math.Asin( (Math.Sin(lat1) * Math.Cos(radius)) + Math.Cos(lat1) * Math.Sin(radius) * Math.Cos(azimuth * DegreesToRadians));
        var lng = 0d;
        if (Math.Cos(lat) == 0)
        {
            lng = lng1;
        }
        else
        {
            lng = ((lng1 + Math.PI - Math.Asin(Math.Sin(azimuth * DegreesToRadians) * Math.Sin(radius) / Math.Cos(lat1))) % (2 * Math.PI)) - Math.PI;
        }
        return new LatLng(lat * RadiansToDegrees, lng * RadiansToDegrees);
    }

Puede dibujar polígonos en un archivo KML, y luego mostrar el KML en los mapas de Google.

Aquí está KML en Google maps (a partir de muestras Google KML) consultar la "Campus Google - / em> sección de polígonos"

(creo) todos los idiomas que conozco, radianes. Tenga en cuenta que creo que el código de ejemplo que está dando coordenadas basado en una esfera, no en WGS84. Aquí está código Java para la conversión entre sistemas de coordenadas .

Tome un vistazo a Gavaghan Geodesia C # biblioteca, que debe ser lo que estás buscando. Y es gratis.

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