我正在学习谷歌地图API v3。我能够把这段代码放在一起。我试着让它变得尽可能简单。它有效......
我遇到的问题是街景地图没有指向正确的方向/地址。右边的建筑物是拐角处的黄色建筑物(您需要向左滚动街道视图几次)。
当我在google maps中使用相同的线时,它指向正确的建筑物/地址。我的地图的StreetView指向对面/建筑物。
我的代码使用存储在mysql数据库中的LatLon,但是对于这个例子,我使用单点来表达我的观点:
Google Map的代码:street_view.js
//<![CDATA[
// ************************ Variables ************************
var infoWindow = new google.maps.InfoWindow();
//Map Options
var options = {
lat: 34.028339,
lon: -118.2881768,
zoom: 15,
type: 'roadmap',
tytle: "Address: 1256 W. 29th St. Los Angeles, CA 90007",
html: '<div class="tooltip"><span>Address</span>: 1256 W. 29th St. Los Angeles, CA 90007<\/div>',
icons: {
red: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
blue: 'http://maps.google.com/mapfiles/ms/micons/blue-dot.png',
shadow: 'http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png'
}
};
// ************************ Functions ************************
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
//marker.openInfoWindowHtml(html);
infoWindow.getContent();marker.openInfoWindowTabsHtml(infoTabs);
});
}
function googleMaps()
{
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng( options.lat , options.lon ),
zoom: options.zoom,
mapTypeId: options.type
});
var marker = new google.maps.Marker({
map: map,
position: map.getCenter(),
title: options.title,
icon: options.icons.blue,
shadow: options.icons.shadow
});
bindInfoWindow(marker, map, infoWindow, options.html);
map.StreetView = new google.maps.StreetViewPanorama(document.getElementById("map_StreetView"), {
position: map.getCenter(),
zoom: 1
});
//map.setStreetView(map.StreetView); //This line adds a street view icon to the roadmap and binds it together with streetView
} //end of load()
// ************************ Load ************************
//Call googleMaps after document is loaded
google.maps.event.addDomListener(window, 'load', function(){
googleMaps();
//you can add more code here
});
//]]>
HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $map['address']?></title>
<!-- START: Google Maps API -->
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://www.mydomain.com/_api/google/maps/v3/street_view.js"></script>
<!-- __END: Google Maps API -->
</head>
<body>
<div id="map-container" >
<div id="map_StreetView" style="width: 350px; height: 250px"></div><br/>
<div id="map" style="width: 350px; height: 250px"></div>
</div>
</body>
</html>
PS。我试图给你一个jsFiddle,但无论出于什么原因它没有显示地图......? http://jsfiddle.net/EdsB6/
答案 0 :(得分:2)
首先,在初始化StreetViewPanorama时,使用pov
option设置相机位置。
map.StreetView = new google.maps.StreetViewPanorama
(document.getElementById("map_StreetView"), {
position: map.getCenter(),
pov: { heading: 135, pitch: 0, zoom: 1 }
});
更新的JS小提琴:http://jsfiddle.net/EdsB6/2/
有关详细信息,请阅读StreetView上的文档
https://developers.google.com/maps/documentation/javascript/streetview
关于第二个问题,地理编码就是您所需要的。 (不幸的是,没有,没有“简单”,使用API的地址的单行方法)。如果您反复查询同一个地方,最好一次执行并保存LatLng。在这里阅读:
https://developers.google.com/maps/documentation/javascript/geocoding
这个答案显示了如何将地址转换为LatLng,实际上它是一个数组,但每个地址都是逐个转换的。
https://stackoverflow.com/a/10743457/1325290
function codeAddress(address, callback) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
callback(results[0].geometry.location);
}
});
}
function initialize() {
codeAddress("Chicago, IL", function(default_location) {
var map = new google.maps.Map(document.getElementById("map_canvas"),
{ center: default_location,
zoom: 3, mapTypeId: google.maps.MapTypeId.ROADMAP });
locations = ["Los Angeles", "Davis", "Truth or Consequences",
"Ann Arbor", "Massachusetts"];
for (var i = 0; i < locations.length; i++) {
codeAddress(locations[i], function(latLng) {
new google.maps.Marker({map:map, position:latLng});
});
}
});
}