2011-08-30 4 views
6

OSM에서 레벨 16까지 다운로드 한 osmdroid 및 맵을 사용하고 있습니다. osmdroid가 해당 확대/축소 레벨에서 타일을 사용하지만 더 크게 그릴 수있는 방법이 있는지 궁금합니다.osmdroid - 타일을 더 크게 표시합니다.

그 수준의 타일은 나를 위해 충분한 세부 사항을 가지고 있지만 작게 그려져 있습니다. 나는 다른 응용 프로그램이 같은 타일 레벨을 사용하는 것을 보았지만 어떻게 든 더 크게 그릴 수 있었다.

감사합니다.

답변

3

osmdroid의 소스 코드를 수정하지 않으면이 작업을 수행 할 수 없습니다. 현재 타일은 확대/축소 수준 사이에서 뷰가 애니메이션으로 표시되는 경우를 제외하고는 실제 해상도로 표시됩니다. 즉, 애니메이션이 완료되면 타일이 전환되고 배율이 다시 1로 설정됩니다. 사용자가 최고 수준의 세부 사항 이상으로 확대/축소를 시도 할 때 크기 조정을 유지하기 위해 몇 가지 트릭을 시도했습니다. 시각적으로는 작동하지만 픽셀에서지도 좌표로 매핑하는 모든 기능은 물론지도를 드래그 할 때 일부 상호 작용이 중단됩니다. 따라서 소스의보다 중요한 수정이 필요합니다. 그것은 가능 합니다만, 실제로 문제의 가치가있는 것은 아니라고 생각합니다. 실제로 수정을 프로젝트에 기여하고 덜 세련된 방식으로하고 싶지 않으면 말입니다.

-1

OSMdroid의 현재 작업 모델 내에 남아있는 해결 방법 중 하나는 ImageMagick 또는 Photoshop과 같은 이미지 조작 패키지를 사용하여 더 높은 줌 레벨에서 새로운 비트 맵 타일 세트를 만드는 것입니다.

당신이해야 할 일은 각각의 현재 타일 (256x256px)을 가져 와서 크기와 폭을 두 배로 늘린 다음 이미지를 4 개의 새로운 타일로 자르는 것입니다. 새로운 줌 레벨의 명명 규칙에 따라 각 타일을 저장하십시오. 타일 ​​맵 명명 방식은 described here, as well as an easy way of getting the 4 new names from the original name

+0

을해야합니다. –

+0

어떤 의미에서는 원하는 결과를 여전히 얻을 수 있습니다. – CjS

1

입니다. Cloudmade는 현재 시장에 나와있는 현재의 휴대폰에서 훨씬 더 잘 보이는 고해상도 타일을 지원합니다. 여기 보라 :

http://developers.cloudmade.com/projects/tiles/documents

나는 당신이 다른 타일 소스를 사용할 수 있습니다 LDPI 및 MDPI 장치에 대한 일반 타일을 사용하고 hdpi에와 xhdpi 장치

+0

이 프로젝트는 더 이상 작은 개발자를 위해 더 이상 유지 관리되지 않는 것 같습니다 : http://notes.ericang.com/posts/741 – elcuco

0

의 고해상도 사람을 사용, 예를 들면 M $ Bing. 그것도 더 큰 거리 이름을 가지고있다.

1

문제를 완전히 해결하려면 두 가지 방법이 있습니다. 첫 번째는 mapnik과 같은 소프트웨어로지도 타일을 직접 생성하거나 렌더링한다는 것입니다. 두 번째는 mapsforge와 같이 휴대 전화에서 벡터 기반 실시간 렌더러를 사용하고 있습니다. 두 방법 모두에서 파일 또는 스타일 파일 구성이 중요합니다.

2

오프라인 타일을 사용 중이며 2 배 해상도로 표시하기 위해이 작업을 수행했습니다. 중요한 부분은 타일은 타일 소스의 스케일링 (변경하는 것입니다, 256

myMapView.setTileSource (new XYTileSource ("Mapnik", ResourceProxy.string.offline_mode, 13, 17, 512, ".png", "http://127.0.0.1")); 
+0

다른 타일 크기로, 어떻게 osmdroid가 실제 타일 좌표를 계산합니까? – hguser

+0

타일이 256x256이고 타일 소스를 512로 설정하면 타일 크기가 두 배로 늘어납니다. 실제로 osmdroid를 통해 webview에 전단지를 두는 것을 선호합니다. –

3

가장 좋은 방법 I (나는 오늘 아침 자신이 있던)이 문제에 발견을 비록 512 픽셀 크기입니다 내가 OpenStreetMap에 내 자신의 버전) 사용하고 있습니다 : 화면 밀도에 따라 규모를 변화

final float scale = getBaseContext().getResources().getDisplayMetrics().density; 
final int newScale = (int) (256 * scale); 
String[] OSMSource = new String[2]; 
OSMSource[0] = "http://a.tile.openstreetmap.org/"; 
OSMSource[1] = "http://b.tile.openstreetmap.org/"; 
XYTileSource MapSource = new XYTileSource(
     "OSM", 
     null, 
     1, 
     18, 
     newScale, 
     ".png", 
     OSMSource 
); 
map.setTileSource(MapSource); 

하는 것은 상대적으로 좋은 솔루션입니다. 테스트를하는 동안 이미지의 일부가 약간 희미 해졌지만, 우발적 인 상황에 대한 스케일링을 줄이면 매우 좋은 결과를 얻을 수 있습니다.

이것은 내 솔루션이 아닙니다. BTW는 OSMDROID 문제 중 Github에서 발견했습니다. 감사의 말은 stefangab95입니다.

관련 문제