読者です 読者をやめる 読者になる 読者になる

We All Get Old - Naskin Diary

Yet Another My Life On The Web

F1世界選手権サーキットマップをリニューアル中(1965-1966年データを登録)

F1世界選手権サーキットマップを引き続きアップデート中。


今日は細かい修正と通院で時間が取れなかったので1965-1966年のデータ登録しか出来ませんでした。


1955年の南アフリカグランプリが1月1日開催で下のようなコードでデータを取得していたので表示されないというバグがありました。


修正前

        ymin = datetime.date(int(year), int(1), int(1))
        ymax = datetime.date(int(year), int(12), int(31))
        gq = grandprix.all().filter('date > ', ymin).filter('date < ', ymax)


修正後

        gq = grandprix.all().filter('date >= ', ymin).filter('date < ', ymax)

それにしても元旦からF1グランプリって超お祭り騒ぎのような気がする。


あと Marker をクリックすると InfoWindow が開くようになっていて marker に紐付けしているのですが、そこの処理を1個1個 switch 文で割り当てているのですが、Google App Engine(Python)側で自動的に JavaScript の case の中を書き出せるなと気づいて修正をしました。
これでマーカー数がいくら増えても html/JavaScript を修正する必要はないはず。

for (i = 0; i < gpdata.length; i++) {
(省略)
            switch (i) {
{% for i in gp_cnt %}
                case {{ i }}:
                    marker{{ i }} = marker;
                    var infowindow{{ i }} = new google.maps.InfoWindow({
                        content: contentString,
                        position: platlng
                    });
                    google.maps.event.addListener(marker{{ i }}, 'click', function(){
                        infowindow{{ i }}.open(map, marker{{ i }});
                    });
                    break;
{% endfor %}
            }
            marker.setMap(map);
(省略)
}

marker.setMap(map)は繰り返しても問題ないのに InfoWindow と addListener() は for ループの中で処理すると一番最後のマーカーにしか紐付けてくれなくてこんな switch 文が必要になりました。