Как узнать, есть ли панорама на улицу в помещении или на улице

Сегодня все больше и больше предприятий используют уличный вид, чтобы показать квартиры изнутри.

Моя программа предоставляет возможность просмотра улиц в соответствии с выбранным бизнесом. Но я не хочу показывать в помещении. Только на открытом воздухе. Потому что Indoors блокирует меня, чтобы двигаться, только чтобы повернуться на 360 градусов.

Кто-нибудь знает, как получить API-интерфейс Street View, если я собираюсь показывать в помещении или на улице?

Большое спасибо,

Это мои фрагменты кода, которые пока открывают улицу в соответствии с выбранным адресом:

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;
};

Основная идея заключалась в том, чтобы получить местоположение Panorama и проверить расстояние до ближайших мест на 360 градусов.

Ответы

Ответ 1

Я не могу найти формальный API для этого (возможно, в будущем они будут его реализовывать), и я не думаю, что вы можете быть уверены, что внутренние плитки будут с пустыми описаниями.

То, что я нашел для себя для работы, это использовать этот API: Запустите HTTP GET на этот адрес: "http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103" с ll = LONG, LAT

Это внутренний API, используемый для поиска целевого местоположения pano_id. Он также дает нам некоторую информацию о том, что мы можем с этим сделать: уровни масштабирования, какие улицы вы находитесь и т.д.

Я заметил, что все результаты для координат, которые имеют изображения на улице, имеют scene="_number" level_id="_id" в теге data_properties панорамы. Итак, для каждого местоположения вы можете запустить этот запрос и искать эти значения в data_properties результата XML

несколько примеров:

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

Источник: Взлом google street view

Обновление

Кажется, что для того, чтобы локальные предприятия правы pano_id, вам нужно добавить &it=all к запросу Пример:

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

Ответ 2

Здесь запрос функции, который я подал с Google:
"Возможность отключить просмотр улиц в помещении"
https://code.google.com/p/gmaps-api-issues/issues/detail?id=4831

Не стесняйтесь показывать билет там, чтобы помочь ему привлечь внимание.

(Является ли это нормальным этикетом?... не настоящий ответ (пока), но кажется достойным обмена здесь, так что заинтересованные стороны могут сыграть/отслеживать билет)

Ответ 3

Возможность отфильтровывать панорамы уличных улиц была реализована в API JavaScript Карт Google некоторое время назад.

Вы можете использовать StreetViewService для поиска только открытых панорам. В запросе вы должны указать источник как открытый

https://developers.google.com/maps/документация/JavaScript/ссылки/3/# StreetViewSource

Взгляните на следующий пример кода, демонстрирующий, как получить только открытые панорамы

  var panorama;
function initialize() {
   var svService = new google.maps.StreetViewService();
   var panoRequest = {
       местоположение: новый google.maps.LatLng(37.800953, -122.436738),
       Предпочтение: google.maps.StreetViewPreference.NEAREST,
       радиус: 50,
       source: google.maps.StreetViewSource.OUTDOOR
   };

   svService.getPanorama(panoRequest, function (panoData, status) {
       if (status === google.maps.StreetViewStatus.OK) {
           panorama = новый google.maps.StreetViewPanorama(
               document.getElementById( 'уличного вида'),
               {
                   pano: panoData.location.pano,
                   pov: {
                       заголовок: 10,
                       Шаг: 10
                   }
               });
       } else {
           // Обрабатываем другие статусы здесь
       }
   });
}Код>
  html, body {
 высота: 100%;
 margin: 0;
 заполнение: 0;
}
# street-view {
 высота: 100%;
}Код>
  < div id = "street-view" > </div>
< script async отложить
        src= "https://maps.googleapis.com/maps/api/js?key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initialize" >
   </сценарий >код>