2016-09-08 10 views
3

Java 응용 프로그램에서 JmapViewer를 사용하고 있습니다. 지도는 jPanel에 그려집니다. 현재 확대/축소 수준에 해당하는지도 배율을 가져올 수 있습니까?JMapViewer, OSM지도 축척, Java

X = R * lon * cos(lat1); 
Y = R * log(tan(lat/2 + 45)), lat1 = 0; 

투영은 공형이기 때문에, 로컬 리니어 스케일 방향 무관 : 맵은 공지 토르 투영에 기초한다.

Point p1 = new Point(0,0); 
Point p2 = new Point(100,0); 

final double dlon = getPosition(p2).getLon() - getPosition(p1).getLon(); 
final double scale = 6380000 * abs(dlon) * PI/180/100; //scale = (R * dlon)/||p1-p2|| 

개선점 : 내 생각은 같은 병렬을 공유하는 두 포인트를 사용 초기 점 P1 뷰의 중심이 될 수 있습니다.

Point p1 = new Point(jPanel1.width()/2,jPanel1.height()/2); 
Point p2 = new Point(jPanel1.width()/2 + 100, jPanel1.height()/2); 

픽셀 좌표는 "미터"로 평가됩니다. 화학식 화소 크기 부족 ...

+0

. 질문에 확대/축소 측면을 추가합니다. 즉 확대/축소 중심점과 배율 인수가 있습니다. 나머지는 부적합합니다. 현재의 양식에서는 가장 합리적인 답을 얻지 못할 것입니다. –

답변

3

현재 줌 레벨에서 화소 당 m의 수를 반환 getMeterPerPixel()JMapViewer 방법. spherical law of cosines을 사용하여 거리를 가져 오는 TileSource::getDistance을 사용합니다. org.openstreetmap.gui.jmapviewer.Demo에서 값이 확대/축소와 어떻게 반비례하는지 알 수 있습니다. 레벨 10 및 98.5 미터/픽셀은 아래에 나와 있습니다. 일반적인 구현 방법은 OsmMercator::getDistance을 참조하십시오.

는 독립적 자바, JMapViewer, JPanel의 등의 알고리즘 문제로 당신은 경도/위도 좌표와 메르카토르 투영이 있고 폭 DX와 높이 DY의 픽셀 상자에 투사을 계산하려면 재 게시

map image

+1

@ trashgod : 도움이되는 답변을 주셔서 대단히 감사드립니다 ... – justik