【问题标题】:How to display a MapView and a StreetView simultaneously?如何同时显示 MapView 和 StreetView?
【发布时间】:2011-09-28 16:28:39
【问题描述】:

我想显示一个 MapView,该 MapView 可用于选择 StreetView 在单独区域中显示的点。我知道 API 不允许在一个进程中使用多个 MapView。

如何使 StreetView 显示在与 MapView 不同的区域?

我已经能够毫无问题地抓取静态街景,但我想要动态街景和地图视图。

aTdHvAaNnKcSe(提前致谢)

【问题讨论】:

    标签: android android-mapview google-street-view


    【解决方案1】:

    您可以在您的WebView 中加载360 度全景Google street-view

    尝试以下 Activity,其中 google-street-view 和 google-map 可以在单个 Activity 中同时导航:

    public class StreetViewActivity extends Activity {
    
        private WebView webView;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mappingWidgets();
        }
    
        private void mappingWidgets() {
    
            webView = (WebView) findViewById(R.id.webView);
            webView.getSettings().setJavaScriptEnabled(true);
    
            webView.getSettings().setLoadWithOverviewMode(true);
            webView.getSettings().setUseWideViewPort(true);
            webView.getSettings().setSupportZoom(false);  
    
    
            // If you want to load it from assets (you can customize it if you want)
            //Uri uri = Uri.parse("file:///android_asset/streetviewscript.html");
    
            // If you want to load it directly
            Uri uri = Uri.parse("https://google-developers.appspot.com/maps/documentation/javascript/examples/full/streetview-simple");
            webView.loadUrl(uri.toString());
        }
    }
    

    您可以将其作为静态 HTML 页面放置在应用程序的 assets 文件夹中,然后您可以根据需要使用 Google street-view API 修改它的 java-script。

    我在这里发布示例streetviewscript.html,您可以将其放在应用程序的资产文件夹中并根据您的需要进行自定义:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Google Maps JavaScript API v3 Example: Street View Layer</title>
        <link href="/maps/documentation/javascript/examples/default.css" rel="stylesheet">
        <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=true"></script>
        <script>
    
          function initialize() {
            var fenway = new google.maps.LatLng(42.345573,-71.098326);
            var mapOptions = {
              center: fenway,
              zoom: 14,
              mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(
                document.getElementById('map_canvas'), mapOptions);
            var panoramaOptions = {
              position: fenway,
              pov: {
                heading: 34,
                pitch: 10,
                zoom: 1
              }
            };
            var panorama = new  google.maps.StreetViewPanorama(document.getElementById('pano'),panoramaOptions);
            map.setStreetView(panorama);
          }
        </script>
      </head>
      <body onload="initialize()">
        <div id="map_canvas" style="width: 800px; height: 800px"></div>
        <div id="pano" style="position:absolute; left:810px; top: 8px; width: 800px; height: 800px;"></div>
      </body>
    </html>
    

    编辑:要同时导航两个街景,请从资产加载以下 HTML:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Google Maps JavaScript API v3 Example: Street View Events</title>
    
        <STYLE type="text/css"> 
            body, html { height:100%; padding:0; margin:0;} 
            #pano { float:left }
            #pano1 { float:right }
        </STYLE>
        <link href="/maps/documentation/javascript/examples/default.css" rel="stylesheet">
        <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
        <script>
    
          var cafe = new google.maps.LatLng(37.869085,-122.254775);
    
          var heading_value = 270;
          var pitch_value = 0;
          var zoom_value = 1;
    
          function initialize() {
    
            var panoramaOptions = {
              position: cafe,
              pov: {
                heading: heading_value,
                pitch: pitch_value,
                zoom: zoom_value
              },
              visible: true
            };
    
            var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
            var panorama2 = new google.maps.StreetViewPanorama(document.getElementById('pano1'), panoramaOptions);  
    
            google.maps.event.addListener(panorama, 'pano_changed', function() {
                var panoCell = document.getElementById('pano_cell');
                panoCell.innerHTML = panorama.getPano();
                panorama2.setPano(panorama.getPano());
            });
    
            google.maps.event.addListener(panorama, 'links_changed', function() {
                var linksTable = document.getElementById('links_table');
                while(linksTable.hasChildNodes()) {
                  linksTable.removeChild(linksTable.lastChild);
                };
                var links =  panorama.getLinks();
                panorama2.setLinks(panorama.getLinks());
                for (var i in links) {
                  var row = document.createElement('tr');
                  linksTable.appendChild(row);
                  var labelCell = document.createElement('td');
                  labelCell.innerHTML = '<b>Link: ' + i + '</b>';
                  var valueCell = document.createElement('td');
                  valueCell.innerHTML = links[i].description;
                  linksTable.appendChild(labelCell);
                  linksTable.appendChild(valueCell);
                }
            });
    
            google.maps.event.addListener(panorama, 'position_changed', function() {
                var positionCell = document.getElementById('position_cell');
                positionCell.firstChild.nodeValue = panorama.getPosition();
                panorama2.setPosition(panorama.getPosition());
            });
    
            google.maps.event.addListener(panorama, 'pov_changed', function() {
                var headingCell = document.getElementById('heading_cell');
                var pitchCell = document.getElementById('pitch_cell');
                headingCell.firstChild.nodeValue = panorama.getPov().heading;
                panorama2.setPov(panorama.getPov());
                pitchCell.firstChild.nodeValue = panorama.getPov().pitch;
            });
        }
        </script>
      </head>
      <body onload="initialize()">
    
        <div style="width:100%; height :100%;  background-color:Lime;">
            <div id="pano" style="width:50%; height:100%; background-color:Blue;">
            </div>
            <div id="pano1" style="width:50%; height:100%; background-color:Gray;">
            </div>
        </div>
          <div id="panoInfo" style="width: 425px; height: 240 px;float:left; display: none;">
            <table>
                <tr>
                    <td><b>Position</b></td><td id="position_cell">&nbsp;</td>
                </tr>
                <tr>
    
                        <td><b>POV Heading</b></td><td id="heading_cell">270</td>
                    </tr>
                    <tr>
                        <td><b>POV Pitch</b></td><td id="pitch_cell">0.0</td>
                    </tr>
                    <tr>
                        <td><b>Pano ID</b></td><td id="pano_cell">&nbsp;</td>
                    </tr>
                    <table id="links_table"></table>
                </table>
            </div>
          </body>
        </html>
    

    【讨论】:

      【解决方案2】:

      如何使 StreetView 显示在与 MapView 不同的区域?

      街景仅在设备上作为其自己的活动(来自其自己的应用程序)可用,因此不能与您自己的任何小部件一起显示。

      【讨论】:

      • Google AppMarket 上有一个应用程序可以并排显示地图和街景。据我所知,它们不是静态图像。该应用程序被称为“GOGA”的“Walk Street”......
      • @kurtrisser:他们肯定没有使用街景应用。也许他们已经安装了WebView 并正在推出基于网络的街景。
      【解决方案3】:

      在 Android 上查看示例街景全景图和地图,地址为https://developers.google.com/maps/documentation/android/code-samples。但我不确定它是否也适用于自定义街景。

      【讨论】:

        猜你喜欢
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多