2013-02-10 18 views
14

今日ますます多くの企業が室内からマンションを示すために、ストリートビューを使用しているかどうかを知る方法。ストリートビューのパノラマは、屋内または屋外

選択したビジネスに応じてストリートビューを表示するために私のプログラムを供給する能力。しかし、私は屋内では見せたくありません。屋外のみ。屋内では私が移動するのをブロックするので、360度だけ回転します。私は屋内または屋外示しつもりならば

誰もがストリートビューAPIいくつかの値からフェッチする方法を知っていますか?

function load_map_and_street_view_from_address(address) { 

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 
    'address': address 
}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var gps = results[0].geometry.location; 
     create_map_and_streetview(gps.lat(), gps.lng(), 'map_canvas', 'pano'); 
    } 
}); 
} 


function create_map_and_streetview(lat, lng, map_id, street_view_id) { 
var googlePos = new google.maps.LatLng(lat,lng); 

addLatLng = new google.maps.LatLng(lat,lng); 
var service = new google.maps.StreetViewService(); 
service.getPanoramaByLocation(addLatLng, 50, showPanoData); 

} 

function showPanoData(panoData, status) { 
if (status != google.maps.StreetViewStatus.OK) { 
    $('#pano').html('No StreetView Picture Available').attr('style', 'text-align:center;font-weight:bold').show(); 
    return; 
} 
$('#pano').show(); 
var angle = computeAngle(addLatLng, panoData.location.latLng); 

var panoOptions = { 
    position: addLatLng, 
    addressControl: false, 
    linksControl: false, 
    panControl: false, 
    zoomControlOptions: { 
     style: google.maps.ZoomControlStyle.SMALL 
    }, 
    pov: { 
     heading: angle, 
     pitch: 10, 
     zoom: 1 
    }, 
    enableCloseButton: true, 
    visible:true 
}; 

panorama.setOptions(panoOptions); 

} 

function computeAngle(endLatLng, startLatLng) { 
var DEGREE_PER_RADIAN = 57.2957795; 
var RADIAN_PER_DEGREE = 0.017453; 

var dlat = endLatLng.lat() - startLatLng.lat(); 
var dlng = endLatLng.lng() - startLatLng.lng(); 

var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat) 
* DEGREE_PER_RADIAN; 
return wrapAngle(yaw); 
} 

function wrapAngle(angle) { 
if (angle >= 360) { 
    angle -= 360; 
} else if (angle < 0) { 
    angle += 360; 
} 
return angle; 
}; 

主なアイデアは、パノラマの位置を取得してまでの距離を確認することでした:

は、選択したアドレスに応じてこれはこれまでのところ、コードの私のスニペットそのオープンストリートビューがある

、ありがとうございました360度付近の最も近い場所。

+1

は同様の要求がバグ/機能強化として提出されているように見えます)チケットを追跡:http://code.google。IDとタイプ+ステータス+紹介+固定+要約+スター+ ApiType +内部&セル=タイル – JSuar

+2

私は答えとしてこれを投稿していません。それはいつでも変わるかもしれませんが、パノラマの場所が屋内であればpanorama.linksの各プロパティには説明プロパティ(通りの名前を含む)があり、屋内の場合は空であることがわかりました。 (panorama.links.length === 0 || panorama.links [0] .description == "") '、屋内の場合はtrueを返します。 私は広範囲にテストしなかったので、それが保持されるかどうかはわかりません。 そして、私はこれがすぐに変わると信じています – yoelp

+0

ありがとう、あなたの道を試してみましょう –

答えて

9

私は、このための正式なAPIを(おそらく将来的には、彼らが1を実装します)を見つけるように見えることはできません、と私はあなたが屋内のタイルが空の説明となりますことを確認することができないと思います。

私は私のために働いていることが判明すると、このAPIを使用している: 実行HTTPこのアドレスにGET:LL = LONGで「http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103」、LAT

これは、ターゲットを見つけるために使用される内部APIですlocation pano_id。ズームレベル、現在の通りなど

私は、屋内のストリートビュー画像を持つ座標のすべての結果がscene="_number" level_id="_id"であることに気がつきました。パノラマのdata_propertiesタグ。だから、それぞれの場所のためにあなたは、この要求を実行することができ、結果XMLのdata_properties

いくつかの例では、これらの値を探します。

indoors: 
http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103 
http://maps.google.com/cbk?output=xml&ll=32.051626,34.7613 

outdoors: 
http://cbk0.google.com/cbk?output=xml&ll=52.358766,4.880494 
http://maps.google.com/cbk?output=xml&ll=32.07782,34.785789 

出典:Hacking google street view

更新

それはあなたが要求 例に&it=allを追加する必要が地元企業に権利pano_idを取得しているようだ:

http://cbk0.google.com/cbk?output=xml&hl=x-local&ll=34.058593,-118.240673&it=all 

この場所のため、この権利pano_idは、あなたがこのAPIここ

http://cbk0.google.com/cbk?output=tile&panoid=70o9Pukc2KSjO-PfeHussw&zoom=3&x=5&y=1 
+0

次の2日間に他の選択肢がない場合、50ポイントのあなたのおかげです。 –

+0

素晴らしい仕事の相手、ありがとう! –

2

を使用して、それを確認することができますが、私はグーグルに提出機能要求です:

https://code.google.com/p/gmaps-api-issues/issues/detail?id=4831「オプションは、屋内のストリートビューを無効にします」

は、それが

いくつかの注意を得るのを助けるためにそこにチケットを主演気軽に(このOKですエチケット賢い? ...ではない本当の答えは(まだ)が、ここで主演することができますので、利害関係者が共有する価値があると思われる/

+0

はい、これは良い情報です。迷惑なフィーチャー、チケットスター付き。それがいくつかの注意を得ることを望みます。 – mahalie

関連する問題