最接近坐标的街景照片
Nearest Street View Photo to Coordinates
我正在使用 Google Maps V3 API 开发 proof-of-concept 应用程序。我有一个数据库,其中包含 (lat
,lng
) 格式的所有城市及其中心点的列表。当我从数据库中打开一个随机城市时,地图以中心点为中心并切换到街景视图。
问题是:在这种情况下,有时用户提交的照片没有"walk"功能。以下是此类照片的示例,它也是街景图层的一部分:
有没有办法避免这些用户照片?从 Google 具有 "walk" 功能的司机拍摄的真实照片来看,它们与 Google 地图 API 的观点不同吗?我需要一种使用 Google 汽车的 "proper" 街景照片跳到下一个最近点的方法。
再问:有没有way/algorithm找距离给定坐标最近的街景点?
这是当前的代码片段:
var point = new google.maps.LatLng(data[0].lat, data[0].lng);
var webService = new google.maps.StreetViewService();
var checkaround = 5000;
webService.getPanoramaByLocation(point,checkaround ,function(panoData) {
if(panoData){
if(panoData.location){
if(panoData.location.latLng){
window.map.setCenter(panoData.location.latLng);
window.map.setZoom(14);
var panoramaOptions = {
position: panoData.location.latLng,
pov: {
heading: 34,
pitch: 10
}
};
var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
map.setStreetView(panorama);
}
}
}
});
我无法在 jsfiddle 上发布它,因为有一个带数据库的 php 后端,但是有上面的代码和一个测试点 (lat
,lng
) = ( 54.226978, 49.568459) 你可以重现这个问题,你会看到照片而不是街景。然而,这个城市和这个点都被街景覆盖了。
你可以尝试使用Roads APIsnapToRoads
方法
此方法采用沿路线收集的 GPS 点,returns 将这些点捕捉到车辆最有可能行驶的道路
问题可能是您的来电 getPanoramaByLocation()
。如果您省略它可能会起作用,只需执行以下操作:
var point = new google.maps.LatLng(54.226978, 49.568459);
window.map.setCenter(point);
window.map.setZoom(14);
var panoramaOptions = {
position: point,
pov: {
heading: 34,
pitch: 10
}
};
var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
map.setStreetView(panorama);
或者,如果您想 getPanoramaByLocation()
,您应该在回调中调用 setPano()
,如下所示:
var point = new google.maps.LatLng(data[0].lat, data[0].lng);
var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'));
var webService = new google.maps.StreetViewService();
var checkaround = 5000;
webService.getPanoramaByLocation(point,checkaround ,function(panoData) {
if(panoData){
if(panoData.location){
if(panoData.location.latLng){
window.map.setCenter(panoData.location.latLng);
window.map.setZoom(14);
panorama.setPano(panoDdata.location.pano);
panorama.setPov({
heading: 34,
pitch: 10
});
panorama.setVisible(true);
map.setStreetView(panorama);
}
}
}
});
我正在使用 Google Maps V3 API 开发 proof-of-concept 应用程序。我有一个数据库,其中包含 (lat
,lng
) 格式的所有城市及其中心点的列表。当我从数据库中打开一个随机城市时,地图以中心点为中心并切换到街景视图。
问题是:在这种情况下,有时用户提交的照片没有"walk"功能。以下是此类照片的示例,它也是街景图层的一部分:
有没有办法避免这些用户照片?从 Google 具有 "walk" 功能的司机拍摄的真实照片来看,它们与 Google 地图 API 的观点不同吗?我需要一种使用 Google 汽车的 "proper" 街景照片跳到下一个最近点的方法。
再问:有没有way/algorithm找距离给定坐标最近的街景点?
这是当前的代码片段:
var point = new google.maps.LatLng(data[0].lat, data[0].lng);
var webService = new google.maps.StreetViewService();
var checkaround = 5000;
webService.getPanoramaByLocation(point,checkaround ,function(panoData) {
if(panoData){
if(panoData.location){
if(panoData.location.latLng){
window.map.setCenter(panoData.location.latLng);
window.map.setZoom(14);
var panoramaOptions = {
position: panoData.location.latLng,
pov: {
heading: 34,
pitch: 10
}
};
var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
map.setStreetView(panorama);
}
}
}
});
我无法在 jsfiddle 上发布它,因为有一个带数据库的 php 后端,但是有上面的代码和一个测试点 (lat
,lng
) = ( 54.226978, 49.568459) 你可以重现这个问题,你会看到照片而不是街景。然而,这个城市和这个点都被街景覆盖了。
你可以尝试使用Roads APIsnapToRoads
方法
此方法采用沿路线收集的 GPS 点,returns 将这些点捕捉到车辆最有可能行驶的道路
问题可能是您的来电 getPanoramaByLocation()
。如果您省略它可能会起作用,只需执行以下操作:
var point = new google.maps.LatLng(54.226978, 49.568459);
window.map.setCenter(point);
window.map.setZoom(14);
var panoramaOptions = {
position: point,
pov: {
heading: 34,
pitch: 10
}
};
var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
map.setStreetView(panorama);
或者,如果您想 getPanoramaByLocation()
,您应该在回调中调用 setPano()
,如下所示:
var point = new google.maps.LatLng(data[0].lat, data[0].lng);
var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'));
var webService = new google.maps.StreetViewService();
var checkaround = 5000;
webService.getPanoramaByLocation(point,checkaround ,function(panoData) {
if(panoData){
if(panoData.location){
if(panoData.location.latLng){
window.map.setCenter(panoData.location.latLng);
window.map.setZoom(14);
panorama.setPano(panoDdata.location.pano);
panorama.setPov({
heading: 34,
pitch: 10
});
panorama.setVisible(true);
map.setStreetView(panorama);
}
}
}
});