Android HelloGoogleMaps для OSMdroid (открытые карты улиц)

Я пытаюсь воспроизвести работающее приложение HelloGoogleMaps в Open Street Maps, но у меня возникают проблемы с включением детализированного наложения в OSMdroid.

Я просмотрел несколько ресурсов, но не могу понять, как исправить ошибку в OsmItemizedOverlay. Думаю, я неправильно строю OsmItemizedOverlay или путаю OsmItemizedOverlay и ItemizedOverlay? Но все, что я пытался изменить, вызывало еще больше ошибок... "Неявный суперконструктор ItemizedOverlay() не определен. Должен явно вызывать другой конструктор" "Невозможно создать статическую ссылку на нестатический метод setMarker(Drawable) из типа OverlayItem" - Надеюсь, кто-нибудь поможет мне разобраться с определением класса?

Большое спасибо!

package com.example.osmdroiddemomap;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Point;
import android.graphics.drawable.Drawable;

import org.osmdroid.api.IMapView;
import org.osmdroid.views.*;
import org.osmdroid.views.overlay.*;
import org.osmdroid.views.overlay.OverlayItem.HotspotPlace;

public class OsmItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    Context mContext;


    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

        //ERRORS are raised by the following 3 lines:
    public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
            OverlayItem.setMarker(defaultMarker);
            OverlayItem.setMarkerHotspot(HotspotPlace.CENTER);

          mContext = context; 
            }

public void addOverlay(OverlayItem overlay) {
    mOverlays.add(overlay);
    populate();
}

@Override
protected OverlayItem createItem(int i) {
  return mOverlays.get(i);
}

@Override
public int size() {
  return mOverlays.size();
}


  protected boolean onTap(int index) {
  OverlayItem item = mOverlays.get(index);
  AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
  dialog.setTitle(item.getTitle());
  dialog.setMessage(item.getSnippet());
  dialog.show();
  return true;
}

@Override
public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) {
    // TODO Auto-generated method stub
    return false;
}
}

person birgit    schedule 11.10.2012    source источник


Ответы (3)


попробуйте изменить свой конструктор следующим образом

public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }
person Hardik Nadiyapara    schedule 11.10.2012
comment
Это конструктор, который у меня работал в примере Google Maps, но методboundCenterBottom не определен в OSMdroid... поэтому я следил за такими потоками stackoverflow.com/questions/9667208 - person birgit; 11.10.2012

Я никогда не использовал osmdroid, но просматриваю документацию в здесь, он показывает setMarkerHotspot() как метод OverlayItem и документацию в введите здесь описание ссылки указывает, что маркер по умолчанию всегда выравнивается по центру нижней части.

Поэтому, чтобы решить эту проблему, вам нужно будет назначить маркер каждому добавленному элементу наложения и установить setMarkerHotspot() в центр.

Что-то вроде этого должно решить проблему:

Context mContext; 
Drawable mDefaultMarker;

public OsmItemizedOverlay(Drawable defaultMarker, Context context) { 
      mContext = context;  
      mDefaultMarker = defaultMarker;  
} 

public void addOverlay(OverlayItem overlay) {
    overlay.setMarkerHotspot(HotspotPlace.CENTER);
    mOverlays.add(overlay);   
    populate();   
}  

удачи.

person Luis    schedule 11.10.2012

Просто измените функцию addItem на:

public void addItem(OverlayItem item) {
    item.setMarkerHotspot(HotspotPlace.CENTER);
    mOverlay.addItem(item);
}
person user2371025    schedule 10.05.2013