カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

GoogleMap 複数のポイントのアイコン切替

ItemizedOverlayクラスを継承してGoogleMapに複数のポイントを表示する際、アイコンを変えたい場合、レイヤーを別にする必要があります。
同じレイヤーでアイコンを変えたい場合には、アイコン生成時に呼ばれる「createItem」メソッド内で変えるようにするとできるようです。

その際はアイコン用のリストを作り、switch文などで切り替えすると便利です。

public class PinItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    private List<GeoPoint> points = new ArrayList<GeoPoint>();
    private List<Integer> icontype = new ArrayList<Integer>();
    private Context context;

    public PinItemizedOverlay(Drawable defaultMarker, Context context) {
        super( boundCenterBottom(defaultMarker) );
        setLastFocusedIndex(-1);
        populate();
        this.context = context;
    }

    @Override
    protected OverlayItem createItem(int i) {

        Drawable icon = null;
        switch(icontype.get(i)) {
            case 0:
                icon = context.getResources().getDrawable(R.drawable.icon0);
                break;
            case 1:
                icon = context.getResources().getDrawable(R.drawable.icon1);
                break;
            case 2:
                icon = context.getResources().getDrawable(R.drawable.icon2);
                break;
            default:
                icon = context.getResources().getDrawable(R.drawable.icon0);
                break;
        }

        GeoPoint point = points.get(i);
        OverlayItem overlayItem = new OverlayItem(point, null, null);
        overlayItem.setMarker(boundCenterBottom(icon));
        return overlayItem;
    }

    public void addPin(GeoPoint point, String title, String snippet, int icontype) {
        if (getIndexGeoPoint(point) == -1) {
            this.points.add(point);
            this.icontype.add(icontype);
        }
        setLastFocusedIndex(-1);
        populate();
    }

    // 位置が一致するか(一致しない場合は -1を返す)
    private int getIndexGeoPoint(GeoPoint newPoint) {
       int result = -1;
       int size = this.points.size();
       for (int i = 0; i < size; i++) {
          GeoPoint point = this.points.get(i);
          if (point.equals(newPoint)) {
             result = i;
             break;
          }
       }
       return result;
    }
}
2,749 views

座標の変換

緯度・経度を日本測地系から世界測地系(WGS84)に変換する
コードは例としてPHPで書いています。

function cnvCoords($ido, $keido)
{
    $ido   = $ido - $ido * 0.00010695  + $keido * 0.000017464 + 0.0046017;
    $keido = $keido - $ido * 0.000046038 - $keido * 0.000083043 + 0.010040;

    return array($ido, $keido);
}

緯度・経度を世界測地系(WGS84)から日本測地系に変換する

function cnvDeCoords($ido, $keido)
{
    $ido   = $ido + $ido * 0.00010695  - $keido * 0.000017464 - 0.0046017;
    $keido = $keido + $ido * 0.000046038 + $keido * 0.000083043 - 0.010040;

    return array($ido, $keido);
}

※変換の際、経度を計算するために必要な緯度は、変換後の値であることに注意

Javaの場合 続きを読む…»

3,004 views

GoogleMap ルート案内

<form action="http://maps.google.co.jp/maps" method="get" target="_blank">
ここまでのルートを検索
出発地(住所・駅名):<input type="text" size="30" name="saddr" id="saddr" value="" />
交通手段:<input type="radio" name="dirflg" value="r" checked="checked" />電車
<input type="radio" name="dirflg" value="d" />車
<input type="hidden" name="daddr" value="lat,lon" />
<input type="submit" value="ルート検索" />
</form>

・アイコンクリックにイベントを追加

GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml([上記HTML]);
});
2,321 views

Googlemap マウスホイールのズーム

GoogleMap v2.78以降

マウスホイールのズーム可否を指定するメソッド

enableScrollWheelZoom // 有効
disableScrollWheelZoom // 無効
2,053 views