天道酬勤,学无止境

StreetViewService getPanorama 方法报告 LatLng paris 的状态代码不正确(StreetViewService getPanorama method reporting Incorrect Status Codes for LatLng paris)

问题

突然之间,我似乎从 Google Maps Javascript API 获得了不准确的状态代码。 例如,使用此代码:

sv.getPanorama({
    location: {lat: 35.685, lng: 139.7514}, 
    radius: 350
  }, function(data, status) {
    console.log("getPano() location = "+data.location.latLng);
    console.log("getPano() panoID = "+data.location.pano);
    console.log("getPano() status = "+status);
});

有了这个,我得到以下输出:

new getPano() location = (35.685175, 139.75279950000004)
getPano() panoID = F:-2eRkGOODHZg/VtKZ7EGeepI/AAAAAAAADLY/Fvhw3HeTfXcAVq0wuHxq22LnoTtpeUx2A
getPano() status = OK

当我尝试基于此数据构建请求 URL 时,例如:

https://maps.googleapis.com/maps/api/streetview?size=640x540&location=35.685175,139.75279950000004

或使用全景 ID:

https://maps.googleapis.com/maps/api/streetview?size=640x540&pano=F:-2eRkGOODHZg/VtKZ7EGeepI/AAAAAAAADLY/Fvhw3HeTfXcAVq0wuHxq22LnoTtpeUx2A

我收到“抱歉,我们这里没有图像”。 图片。 换句话说,即使状态返回OK ,此位置也没有可用的全景图。 为此latLng手动访问 Google 地图可以证明这一点。 谷歌确实有该位置的卫星图像,但没有街景全景图。

这段代码曾经有效,所以我对发生了什么感到困惑。 当 panoID 和 latLng 指向无图像时,为什么 API 会返回此位置的 OK pano 状态?

更新:我很感激任何确认我的发现与其他人相同(例如,这不是我做错了什么),以及任何解决方法的想法。 我的应用程序可以为 latLng 位置提取静态街景图像,但如果没有可用的街景图像,我会转向卫星。 我使用 getPanorama() 状态来确定要采取的方向。

回答1

从几天前开始, google.maps.StreetViewService.getPanorama()确实返回了无法在 JavaScript API 中显示的全景图。

这是 API 中的一个问题,请在问题跟踪器上启动它以获取更新:

问题 10335:错误:StreetViewService getPanorama() 报告许多 latLng 对的错误状态

回答2

新的街景图像元数据 API 将允许您查询给定位置的街景全景图的可用性,它只会返回街景图像 API 中实际可用的全景图。 这将使您摆脱问题 10335。

位置可以由地址或纬度指定。 如果找到全景图,响应将包含全景 ID,以在街景图像 API 请求中使用。 这些元数据查询是免费的。

回答3

公共问题跟踪器中有一个单独的功能请求,可以在街景图像 API 中启用对全景 ID 的访问,如F:-2eRkGOODHZg/VtKZ7EGeepI/AAAAAAAADLY/Fvhw3HeTfXcAVq0wuHxq22LnoTtpeUx2A

https://issuetracker.google.com/issues/35829459

如果您对此功能感兴趣,请在功能请求上加注星标以添加您的投票。

更新

我之前提到的功能请求现在被标记为 Fixed。

Google 通过街景图像 API 实现了对用户生成内容的访问。 但是,在此过程中,全景 ID 格式已更改。

例如,您提到了全景 ID F:-2eRkGOODHZg/VtKZ7EGeepI/AAAAAAAADLY/Fvhw3HeTfXcAVq0wuHxq22LnoTtpeUx2A

现在,此全景图的新全景 ID 是CAMSRi0yZVJrR09PREhaZy9WdEtaN0VHZWVwSS9BQUFBQUFBQURMWS9Gdmh3M0hlVGZYY0FWcTB3dUh4cTIyTG5vVHRwZVV4MkE.

您可以使用免费且不消耗配额的街景图像元数据请求,轻松地将以前的全景 ID 转换为新的全景 ID:

