\ꂽGoogle Map̏ɃACR\ɂGoogle Map\NXƂ͕ʂɐVȃNXƂItemizeOvelay<Overlay>̔hNX쐬AMapViewOverlayɒljB
QlTCgAndroid Wiki@Google MapDrawablezu
http://wikiwiki.jp/android/?Google%20Map%A4%CBDrawable%A4%F2%C7%DB%C3%D6%A4%B9%A4%EB


PinItemizedOverlay.java


public class PinItemizedOverlay extends ItemizedOverlay<PinOverlayItem> {

    private List<GeoPoint> points = new ArrayList<GeoPoint>();

    public PinItemizedOverlay(Drawable defaultMarker) {
        super( boundCenterBottom(defaultMarker) );
    }

    @Override
    protected PinOverlayItem createItem(int i) {
        GeoPoint point = points.get(i);
        return new PinOverlayItem(point);
    }

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

    public void addPoint(GeoPoint point) {
        this.points.add(point);
        populate();
    }
	
    public void clearPoint() {
        this.points.clear();
        populate();
    }
}


PinOverlayItem.java


public class PinOverlayItem extends OverlayItem {

    public PinOverlayItem(GeoPoint point){
        super(point, "", "");
    }
}

boundCenterBottomという文はDrawable(アイコン)の原点を画像の下部中央に位置づけます。


描画するポイントをGeoPointクラスが緯度(latitude)と、経度(longitude)をint型で保持し、Map上の座標の指定/取得に使用します。
サンプルでは東京駅と大阪駅の2つのGeoPointを登録し、PinItemizedOverlayのアイコンとしてpin.pngを渡します。
pin.pngファイルは、res/drawableディレクトリに追加します。


SimpleMapActivity.java


public class SimpleMapActivity extends MapActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_map);
       
        MapView map = (MapView)findViewById( R.id.map);
        map.setClickable(true);
        map.setBuiltInZoomControls(true);

        Drawable pin = getResources().getDrawable( R.drawable.pin);
        PinItemizedOverlay pinOverlay = new PinItemizedOverlay( pin);
        map.getOverlays().add( pinOverlay);

        GeoPoint tokyo = new GeoPoint( 35681396, 139766049);
        GeoPoint osaka = new GeoPoint( 34701895, 135494975);
        pinOverlay.addPoint( tokyo);
        pinOverlay.addPoint( osaka);
    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}


サンプルで用いられたピン画像ではピンの先が指している場所がGeopointで指定した場所とズレてしまうため今回私は、Google Mapでもお馴染みのこちらのピンを使用しました。
 プログラム中のGeopointを変えることで好きな位置にピン画像を表示することが出来ます。 次に、表示するバス停について調べました。別ページで紹介
 調べたバス停の座標をそれぞれ(int)型で宣言します。


    GeoPoint a = new GeoPoint((int)(35.395642*1E6),(int)(136.693598*1E6));
    GeoPoint b = new GeoPoint((int)(35.391497*1E6),(int)(136.690494*1E6));
    GeoPoint c = new GeoPoint((int)(35.403229*1E6),(int)(136.689837*1E6));
    GeoPoint d = new GeoPoint((int)(35.415336*1E6),(int)(136.686133*1E6));
    GeoPoint e = new GeoPoint((int)(35.420166*1E6),(int)(136.686868*1E6));
    GeoPoint f = new GeoPoint((int)(35.426109*1E6),(int)(136.687485*1E6));
    GeoPoint g = new GeoPoint((int)(35.428658*1E6),(int)(136.686884*1E6));
    GeoPoint h = new GeoPoint((int)(35.432823*1E6),(int)(136.685661*1E6));
    GeoPoint i = new GeoPoint((int)(35.436340*1E6),(int)(136.685583*1E6));
    GeoPoint j = new GeoPoint((int)(35.439622*1E6),(int)(136.681890*1E6));
    GeoPoint k = new GeoPoint((int)(35.443247*1E6),(int)(136.678406*1E6));
    GeoPoint l = new GeoPoint((int)(35.451675*1E6),(int)(136.673025*1E6));
    GeoPoint m = new GeoPoint((int)(35.453652*1E6),(int)(136.655229*1E6));
    GeoPoint n = new GeoPoint((int)(35.459331*1E6),(int)(136.643805*1E6));
    GeoPoint o = new GeoPoint((int)(35.466252*1E6),(int)(136.633803*1E6));
    GeoPoint p = new GeoPoint((int)(35.470177*1E6),(int)(136.626720*1E6));

 後は、先のように「pinOverlay」にこの座標を加えると


        pinOverlay.addPoint(a);




 無事表示することが出来ました。


戻る