从Google街景中的原始全景向北移动

时间:2016-11-30 21:26:39

标签: javascript google-maps google-street-view

我在项目中使用街景Javascript Api,我了解如何使用标题将Google的全景目标设为北方。

现在我还获得了创建此全景图的所有图块,并使用它们来创建360°原始全景图像。

但是,我想知道是否有办法自动找出北方在创建的原始全景图中的位置。

例如,enter image description here

2 个答案:

答案 0 :(得分:3)

有直接的解决方案吗?

据我所知,谷歌地图API以及特殊的全景视图没有像你在帖子中那样在图像的北部和/或南部有箭头的界面。

这样的解决方案必须由您手动编码才能确定。

变通

但是,您可以使用一种解决方法,它使用全景视图并在界面中具有内置指南针。这样,当您移动图像时,您总能感觉到北方和南方的位置。

image_example

代码和文档

您可以使用以下示例来实现此类接口(PS:替换API密钥!):

<!DOCTYPE html>
<html>
  <head>
    <title>Custom Street View panoramas</title>
    <meta charset="utf-8">
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map {
        height: 100%;
      }
      /* Optional: Makes the sample page fill the window. */
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      function initPano() {
        // Set up Street View and initially set it visible. Register the
        // custom panorama provider function. Set the StreetView to display
        // the custom panorama 'reception' which we check for below.
        var panorama = new google.maps.StreetViewPanorama(
          document.getElementById('map'), {
            pano: 'reception',
            visible: true,
            panoProvider: getCustomPanorama
        });
      }

      // Return a pano image given the panoID.
      function getCustomPanoramaTileUrl(pano, zoom, tileX, tileY) {
        // Note: robust custom panorama methods would require tiled pano data.
        // Here we're just using a single tile, set to the tile size and equal
        // to the pano "world" size.
        return 'https://developers.google.com/maps/documentation/javascript/examples/full/images/panoReception1024-0.jpg';
      }

      // Construct the appropriate StreetViewPanoramaData given
      // the passed pano IDs.
      function getCustomPanorama(pano, zoom, tileX, tileY) {
        if (pano === 'reception') {
          return {
            location: {
              pano: 'reception',
              description: 'Google Sydney - Reception'
            },
            links: [],
            // The text for the copyright control.
            copyright: 'Imagery (c) 2010 Google',
            // The definition of the tiles for this panorama.
            tiles: {
              tileSize: new google.maps.Size(1024, 512),
              worldSize: new google.maps.Size(1024, 512),
              // The heading in degrees at the origin of the panorama
              // tile set.
              centerHeading: 105,
              getTileUrl: getCustomPanoramaTileUrl
            }
          };
        }
      }
    </script>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initPano">
    </script>
  </body>
</html>

Custom Street View panoramas文档页面提供了哪些内容。

答案 1 :(得分:3)

我设法以某种方式解决了它。

在我的项目中,我使用StreetViewService从Latitude-Longitude对中获取Panorama

sv = new google.maps.StreetViewService();
sv.getPanorama({location: latLng, radius: 50}, updateInfo)

更新信息(信息,状态)的参数中,我发现 sv.getPanorama 的响应:

info.tiles.centerHeading

这是汽车的方向。

现在,如果原始全景是360°视图,我可以使用交叉乘法来获取北方水平位置的像素,并正确绘制所有基点。

这比我想要的更复杂,但至少现在正在运作。