Google maps api 3 实现谷歌地图v3街景

Google maps api 3 实现谷歌地图v3街景,google-maps-api-3,google-street-view,Google Maps Api 3,Google Street View,我正在尝试找出如何将以下三张地图之一转换为街景 路线图 混血儿 卫星 下面是我用来生成三种不同谷歌地图的代码: var map; var map2; var map3; $(document).ready(function(){ google.maps.event.addDomListener(window, 'load', initialize); function initialize() { var myLatLng = new google.maps.LatLng(&l

我正在尝试找出如何将以下三张地图之一转换为街景

  • 路线图
  • 混血儿
  • 卫星
下面是我用来生成三种不同谷歌地图的代码:

var map;
var map2;
var map3;

$(document).ready(function(){

google.maps.event.addDomListener(window, 'load', initialize);

function initialize() {
    var myLatLng = new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>);

var myOptions = {
    zoom: 15,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    }
map = new google.maps.Map(document.getElementById("map-canvas-1"),myOptions); 

var myOptions2 = {
    zoom: 15,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.HYBRID
    }
map2 = new google.maps.Map(document.getElementById("map-canvas-2"),myOptions2);  

var myOptions3 = {
    zoom: 15,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.SATELLITE
    }
map3 = new google.maps.Map(document.getElementById("map-canvas-3"),myOptions3);  

var marker = new google.maps.Marker({
  position: myLatLng, 
  map: map, 
  title:"Map1" }); 

  var marker = new google.maps.Marker({
  position: myLatLng, 
  map: map2, 
  title:"Map2" }); 

  var marker = new google.maps.Marker({
  position: myLatLng, 
  map: map3, 
  title:"Map3" }); 
}
var映射;
var-map2;
var-map3;
$(文档).ready(函数(){
google.maps.event.addDomListener(窗口“加载”,初始化);
函数初始化(){
var mylatng=newgoogle.maps.LatLng(,);
变量myOptions={
缩放:15,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById(“map-canvas-1”),myOptions);
变量myOptions2={
缩放:15,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.HYBRID
}
map2=新的google.maps.Map(document.getElementById(“Map-canvas-2”),myOptions2);
变量myOptions3={
缩放:15,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.SATELLITE
}
map3=新的google.maps.Map(document.getElementById(“Map-canvas-3”),myoption3);
var marker=new google.maps.marker({
职位:myLatLng,
地图:地图,
标题:“Map1”});
var marker=new google.maps.marker({
职位:myLatLng,
地图:map2,,
标题:“Map2”});
var marker=new google.maps.marker({
职位:myLatLng,
地图:map3,,
标题:“Map3”});
}
以下是地图部门的代码:

<div id="maptabs">
    <ul>
        <li><a href="#maptabs-1">Road Map</a></li>
        <li><a href="#maptabs-2">Hybrid</a></li>
        <li><a href="#maptabs-3">Satellite</a></li>
    </ul>
    <div id="maptabs-1">            
        <div id="map-canvas-1" class="map"></div>
    </div>
    <div id="maptabs-2">    
        <div id="map-canvas-2" class="map"></div>
    </div>
    <div id="maptabs-3">    
        <div id="map-canvas-3" class="map"></div>
    </div>
</div> 


如何更改卫星地图的地图选项以将其转换为街景?谢谢。

您不能通过更改地图选项来完成,因为街景不是地图类型。最简单的方法可能是以编程方式指示地图显示街景全景,如下所示:

map3.getStreetView().setPosition(myLatLng);
map3.getStreetView().setVisible(true);

您不能通过更改地图选项来执行此操作,因为街景不是地图类型。最简单的方法可能是通过编程指示地图显示其街景全景,如下所示:

map3.getStreetView().setPosition(myLatLng);
map3.getStreetView().setVisible(true);

这并不像Trott的答案那么简单,因为POV是错误的。我只是花了几个小时在这个问题上,这是我的答案,给那些最终回答这个问题的人(因为这是我发现的问题之一,但答案没有用)

默认情况下,街景POV是拍摄图像时卡车所面对的方向(见图)。您需要获取卡车的位置和房屋的位置,并计算“航向”从第一个位置到第二个位置,然后将您的街景位置设置为您刚才计算的卡车的车头位置

// adrloc=target address
// svwloc=street-view truck location
svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
    if(sts==google.maps.StreetViewStatus.OK) {
        var svwloc=dta.location.latLng;
        var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
        var svwmap=avwMap.getStreetView();
        svwmap.setPosition(svwloc);
        svwmap.setPov({ heading: svwhdg, pitch: 0 });
        svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
        svwmap.setVisible(true);
        }
    else {
        ...
        }
使用street view的另一个技巧/陷阱是,您需要通过不断增加的距离反复调用
getPanoramaByLocation
来获取距离您的地址位置最近的街道视图,直到您成功或达到某个最大距离。我使用以下代码解决此问题:

var SVW_MAX=100; // maximum street-view distance in meters
var SVW_INC=10;  // increment street-view distance in meters
var svwService=new google.maps.StreetViewService(); // street view service
var svwMarker=null; // street view marker

// NOTE: avwMap is the aerial view map, code not shown
...
resolveStreetView(avwMap.getCenter(),SVW_INC); 
...

var resolveStreetView=function(adrloc,svwdst) {
    svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
        if(sts==google.maps.StreetViewStatus.OK) {
            var svwloc=dta.location.latLng;
            var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
            var svwmap=avwMap.getStreetView();
            svwmap.setPosition(svwloc);
            svwmap.setPov({ heading: svwhdg, pitch: 0 });
            svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
            svwmap.setVisible(true);
            }
        else if(svwdst<SVW_MAX) {
            resolveStreetView(adrloc,svwdst+SVW_INC);
            }
        });
    }
var SVW_MAX=100;//以米为单位的最大街景距离
var SVW_INC=10;//以米为单位增加街景距离
var svwService=new google.maps.StreetViewService();//街景服务
var svwMarker=null;//街景标记
//注:avwMap为鸟瞰图,代码未显示
...
resolveStreetView(avwMap.getCenter(),SVW_公司);
...
var ResolvetStreetView=函数(adrloc、svwdst){
getPanoramaByLocation(adrloc、svwdst、function(dta、sts){
如果(sts==google.maps.StreetViewStatus.OK){
var svwloc=dta.location.latLng;
var svwhdg=google.maps.geometry.spheremic.computeHeading(svwloc,adrloc);
var svwmap=avwMap.getStreetView();
svwmap.setPosition(svwloc);
svwmap.setPov({标题:svwhdg,音高:0});
svwMarker=new google.maps.Marker({map:svwmap,position:adrloc});
svwmap.setVisible(true);
}

else if(svwdst这并不像Trott的答案那么简单,因为POV是错误的。我只是花了几个小时在这个问题上,下面是我的答案,供那些最终回答这个问题的人参考(因为这是我发现的问题之一,但答案没有用)

默认情况下,街景POV是拍摄图像时卡车所面对的方向(见图)。您需要获取卡车的位置和房屋的位置,并计算“航向”从第一个位置到第二个位置,然后将您的街景位置设置为您刚才计算的卡车的车头位置

// adrloc=target address
// svwloc=street-view truck location
svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
    if(sts==google.maps.StreetViewStatus.OK) {
        var svwloc=dta.location.latLng;
        var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
        var svwmap=avwMap.getStreetView();
        svwmap.setPosition(svwloc);
        svwmap.setPov({ heading: svwhdg, pitch: 0 });
        svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
        svwmap.setVisible(true);
        }
    else {
        ...
        }
使用street view的另一个技巧/陷阱是,您需要通过不断增加的距离反复调用
getPanoramaByLocation
来获取距离您的地址位置最近的街道视图,直到您成功或达到某个最大距离。我使用以下代码解决此问题:

var SVW_MAX=100; // maximum street-view distance in meters
var SVW_INC=10;  // increment street-view distance in meters
var svwService=new google.maps.StreetViewService(); // street view service
var svwMarker=null; // street view marker

// NOTE: avwMap is the aerial view map, code not shown
...
resolveStreetView(avwMap.getCenter(),SVW_INC); 
...

var resolveStreetView=function(adrloc,svwdst) {
    svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
        if(sts==google.maps.StreetViewStatus.OK) {
            var svwloc=dta.location.latLng;
            var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
            var svwmap=avwMap.getStreetView();
            svwmap.setPosition(svwloc);
            svwmap.setPov({ heading: svwhdg, pitch: 0 });
            svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
            svwmap.setVisible(true);
            }
        else if(svwdst<SVW_MAX) {
            resolveStreetView(adrloc,svwdst+SVW_INC);
            }
        });
    }
var SVW_MAX=100;//以米为单位的最大街景距离
var SVW_INC=10;//以米为单位增加街景距离
var svwService=new google.maps.StreetViewService();//街景服务
var svwMarker=null;//街景标记
//注:avwMap为鸟瞰图,代码未显示
...
resolveStreetView(avwMap.getCenter(),SVW_公司);
...
var ResolvetStreetView=函数(adrloc、svwdst){
getPanoramaByLocation(adrloc、svwdst、function(dta、sts){
如果(sts==google.maps.StreetViewStatus.OK){
var svwloc=dta.location.latLng;
var svwhdg=google.maps.geometry.spheremic.computeHeading(svwloc,adrloc);
var svwmap=avwMap.getStreetView();
svwmap.setPosition(svwloc);
svwmap.setPov({标题:svwhdg,音高:0});
svwMarker=new google.maps.Marker({map:svwmap,position:adrloc});
svwmap.setVisible(true);
}

如果(SVWDSTA)就这么简单,嗯?非常感谢。我感谢你的帮助。这非常有效。就这么简单,嗯?非常感谢。我感谢你的帮助。这非常有效。