OpenStreetMaps를 사용하기 위해 Google지도 기반 프로젝트를 Osmdroid로 포팅합니다. 포트는 여러 개의 직선과 일부 텍스트로 구성된 오버레이를 추가하는 것과는 별개로 작동합니다. 두 프로젝트에서 타이머 스레드와 redrawOverlay를 호출하는 핸들러를 사용하여 오버레이를 추가합니다.Google지도 앱을 Osmdroid에 포팅 - 오버레이 문제
OSM 프로젝트에서 내 오버레이는지도를 완전히 숨기는 회색 사각형입니다. redrawOveraly에 대한 호출을 제거하면 OSM 타일이 OK로 표시됩니다. 아래의 코드 샘플에서 오버레이 코드를 단일 대각선의 최소값으로 줄였습니다. 지도 타일을 오버레이하여 Google 앱에서 정상적으로 작동합니다. com.google.android.maps.Overlay 무승부 방법을 가지고는 OSM가 된 onDraw가있다, 그래서 OSM 버전이 있습니다
: 나는 해당이 Google지도 원래의 하다니private MapView mv;
private MapOverlay mmapOverlay = null;
private void redrawOverlay() {
gPt = mv.getMapCenter();
if (mmapOverlay == null)
mmapOverlay = new MapOverlay(getApplicationContext());
List<Overlay> listOfOverlays = mv.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mmapOverlay);
mv.invalidate();
}
public class MapOverlay extends org.osmdroid.views.overlay.Overlay {
public MapOverlay(Context ctx) {
super(ctx);
// TODO Auto-generated constructor stub
}
@Override
public void onDraw(Canvas canvas, MapView mapView) {
Paint lp3;
lp3 = new Paint();
lp3.setColor(Color.RED);
lp3.setAntiAlias(true);
lp3.setStyle(Style.STROKE);
lp3.setStrokeWidth(1);
lp3.setTextAlign(Paint.Align.LEFT);
lp3.setTextSize(12);
canvas.drawLine(10, 10, 150, 150, lp3);
}
public class MapOverlay extends com.google.android.maps.Overlay {
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
long when) {
super.draw(canvas, mapView, shadow);
Paint lp3;
lp3 = new Paint();
.....etc.
redrawOverlay 오버레이의 인스턴스를 제외하고 동일 단지입니다 :
mmapOverlay = new MapOverlay();
모든 제안은 감사
0을 수신 할 것 kurtzmarc에 대한UPDATE 질문 : 당신을 위해
덕분에 나는 당신이 Osmdroid의 저자 중 한 것을 볼, 지금까지 도움이됩니다. 나는 지금까지하고있는 일을 좋아합니다. 더블 탭을 할 때 '건너 뛰고 확대'하는 것을 억제하고 싶습니다. 전혀 아무것도하지 않으려합니다. 나는 그것이 아마 소스에서이 비트를 타격하고 zoomInFixing을하고 생각 :
private class MapViewDoubleClickListener implements GestureDetector.OnDoubleTapListener {
@Override
public boolean onDoubleTap(final MotionEvent e) {
for (int i = mOverlays.size() - 1; i >= 0; i--)
if (mOverlays.get(i).onDoubleTapUp(e, MapView.this))
return true;
final GeoPoint center = getProjection().fromPixels(e.getX(), e.getY());
return zoomInFixing(center);
}
내가 그것을 덮어 쓸 수 있다는 것 같지 않습니다. 3.0.1 jar와 관련 javadocs를 사용하고 있습니다. Mapview의 setTouchDelegate 메소드가 도움이 될지 궁금하지만 javadocs에는이 참조가 없습니다. 어떤 제안을 해주시겠습니까?
확실히 mWorldSize_2를 int로 정의하고 .drawline에 Paint 인수를 추가하면 화면에 선이 그려집니다. (Canvas가 전달되는 Canvas는 Google Maps가 전달하는 Canvas와 완전히 다릅니다). 그러나 기본 MapView가 사라지면 회색 배경 위에 선이 생깁니다. – NickT
도움을 주셔서 감사합니다, 나는 천천히 거기에 가고 있습니다! listOfOverlays.clear()가 범인입니다. 인덱스 0에있는 것을 제외하고 모두 삭제해야했습니다 (Google지도의 경우와 동일하지 않습니다). 필자의 주된 문제는 필자가 쓴 서비스/원격 인터페이스를 통해 그려지는 선과 텍스트의 좌표를 얻기 위해 많은 노력을 기울 였다는 것입니다. 이는 화면 오버랩 픽셀이 화면 픽셀 좌표로 표시되기 때문에 Google 오버레이가이를 원했기 때문입니다. Osmdroid를 위해 모든 것을 OSM 좌표로 변환해야합니다. – NickT
완성했습니다! 매우 감사합니다. 머리를 깨끗이하고 펜과 종이로 앉아서 두 줄의 transformX transformY 루틴을 작성해야한다는 것을 깨달았습니다. 이제 Google지도 오버레이처럼 보입니다. – NickT