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

グーグルマップに移動した軌跡を表示する [Android]

グーグルマップに現在地を表示し、移動した軌跡を線で描画してみたいと思います。
描画の度にオーバーレイを重ねていくと、当然のことながら重たくなっていくので、
表示するオーバーレイは常に1枚、ルート情報はpathRouteに記憶させるようにしました。
ルート情報が増える毎にオーバーレイを書き直しています。

まずは、LocationListenerを実装し、MapActivityクラス継承したクラスを作成します。

public class MyMap extends MapActivity implements LocationListener {

    private MapView mMapView;
    private MapController mMapController;
    private MyLocationOverlay mOverlay;
    private LocationManager mLocationManager;
    private LineOverlay lineOverlay = new LineOverlay(); //軌跡を描画するオーバーレイ

    public static List<GeoPoint> pathRoute; //ルート情報

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        mMapView = (MapView)findViewById(R.id.mapview);
        mMapView.setClickable(true);

        mMapController = mMapView.getController();
        mMapController.setZoom(16);

        //現在地を表示
        mOverlay = new MyLocationOverlay(this, mMapView);
        mOverlay.onProviderEnabled(LocationManager.GPS_PROVIDER);
        mOverlay.enableMyLocation();
        mOverlay.runOnFirstFix(new Runnable(){
            public void run(){
                GeoPoint mPoint = mOverlay.getMyLocation();
                mMapController.animateTo(mPoint);
            }
        });
        mMapView.getOverlays().add(mOverlay);

        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    }

    @Override
    public void onResume(){
        super.onResume();

        mOverlay.enableMyLocation();

        if (mLocationManager != null) {
            mLocationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, // 精度は高いが遅い(誤差15m程度)
                //LocationManager.NETWORK_PROVIDER, // 精度は低いが速い(誤差100m程度)
                //LocationManager.PASSIVE_PROVIDER, //位置情報の修正を行わない特殊なプロバイダー(他アプリ等で測位された場合に、その位置情報を流用するらしい)
                5000, //通知する時間の間隔をミリ秒で指定します
                0, //通知する距離の間隔をメートルで指定します
                this);
        }
    }

    public void onPause(){
        super.onPause();

        mOverlay.disableMyLocation();

        if (mLocationManager != null) {
            mLocationManager.removeUpdates(this);
        }
    }

    //…以下省略
}

onLocationChangedイベントにてlineOverlayにポイントを追加します。 続きを読む…»

11,561 views

iPhoneアプリ 妊娠週刊パパ

パパの為の妊娠週刊カレンダーです。
出産まで週毎の胎児の状況やママの気持ちが少しだけ分かります。

ユニークな文章で説明が書かれていてわかりやすく、胎児が今どういう風に成長しているのかがよくわかります。
妻と一緒に妊娠期間中、楽しく読んでいました。

https://itunes.apple.com/jp/app/ren-shen-zhou-kanpapa/id476005657?mt=8

1,526 views

割り算した余りを求める [PHP]

除算(割り算)した剰余(じょうよ:余り)を求めるには以下のようにします。

$surplus = 1564 % 1000;
echo $surplus;

出力結果

564

他の言語でも、同様の演算子があるかと思います。
例えばVBなら「mod」です。

しかし、引数が整数型(Integer)ではない場合、意図しない結果が返ってくることがあります。

$surplus = (65.1 * 1000) % 1000;
echo $surplus;

続きを読む…»

10,337 views

指定した座標から一番近い場所のストリートビューを表示する

グーグルストリートビューで、指定した座標が建物上だったり、ストリートビューが提供されていない場所だった場合、そこから一番近い場所のストリートビューを表示する方法があります。

GoogleMap APIのバージョンが異なると書き方が違ってくるので、その違いを紹介。

JavaScriptのクラスとして定義しています。

バージョン2の場合、以下のようにしていました。

var stViewClass = {

    panoramaOptions: {
        latlng: new GLatLng({緯度}, {経度}),
        pov: {
            heading: 0,
            pitch: 0,
            zoom: 1
        }
    },

    makeStreetView: function(id)
    {
        stPanorama = new GStreetViewPanorama(document.getElementById(id), this.panoramaOptions);

        stClient = new GStreetviewClient();
        stClient.getNearestPanoramaLatLng(this.panoramaOptions.position, function(latlng) {
            if (latlng != null)
            {
                stPanorama.setLocationAndPOV(latlng);
            }
        });
    }

}

バージョン3の場合、以下のような記述になります。 続きを読む…»

5,007 views

フィボナッチ数列

黄金比と同じく、ウェブレイアウトに利用されるフィボナッチ数列を紹介します。

フィボナッチ数列とは、0と1から始まり、一つ前の数字を加算していく数列です。
数字が大きくなっていくと黄金比に近づいていきます。

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181 ...

フォントサイズや段組みレイアウトへの応用ができるのではないでしょうか。

詳しい情報はWikipediaをご覧ください
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0

1,840 views