거리 및 베어링별로 알려진 위치에서 지점의 좌표를 찾기위한 지구 조정

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

  •  22-08-2019
  •  | 
  •  

문제

Google Maps STATIC API를 사용하여 경계를 나타내는 경로 오버레이가있는 맵을 표시하고 싶습니다.

AFAICT 정적 API는 다각형을 지원하지 않으므로 경로를 사용하여 경계를 그려서이를 우회하려고합니다.

이를 위해서는 직선 (경로)을 그리는 점을 결정해야합니다. 따라서 지리적 위치 (예 : WGS84 좌표)를 반환하는 알고리즘을 원합니다.

누구든지 그런 알고리즘을 지적 할 수 있습니까? 바람직하게는 C#에서는 다른 언어가 허용됩니까?

도움이 되었습니까?

해결책 5

이것을 찾았습니다 (여기 : http://williams.best.vwh.net/avform.htm#ll):

포인트 {lat, lon}은 지점 1에서 TC 방사형의 거리 d 아웃입니다.

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

방사형이 라디안이나 정도에 있습니까?

편집하다:

라디안 =도 * pi / 180

다른 팁

Radian 대신 입력/출력으로도를 사용하여 C#로 구현하고 테스트했습니다.

    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);
    }

KML 파일에 다각형을 그린 다음 Google지도에 KML을 표시 할 수 있습니다.

Google지도의 KML은 다음과 같습니다 (Google KML 샘플에서) 확인하십시오 "Google 캠퍼스 - 다각형" 내용의 섹션.

내가 아는 모든 언어, 라디안에서. 예제 코드가 WGS84가 아닌 구체를 기반으로 한 코디네이션을 제공한다고 생각합니다. 여기에 있습니다 조정 시스템 간 변환을위한 Java 코드.

보세요 Gavaghan Geodesy C# 라이브러리, 당신이 찾고있는 것이되어야합니다. 그리고 그것은 무료입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top