https://maps.googleapis.com/maps/api/streetview/metadata?pano=F%3A-2eRkGOODHZg%2FVtKZ7EGeepI%2FAAAAAAAADLY%2FFvhw3HeTfXcAVq0wuHxq22LnoTtpeUx2A&key=YOUR_API_KEY

{
    "copyright":"© Alberto Saito","date":"2016-02",
    "location":{
        "lat":35.685175,
        "lng":139.7527995
    },"pano_id":"CAMSRi0yZVJrR09PREhaZy9WdEtaN0VHZWVwSS9BQUFBQUFBQURMWS9Gdmh3M0hlVGZYY0FWcTB3dUh4cTIyTG5vVHRwZVV4MkE.",
    "status":"OK"
}

现在应用新的全景 ID 并享受:

https://maps.googleapis.com/maps/api/streetview?pano=CAMSRi0yZVJrR09PREhaZy9WdEtaN0VHZWVwSS9BQUFBQUFBQURMWS9Gdmh3M0hlVGZYY0FWcTB3dUh4cTIyTG5vVHRwZVV4MkE.&size=600x400&key=YOUR_API_KEY

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • StreetViewService getPanorama method reporting Incorrect Status Codes for LatLng paris
    All of the sudden I appear to be getting inaccurate status codes from the Google Maps Javascript API. For example, with this code: sv.getPanorama({ location: {lat: 35.685, lng: 139.7514}, radius: 350 }, function(data, status) { console.log("getPano() location = "+data.location.latLng); console.log("getPano() panoID = "+data.location.pano); console.log("getPano() status = "+status); }); With this, I get the following output: new getPano() location = (35.685175, 139.75279950000004) getPano() panoID = F:-2eRkGOODHZg/VtKZ7EGeepI/AAAAAAAADLY/Fvhw3HeTfXcAVq0wuHxq22LnoTtpeUx2A getPano() status = OK
  • 如何检查Google街景视图是否可用并显示消息?(How to check if Google Street View available and display message?)
    问题 我正在传递lat和lng变量,并在div中显示google sreet视图。 问题是当StreetView不可使用时,什么也不会显示。 我想检查给定的经纬度是否有街景,并显示一条消息。 这是我的代码: var myPano = new GStreetviewPanorama(document.getElementById("street2"), panoOpts); var location = new GLatLng(lat,lng) myPano.setLocationAndPOV(location); 也许我应该使用类似的东西: Event.addListener(myPano, "error", errorMessage()); 有任何想法吗? 回答1 在v3中,这已发生了一些变化。 在http://code.google.com/apis/maps/documentation/javascript/reference.html#StreetViewService上查看文档。 更新后的代码是: var streetViewService = new google.maps.StreetViewService(); var STREETVIEW_MAX_DISTANCE = 100; var latLng = new google.maps.LatLng(40.7140
  • 谷歌地图街景图块最初不会在 Firefox 中加载,只有在拖动之后(Google maps streetview tiles do not load in Firefox initially, only after dragging)
    问题 我对谷歌地图街景有问题(在引导主题中,如果这与它有关)。 我通过单击按钮将街景设置为可见,它在 IE 和 Chrome 中工作正常,但在 Firefox 中,街景保持灰色(即它不加载初始图块),直到您用鼠标拖动视图。 我创造了一个关于它的小提琴,尝试你自己并感到惊讶: http://jsfiddle.net/wK5Hq/22/ 任何人都知道为什么会发生这种情况? 编辑:现在,当我在小提琴中尝试时,使用 Firefox 根本没有加载瓷砖,在 chrome 上加载得很好。 在我的真实环境中,在第一次拖动视图后,图块也会在 Firefox 中加载。 EDIT2:在小提琴中根本没有显示瓷砖,因为我忘记添加样式来修复引导程序与谷歌地图画布的混乱。 我在 css 中添加了“.map-canvas img”规则,现在它显示了最初的问题。 在 Firefox 中拖动街景视图之前,瓷砖不会加载。 更新了上面的小提琴链接。 这是小提琴中的代码 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Google maps streeview issue - jsFiddle demo</title> <script type='text
  • Load Google Maps API in jsdom
    I am trying to load the Google Maps API in jsdom. More specifically I am interested in getting the data from the getPanorama callback function. However, when I execute the following code I see 'Executed with no error', but I don't see any of the messages 'status ok' or 'status not ok'. var jsdom = require("jsdom"); var cafe = {lat: 51.47803167, lng: 0.141212256}; jsdom.env({ html: "<html><body></body></html>", scripts: ["https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"], done: function (err, window) { if (err) { console.log('Error is' + err); } else { // console.log(window.google)
  • 如何检查街景是否可用(How to check is streetview is available on location)
    问题 我正在使用 Google Maps Android SDK,我试图找出某个位置是否有可用的街景全景图。 描述该功能:“如果用户单击地图标记并且该位置有全景图,则显示全景图,否则只需将地图缩放到标记位置) 如果该位置没有全景图,我宁愿不创建 SupportStreetViewPanoramaFragment。 即使我创建它,我认为唯一可能的方法是调用 setOnStreetViewPanoramaChangeListener 然后调用 setPosition 并检查侦听器上的全景 id ......由于某种原因没有调用侦听器,但我还没有尝试修复它因为反正感觉太麻烦了。 这里有什么优雅的解决方案吗? 我也希望(坚持)避免通过以下链接调用 JavaScript API v3:https://developers.google.com/maps/documentation/javascript/reference#StreetViewService var latLng = new google.maps.LatLng(lat, lon); streetViewService.getPanoramaByLocation(latLng, STREETVIEW_MAX_DISTANCE, function (streetViewPanoramaData, status) { if
  • 谷歌地图 api v3 - 最近的街景(google maps api v3 - nearest streetview)
    问题 当某个位置的街景不可用时,我想找到最近的街景位置? 我能想到的唯一办法就是。 radius = 0; noOfPoints = 3; while(radius < 10 miles){ radius = radius + 0.2 miles points = calculate 4 * noOfPoints at this radius loop(points) { if(streetview visibile for point) bingo, break; } break if bingo; noOfPOints = noOfPoints+1; } 但是,即使我想在 10 英里范围内找到街景,这也是非常昂贵的,而且我指望运气在这些点之一找到街景,即,我可能会错过街景的实际点。 有人可以指导我采用更好的方法吗? 回答1 您可以尝试使用 StreetViewService 来帮助您找到最近的现有街景: var astorPlace = new google.maps.LatLng(40.729884, -73.990988); var webService = new google.maps.StreetViewService(); /**Check in a perimeter of 50 meters**/ var checkaround = 50; /**
  • 如何在Android的StreetView中检查位置是否有效(How to check if position if valid in StreetView in Android)
    问题 我有一个应用程序,它根据定义的边界在GoogleMaps中随机生成位置。 因此,我首先生成一个随机的LatLng,然后验证此点是否在我的边界内。 如果是的话,那是有效的。 Builder builder = new LatLngBounds.Builder(); double antartica[] = {-62.5670958528642, -59.92767333984375, -62.584805850293485, -59.98260498046875, -62.61450963659083}; for (int i = 0; i < antartica.length; i++) { builder.include(new LatLng(antartica[i],antartica[++i])); } pAntarctica = builder.build(); LatLng point = generateRandomPosition(); if(isWithinBoundaries(point)) return point; else return getValidPoint(); 因此,在此之后,我得出了正确的结论。 我的问题是Google地图中的有效点不一定在StreetView中有效。 此随机点可能发生在地球上尚未映射到StreetView中的某个地方。
  • 索取主要道路/路边的StreetView全景图,而不是从API请求后巷(Request main road / curbside StreetView panoramas instead of back alleys from API)
    问题 有没有一种方法可以请求给定位置(纬度/经度)的主要道路Google StreetView全景数据,而不是后巷全景数据? 我正在使用Google Maps Javascript API从用户提供的家庭住址中检索街景全景图。 对于我尝试过的大多数地址来说,它的效果都很好,但是我注意到,加州的许多房产也有后巷的街景,而且API接缝始终返回后巷全景,而不是主要道路(前物业)全景。 我不想向用户显示他们房屋的后巷全景图,而是向主路全景图显示。 如果我在maps.google.com上查找相同的地址,我会看到房子的正面,但是当我通过API请求相同的地址时,我会看到后巷。 我当前正在使用的过程是: 地理地址根据地理编码位置(纬度/经度)获取全景图计算标题并在页面上显示全景图 测试地址: 美国加利福尼亚州比佛利山庄325 S Peck Dr,90212 美国加利福尼亚州贝弗利山庄333 S Rodeo Dr,90212 任何想法或建议,将不胜感激。 谢谢! 回答1 使用路线服务获取从所需地址到其自身的路线。 使用该位置,而不是地理编码器结果获取街景位置。 将地理编码器结果(希望是ROOFTOP精度结果)用于要“观察”的位置。 相关问题:使用Google StreetView面向目标建筑物示例: 美国加利福尼亚州比佛利山庄325 S Peck Dr,90212 美国加利福尼亚州贝弗利山庄333
  • 地址中的Google Maps StreetView(Google Maps StreetView from Address)
    问题 当您访问Google Maps网络地图服务并搜索地址时,例如说“ 666 5th avenue,New York,NY 10019”,系统将向您提供一张地图,其中带有显示位置的标记以及左上方的各种控件和链接地图。 其中包括街景视图链接。 单击它,您将看到一幅全景图,显示建筑物的正面(在本例中为第五大道)。 但是,如果我使用JavaScript API并想显示StreetView,则全景图不会显示建筑物的正面。 我可以对地址进行地址编码,但是当我获得全景图时,它不会看着建筑物的正面(在这种情况下,它将是距离最近的第52街交叉街的建筑物侧面)。 更糟糕的是,如果提供的地址是大型场所,例如购物中心,您将需要增加默认值50米之外的公差,并且通常最终只能从一条小街上看到风景。 是否可以从某个地址(最好是Google的网络地图服务所提供的地址)获取StreetView全景图,而不是从纬度,经度以及API v3的航向或俯仰角度获取StreetView全景图? 回答1 使用此问题的答案中的代码:使用“示例”地址为“ 666 5th avenue,New York,NY 10019”向API请求主要道路StreetView全景图,而不是从API返回后巷,这使我在Google地图上获得的结果相同。 代码段: var sv = new google.maps.StreetViewService()
  • 如何切换标记?(How do I toggle markers?)
    问题 我制作标记的代码: for (var marker in markers) { var posMarker = new google.maps.Marker({ position: new google.maps.LatLng(markers[marker].lat, markers[marker].lng), map: map, visible: markers[marker].visible }); }; 我的标记对象: var markers = { "London": {"lat": -83.68088192646843, "lng": -125.270751953125, "type": "town", "visible": false}, "Paris": {"lat": -58.1548020417031, "lng": -21.318115234375, "type": "town", "visible": false}, }; 我试图能够使用这样的复选框切换标记: $('#toggle').change(function() { for (var marker in markers) { posMarker.setVisible(true); }; }); 但是只显示数组中的最后一个标记,如何让它们全部出现? 谢谢。 回答1 好吧
  • android 地图上的折线在缩小时消失(Polylines on android map disappear when zoomed out)
    问题 我正在使用下面的代码在谷歌地图(android API v2)上以 5 度的间隔绘制一堆垂直线。 一切都很好,直到缩小到大约缩放级别 5.1,此时我的所有线条都消失了。 这是我的代码中的错误,还是地图 API 故意做的事情? 如何让这些线条在所有缩放比例下显示? 非常感谢。 if (gMap != null) { double lat = loc_service.getLatitude(); double lng = loc_service.getLongitude(); LatLngBounds bounds = new LatLngBounds(new LatLng(lat-(MAP_WIDTH/2), lng-(MAP_WIDTH/2)), new LatLng(lat+(MAP_WIDTH/2), lng+(MAP_WIDTH/2))); CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 720, 720, 0); gMap.setMyLocationEnabled(true); gMap.moveCamera(cu); // initialize the time marker AT ONE MINUTE INTERVALS time_markers = new ArrayList
  • How to check is streetview is available on location
    I'm using the the Google Maps Android SDK and I'm trying to find out if a StreetView panorama is available is a certain location. To describe the feature: "If a user click on a map marker and a the location has a panorama then show the panoram, otherwise just zoom the map to the marker location) I'd rather not create a SupportStreetViewPanoramaFragment if the location doesn't have a panorama. Even if I create it I think the only possible way would be to call setOnStreetViewPanoramaChangeListener and then call setPosition and check the panorama id on the listener... For some reason the listener
  • Lon Lat的Google Maps Api StreetView PanoramaOptions视点设置(Google Maps Api StreetView PanoramaOptions Point of View Setting from Lon Lat)
    问题 我的Lat Lng坐标确定了StreetViewPanorama。 我的纬度和经度坐标不在Google汽车拍摄照片的道路上,而是位于我要在StreetView图片中看到的建筑物的中心。 所以我有2对坐标,我认为可以计算POV度以获得正确的建筑物快照。 我需要的是如何获得自动放置“男人”位置的Lon Lat,以便我可以计算出正确的POV度。 回答1 我对kiks73的解决方案的实现。 确保在加载地图api时添加几何库: https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=visualization,places,geometry&sensor=true var dist = 50; service.getPanoramaByLocation(targetLatLng, dist, function(panoData){ panoramaLatLng = panoData.location.latLng; initStreetView(targetLatLng, panoramaLatLng) }); function initStreetView(targetLatLng, panoramaLatLng){ var panoramaOptions = { position: targetLatLng }; var
  • 谷歌地图中的多个标记,多个地图(Multiple markers in google maps, multiple maps)
    问题 我正在尝试在同一页面中构建 2 个谷歌地图。 其中一张地图有几个标记...... function initializeMap() { var locations = [ ['PARIS - FRANCE', 485.810,2.2629], ['PARIS - FRANCE', 49.046,2.330], ['PARIS - FRANCE', 48.4331,2.2134], ['PALERMO - ITALY', 38.1033,1.3527], ['ROME - ITALY', 41.4846,1.21511] ]; var lat = '48.900401'; var lon = '2.231761'; var contentString = '<p style="color:#8fd522; font-weight: bold;">XXX</p>'; var centerLon = lon - 0.0105; var myOptions = { scrollwheel: false, draggable: false, disableDefaultUI: true, center: new google.maps.LatLng(lat, centerLon), zoom: 15, mapTypeId: google.maps.MapTypeId.ROADMAP }
  • Google maps streetview tiles do not load in Firefox initially, only after dragging
    I have a problem with google maps streetview (in a bootstrap theme, if that has something to do with it). I set the streetview visible with a click of a button and it works in IE and Chrome ok, but in Firefox, the streetview stays gray (ie. it doesn't load the initial tiles) until you drag the view with a mouse. I created a fiddle about it, try your self and be amazed: http://jsfiddle.net/wK5Hq/22/ Anyone have a guess why is this happening? EDIT: Now when I tried it in the fiddle, the tiles are not loading at all with Firefox, loads fine on chrome. In my real environment, the tiles load in
  • 如何检测 Google StreetView 在地址/坐标中是否可用(How to detect if Google StreetView is available in an address/coordinates)
    问题 我正在制作一个使用 Google Street View Image API 的应用程序 我可以根据地址/坐标获取街景图像 但是 - 我想检测特定地址是否有可用的街景图像(为了对没有它的地址显示不同的行为) 到目前为止我唯一的想法是读取返回图像的像素并检测这是否是我在没有可用图像时得到的图像 还有其他想法吗? 谢谢! 回答1 使用 google.maps.StreetViewService.getPanoramaByLocation( latlng, radius, callback()) 可以查看是否有街景全景图。 如果有街景全景图,那么一定有街景图。 您可以参考谷歌的参考:https://developers.google.com/maps/documentation/javascript/reference#StreetViewService 或者参考 StreetViewService 的例子:https://google-developers.appspot.com/maps/documentation/javascript/examples/streetview-service 回答2 Google 有一个 api 端点,您可以在其中查找全景图/街景的元数据: https://maps.googleapis.com/maps/api/streetview
  • 使用Google Maps API根据地址显示房屋的街景(Use Google Maps API to display Street View of a house based on an address)
    问题 我正在尝试使用Google地图根据地址显示房屋的街景。 我已经根据本教程创建了一个jsfiddle。 小提琴正在努力显示默认的初始地址,但是当按下按钮时,我无法弄清楚如何将新地址传递到街景代码中。 这是HTML: <h3>Enter an Address to view the street view</h3> <form action="/" method="POST"> <textarea name='new_address' class="address">150 Glen Road, Toronto</textarea> <input type="submit" id="change_street" value="Change Street View Address" /> </form> <div class="map_container"> <div id="map_canvas_cont"> <div id="map_canvas"></div> </div> <div id="pano_cont"> <div id="pano"></div> </div> </div> 这是javascript: var panorama; var addLatLng; var showPanoData; var panorama; function load_map_and
  • 更改缩放后获取Google Map v3的边界(Get bounds of a google map v3 after zoom change)
    问题 我正在尝试在缩放更改后获取地图的边界,但是在重新计算边界之前会触发zoom_changed事件。 因此,在 zoom_changed 处理程序中,您将获得先前的边界,而不是新的边界。 有什么方法可以获取正确的缩放范围吗? 回答1 这是一个错误,如果您有兴趣,请给这个问题加星号。 有一个丑陋的解决方法: google.maps.event.addListener(map, 'zoom_changed', function () { google.maps.event.addListenerOnce(map, 'bounds_changed', function (e) { my_zoom_handler(); // do your job here }); }); 回答2 从API文档中: 如果要检测视口中的更改,请确保使用特定的bounds_changed事件,而不是使用zoom_changed和center_changed事件。 由于 Maps API 独立触发这些后面的事件,get_bounds() 可能在视口发生权威性更改之前不会报告有用的结果。 如果您希望在此类事件之后使用 get_bounds(),请务必改为监听 bounds_changed 事件。 回答3 要绑定 bounds_changed 并在缩放后使用标记/地图内容,请使用以下命令: google.maps
  • 选择公式排除列具有空值的行(Selection formula excluding rows with columns having null values)
    问题 我有一个奇怪的问题。 我有一份报告 CR。 在选择公式中,我对两个字段进行了测试。 测试很简单: {field_City} = 'Paris' OR {field_Country} = 'France' 。 这是我表中的数据示例: |---------------|---------------|---------------| | ID_Record | Country | City | |---------------|---------------|---------------| | 1 | null | Paris | |---------------|---------------|---------------| | 2 | France | null | |---------------|---------------|---------------| | 3 | France | Paris | |---------------|---------------|---------------| 选择的结果应该是 3 条记录,但是它不包括其中一列中有空值的前 2 行。 然后我改变了这样的选择公式以考虑空值: ({field_City} = 'Paris' AND (isnull({field_Country}) OR not(isnull({field
  • 每当有相应的“开始”呼叫时强制执行“结束”呼叫(Enforcing an “end” call whenever there is a corresponding “start” call)
    问题 假设我要执行一个规则: 每次在函数中调用“ StartJumping()”时,都必须先调用“ EndJumping()”,然后再返回。 当开发人员编写他们的代码时,他们可能只是忘了调用EndSomething-所以我想使其易于记忆。 我只能想到一种方法:它滥用了“ using”关键字: class Jumper : IDisposable { public Jumper() { Jumper.StartJumping(); } public void Dispose() { Jumper.EndJumping(); } public static void StartJumping() {...} public static void EndJumping() {...} } public bool SomeFunction() { // do some stuff // start jumping... using(new Jumper()) { // do more stuff // while jumping } // end jumping } 有一个更好的方法吗? 回答1 我将不同意Eric:何时进行此操作与否取决于情况。 有一次,我正在重新整理一个庞大的代码库,以包含对自定义图像类的所有访问的获取/释放语义。 图像最初是在不动的内存块中分配的,但是现在