Geoalgorithm para encontrar as coordenadas de ponto a partir de uma localização conhecida pela distância e o rumo
-
22-08-2019 - |
Pergunta
Eu gostaria de usar o Google Maps API estática para exibir um mapa com uma sobreposição caminho indicando um limite.
AFAICT a API estática não suporta polígonos, por isso tenho a intenção de contornar isso por desenhar o limite usando caminhos.
Para fazer esta necessidade eu para determinar os pontos para desenhar as linhas rectas (caminhos) entre; pelo que gostaria de um algoritmo que devolve a localização geográfica (isto é, coordenadas WGS84) e um rolamento de distância a partir de um ponto conhecido dado.
pode apontar-me qualquer um para um algoritmo tal. De preferência em C #, mas outras línguas são aceitáveis?
Solução 5
Encontrei este (aqui: http://williams.best.vwh.net/ avform.htm # LL ):
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
Será que o radial estar em radianos ou graus?
Editar:
radianos = graus * PI / 180
Outras dicas
Eu implementado e testado-lo em C #, usando Degrees como entrada / saída em vez de radianos:
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);
}
Você pode desenhar polígono em um arquivo KML, e, em seguida, mostrar o KML no Google Maps.
Aqui está KML no Google maps (a partir de amostras Google KML) verificar o "Google Campus - Polígonos" no conteúdo .
Em (eu acho) todas as línguas que eu sei, radianos. Nota que eu acho que o código de exemplo está dando-lhe co-ordenadas com base em uma esfera, e não em WGS84. Aqui está código Java para converter entre coordenar sistemas .
Dê uma olhada Gavaghan Geodésia C # biblioteca, ele deve ser o que você está procurando. E é grátis.