웹 메르카토르 맵에서보기 좋은 원호 만들기?


11

일부 항공편을 나타내는 데이터가 포함 된지도를 만들고 그레이트 서클 호를 사용하여 소스와 목적지를 연결하려고합니다.

기본적으로 유명한 Facebook 맵과 비슷한 것을하고 싶습니다. 여기에 이미지 설명을 입력하십시오

이 게시물에 제공된 기능을 사용했습니다 : https://gis.stackexchange.com/a/5205/442 (예 :이 블로그 기사 : http://anitagraser.com/2011/08/20/visualizing-global-connections / ) 및 줄을 얻을 수는 있지만 국제 날짜 줄을지나 극에서 묶습니다.

여기에 이미지 설명을 입력하십시오

@underdark는 링크 된 블로그 포스트 에서이 라인을 분리해야한다고 언급했지만 PostGIS에서 자동으로 분리하는 방법을 모르겠습니다.

또한 극 근처의 전선 다발도 해결해야합니다.

이 항공편의 출발 및 도착 지점이있을 때 두 가지를 모두 수행하려면 어떻게합니까?


극 투영법을 사용할 수 있습니까?
Ian Turton

2
여기 몇 가지 예제를 준 : gis.stackexchange.com/questions/133026/...를 . eqdc는 진정한 대원을 제공하지 않지만 aeqd는 제공합니다.
AndreJ

답변:



8

측지선을 계산할 수 있습니다. 측지선을 A에서 B로 표시하려면 먼저 A에서 B까지의 거리와 방위 (역 측지 문제)를 계산 한 다음 A에서 B와 A와 B 사이의 여러 지점 (직접 측지 문제)을 계산할 수 있습니다. GeographicLib을 사용하여 Python에서 간단한 스크립트를 추가하여 GeoJSON에서 물건을 출력했습니다.

from geographiclib.geodesic import Geodesic
from geojson import MultiLineString

def geodesic(lat1, lon1, lat2, lon2, steps):
    inverse = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2)
    linestrings = []
    coordinates = []

    for i in range(0, steps + 1):
        direct = Geodesic.WGS84.Direct(inverse['lat1'], inverse['lon1'], inverse['azi1'], (i / float(steps)) * inverse['s12'])
        if len(coordinates) > 0:
            if (coordinates[-1][0] < -90 and direct['lon2'] > 90) or (coordinates[-1][0] > 90 and direct['lon2'] < -90):
                linestrings.append(coordinates)
                coordinates = []
        coordinates.append((direct['lon2'], direct['lat2']))

    linestrings.append(coordinates)
    geojson = MultiLineString(linestrings)
    return geojson

linestrings = []

# San Francisco: 37.7793, -122.4192
# Bangalore: 12.9, 77.616667
for linestring in geodesic(37.7793, -122.4192, 12.95, 77.616667, 100)['coordinates']:
    linestrings.append(linestring)

# Boston: 42.357778, -71.059444
# Bangalore: 12.9, 77.616667
for linestring in geodesic(42.357778, -71.059444, 12.95, 77.616667, 100)['coordinates']:
    linestrings.append(linestring)

print(MultiLineString(linestrings))

결과는 WGS-84의 점들 사이의 진정한 측지선입니다. 물론 좌표를 필요한 투영으로 변환 할 수 있습니다. geojson.io에 시각화 된 결과 는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오


2
GeographicLib로이 작업을 수행하는 다른 방법 (및 더 빠른 방법) 은 geographiclib.sourceforge.net/html/python/… 을 참조하십시오 . 경도의 연속성을 보장하기 위해 LONG_UNROLL 플래그를 사용했습니다.
cffk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.