Android HelloGoogleMaps到OSMdroid(开放街道地图)

时间:2012-10-11 14:04:07

标签: android openstreetmap itemizedoverlay osmdroid

我正在尝试在Open Street Maps中重现一个有效的HelloGoogleMaps应用程序 - 但我在OSMdroid中包含逐项覆盖时遇到了麻烦。

我已经查看了几个资源,但我无法弄清楚如何修复OsmItemizedOverlay上的错误 - 我想我错误地构造了OsmItemizedOverlay或者与OsmItemizedOverlay和ItemizedOverlay混淆了?但我试图改变的一切只会引发更多错误...... “隐式超级构造函数ItemizedOverlay()未定义。必须显式调用另一个构造函数” “无法从类型OverlayItem对静态方法setMarker(Drawable)进行静态引用” - 我希望有人能帮我直接获得类定义吗?

非常感谢!

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;
}
}

4 个答案:

答案 0 :(得分:0)

尝试像这样改变你的构造函数

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

答案 1 :(得分:0)

我从未使用osmdroid,但查看here中的文档,它显示setMarkerHotspot()作为OverlayItem的方法,而enter link description here中的文档说明了默认标记总是与中心对齐。

因此,要解决此问题,您需要为添加的每个叠加项目指定一个标记,并将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();   
}  
祝你好运。

答案 2 :(得分:0)

只需将addItem函数更改为:

public void addItem(OverlayItem item) {
    item.setMarkerHotspot(HotspotPlace.CENTER);
    mOverlay.addItem(item);
}

答案 3 :(得分:0)

use following constructor:

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

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