コンテンツにスキップするには Enter キーを押してください

カテゴリー: 技術メモ

Google Maps APIのストリートビューで擬似AR

こないだ仕事で、Google Maps JavaScript API V3を利用してとあるサービスのサービス拠点を検索・表示するページを作成しました。
要はマップを動かすとその中心点から近いサービス拠点を検索してマップ上にマーカーを表示するというよくあるアレです。

さて。

Google Maps API V3でストリートビューを表示できるようにするためには、streetViewControlというパラメータがtrueである必要があります。

今まではデフォルトではfalseだったため、明示的にtrueにしなければストリートビューが表示されることはありませんでした。

ところが。
先月10月ごろから、デフォルトがtrueに変更されました。

冒頭のサービス拠点検索ページもその影響でストリートビューが表示されるようになってしまい、納品前で余計な不具合を出したくなかったのですぐにfalseに変更しました。
が、どうやら先方の社内でストリートビューが見られることの評判が良かったらしく、戻して欲しいと言われたので戻しました。

そんなにいいものなのかと思って、実際にストリートビューで表示させてみたんですが、これがなかなか面白くて、マップ上に配置したマーカーがセカイカメラのエアタグのように表示されるんです。
近くにあるマーカーは大きく、遠くにあるマーカーは小さく。ちゃんと遠近感があります。さすがに高さは無理みたいですが。
たしかにこれは表示できたほうが拠点の案内サービスとしては親切でしょうし、納得です。

んで。
適当にデモを作ってみました。
30個ほどランダムでマーカーを配置してあるので、左上のペグマン(黄色いの)を道にドラッグ&ドロップしてストリートビューを表示させてみてください。

コードは以下のとおりです。


コメントする

Python・JavaScript・PHPでのループ処理のやり方まとめ

最近、仕事でもプライベートでもよくPythonを使っているのですが、ループのやり方が今まで使ってきたJavaScriptやPHPと少し使い勝手が違っていて迷うことがよくあるので防備録としてまとめておきます。
比較対照として、JavaScriptとPHPで同じことをする方法もまとめてみました。
こうやって比較してみるとそれぞれ特徴があって面白かったですよ。


コメントする

確率を指定してリストからランダムに取得する

仕事で、指定した確率(重み付け)に従ってリストの中からランダムで一つ取得するという仕組みが必要になったのでこんなのを書いてみました。
言語はPythonです。NYSLでどーぞ。

import random

def choose(candidates, probabilities):
    probabilities = [sum(probabilities[:x+1]) for x in range(len(probabilities))]
    if probabilities[-1] > 1.0:
        #確率の合計が100%を超えていた場合は100%になるように調整する
        probabilities = [x/probabilities[-1] for x in probabilities]
    rand = random.random()
    for candidate, probability in zip(candidates, probabilities):
        if rand < probability:
            return candidate
    #どれにも当てはまらなかった場合はNoneを返す
    return None

candidatesに選択したいものを並べたリストを、probabilitiesに確率(重み付け)のリストを渡すと、その確率に沿ってcandidatesからひとつ取得します。
choose(['A', 'B', 'O', 'AB'], [0.4, 0.2, 0.3, 0.1])で10万回施行
A : 40037
B : 20089
AB : 9913
O : 29961

probabilitiesの合計が100%未満の場合はNoneが返ることがあります。
choose(['foo', 'bar', 'baz'], [0.1, 0.2, 0.3])で10万回施行
foo : 10274
bar : 19905
baz : 29746
None : 40075

逆に100%を超えている場合は、全部で100%になるように確率を調整します。
choose(['hoge', 'fuga', 'piyo'], [0.4, 0.6, 1.0])で10万回施行
hoge : 19794
fuga : 30023
piyo : 50183


1件のコメント