- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 Rails 开发网络应用程序。当我打开一个标记时,会弹出一个模态框,其中包含一个街景 View 。我可以打开一个或两个标记,但之后我收到一个错误,指出 WebGL 遇到了障碍。我试图在网上寻找资源,但没有任何意义。有关更多信息,请参见下面的图片。任何帮助将不胜感激。
这是我的控制台日志的图像:
这是我的 web 应用程序中的 JavaScript 代码。
<script type="text/javascript">
var handler = Gmaps.build('Google', {
markers: {
clusterer: {
gridSize: 60,
maxZoom: 20,
styles: [
{
textSize: 10,
textColor: '#ff0000',
url: 'assets/creative/m1.png',
height: 60,
width: 60,
},
{
textSize: 14,
textColor: '#ffff00',
url: 'assets/creative/m2.png',
height: 60,
width: 60,
},
{
textSize: 18,
textColor: '#0000ff',
url: 'assets/creative/m3.png',
width: 60,
height: 60,
},
],
},
},
});
var handler2 = Gmaps.build('Google');
var current;
function initialize() {
handler.buildMap({ internal: {id: 'map'} }, function () {
markers_json = <%= raw @hash.to_json %>;
markers = _.map(markers_json, function (marker_json) {
marker = handler.addMarker(marker_json);
handler.fitMapToBounds();
_.extend(marker, marker_json);
return marker;
});
getLocation();
markers.map(function (elem, index) {
google.maps.event.addListener(elem.getServiceObject(), 'click', function (evt) {
var id = elem.id,
number = elem.number,
name = elem.name,
zipcode = elem.zipcode,
tabid = elem.tabid,
latitude = elem.latitude,
longitude = elem.longitude;
$('.name').html('<h3 class=\'panel-title\'><i class=\'fa fa-id-card\'></i>' + number + '</h3>');
$('.paneltb').html('<thead><tr><th>Panel</th><th>Location</th><th>Tab ID</th><th>Zip Code</th><th>Latitude</th><th>Longitude</th></tr></thead><tbody><tr><td>' + number + '</td><td>' + name + '</td><td>' + tabid + '</td><td>' + zipcode + '</td><td>' + latitude + '</td><td>' + longitude + '</td></tr></tbody>');
pos = new google.maps.LatLng(latitude, longitude);
var div = document.getElementById('map2');
var sv = new google.maps.StreetViewPanorama(div);
sv.setPosition(pos);
sv.setVisible(true);
// find the heading by looking from the google car pos to the venue pos
var service = new google.maps.StreetViewService();
service.getPanoramaByLocation(pos, 50, function (result, status) {
if (status == google.maps.StreetViewStatus.OK)
{
carPos = result.location.latLng;
heading = google.maps.geometry.spherical.computeHeading(carPos, pos);
sv.setPov({ heading: heading, pitch: 0, zoom: 1 });
}
});
$('#myModal').modal('show');
current = elem;
});
});
});
// Create the search box and link it to the UI element.
}
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(displayOnMap);
} else {
navigator.geolocation.getCurrentPosition(displayOnMapError);
}
}
function displayOnMap(position) {
marker2 = handler.addMarker({
lat: position.coords.latitude,
lng: position.coords.longitude,
picture: {
url: "<%= asset_path 'creative/1499326997_Untitled-2-01.png' %>",
width: 48,
height: 48,
},
infowindow: 'You are Here!',
});
handler.map.centerOn(marker2);
handler.getMap().setZoom(10);
}
function displayOnMapError(position) {
marker2 = handler.addMarker({
lat: 34.0522,
lng: -118.2437,
picture: {
url: "<%= asset_path 'creative/1499326997_Untitled-2-01.png' %>",
width: 48,
height: 48,
},
});
handler.map.centerOn(marker2);
handler.getMap().setZoom(10);
}
initialize();
</script>
这是让模式弹出我需要的信息的原始代码。
$(".name").html("<h3 class='panel-title'><i class='fa fa-id-card'></i>"+number+"</h3>");
$(".paneltb").html("<thead><tr><th>Panel</th><th>Location</th><th>Tab ID</th><th>Zip Code</th><th>Latitude</th><th>Longitude</th></tr></thead><tbody><tr><td>"+number+"</td><td>"+ name + "</td><td>"+tabid+"</td><td>"+zipcode+"</td><td>"+latitude+"</td><td>"+longitude+"</td></tr></tbody>");
$('#myModal').modal('show');
current = elem;
为了在模式中添加街景 View ,添加了以下代码:
pos = new google.maps.LatLng( latitude, longitude );
var div = document.getElementById('map2');
var sv = new google.maps.StreetViewPanorama(div);
sv.setPosition(pos);
sv.setVisible(true);
// find the heading by looking from the google car pos to the venue pos
var service = new google.maps.StreetViewService();
service.getPanoramaByLocation(pos, 50, function (result, status) {
if (status == google.maps.StreetViewStatus.OK) {
carPos = result.location.latLng;
heading = google.maps.geometry.spherical.computeHeading(carPos, pos);
sv.setPov({ heading: heading, pitch: 0, zoom: 1 });
}
});
为了将当前的纬度和经度传递到街景 View 中,我必须将它放在调用模态的同一函数中。
更新
我不知道如何设置 var sv = new google.maps.StreetViewPanorama(div);
所以它被设置一次并且相同的 map 被调用而不是模态的每个实例重用尝试启动和重新启动一个新实例。
更新 2
我不知道如何初始化这部分:
var sv = new google.maps.StreetViewPanorama(div);
因此,当我打开模态时,它不会渲染新 map ,它只是重复使用同一张 map 。我倾向于编写另一个函数,但我需要一些指导。
更新 3
我注意到的另一件事是,当我单击一个标记时,它会在模态中显示填充其正方形的街景。当我点击另一个时,有时它根本不会显示,但在大多数情况下,它会显示但在 Angular 落里非常小,如下图所示:
我还注意到来自 Google map 的类 widget-scene-canvas
的代码不断改变自己,当我点击超过不同时间的第一张 map 。
最佳答案
我发现我遇到的问题不止一个,确切地说我有三个。感谢https://stackoverflow.com/a/19048363/7039895我能够弄清楚,每次打开模态时,我都需要在模态内调整 map 的大小。打开模式后放置的脚本是:
$("#myModal").on("shown.bs.modal", function () {
google.maps.event.trigger(sv, "resize");
});
第二个问题发生时,我注意到当我打开模式时,某些位置会呈现谷歌街道 map ,而其他位置会呈现谷歌街道 map ,但它是纯黑色的,如下图所示:
我发现我需要将渲染的街道 map 的缩放比例更改为 0,因为它与汽车的 pov 的缩放比例为 1,并且我 map 中的一些纬度和经度无法缩放,而其他的可以,这一切都取决于谷歌汽车在哪里拍摄照片。这是代码通知,其中显示 zoom
我将其从 1
缩放更改为 0
:
var service = new google.maps.StreetViewService();
service.getPanoramaByLocation( pos, 50, function(result, status) {
if (status == google.maps.StreetViewStatus.OK)
{
carPos = result.location.latLng;
heading = google.maps.geometry.spherical.computeHeading( carPos, pos );
sv.setPov( { heading: heading, pitch: 0, zoom: 0 } );
}
})
我需要修复的最后一件事是 webGL 遇到了一个不断弹出的障碍错误。在对我进行进一步调查后,我注意到我是在网络应用程序中还是只是在浏览谷歌地图,它无论如何都会弹出。总的来说好像是chrome的错误所以特地看了这篇文章https://www.xtremerain.com/fix-rats-webgl-hit-snag-chrome/我按照第一个示例并从高级设置中禁用(见下文)。
Use hardware acceleration when available
之后我回去测试 map ,每个位置打开时都显示谷歌街道 map ,webgl hit a snag 错误不再出现。
这是我的网络应用程序 map 部分的最终代码:
var handler = Gmaps.build('Google', {
markers:
{clusterer: {
gridSize: 60,
maxZoom: 20,
styles: [ {
textSize: 10,
textColor: '#ff0000',
url: 'assets/creative/m1.png',
height: 60,
width: 60 }
, {
textSize: 14,
textColor: '#ffff00',
url:'assets/creative/m2.png',
height: 60,
width: 60 }
, {
textSize: 18,
textColor: '#0000ff',
url: 'assets/creative/m3.png',
width: 60,
height: 60}
]}}
});
var current;
function initialize(){
handler.buildMap({ internal: {id: 'map'} }, function() {
markers_json = <%=raw @hash.to_json %>;
markers = _.map(markers_json, function(marker_json){
marker = handler.addMarker(marker_json);
handler.fitMapToBounds();
_.extend(marker, marker_json);
return marker;
});
getLocation();
markers.map(function(elem, index) {
google.maps.event.addListener(elem.getServiceObject(), "click", function(evt) {
var id = elem.id,
number = elem.number,
name = elem.name,
zipcode = elem.zipcode,
tabid = elem.tabid,
latitude = elem.latitude,
longitude = elem.longitude
$(".name").html("<h3 class='panel-title'><i class='fa fa-id-card'></i>"+number+"</h3>")
$(".paneltb").html("<thead><tr><th>Panel</th><th>Location</th><th>Tab ID</th><th>Zip Code</th><th>Latitude</th><th>Longitude</th></tr></thead><tbody><tr><td>"+number+"</td><td>"+ name + "</td><td>"+tabid+"</td><td>"+zipcode+"</td><td>"+latitude+"</td><td>"+longitude+"</td></tr></tbody>")
pos = new google.maps.LatLng( latitude, longitude );
var div = document.getElementById('map2');
var sv = new google.maps.StreetViewPanorama(div);
sv.setPosition( pos );
sv.setVisible( true );
// find the heading by looking from the google car pos to the venue pos
var service = new google.maps.StreetViewService();
service.getPanoramaByLocation( pos, 50, function(result, status) {
if (status == google.maps.StreetViewStatus.OK)
{
carPos = result.location.latLng;
heading = google.maps.geometry.spherical.computeHeading( carPos, pos );
sv.setPov( { heading: heading, pitch: 0, zoom: 0 } );
}
})
$('#myModal').modal('show')
current = elem;
$("#myModal").on("shown.bs.modal", function () {
google.maps.event.trigger(sv, "resize");
});
});
})
});
// Create the search box and link it to the UI element.
}
function getLocation(){
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(displayOnMap);
}
else{
navigator.geolocation.getCurrentPosition(displayOnMapError);
}
};
function displayOnMap(position){
marker2 = handler.addMarker({
lat: position.coords.latitude,
lng: position.coords.longitude,
picture: {
url: "<%= asset_path 'creative/1499326997_Untitled-2-01.png' %>",
width: 48,
height: 48
},
infowindow: "You are Here!"
});
handler.map.centerOn(marker2);
handler.getMap().setZoom(10);
};
function displayOnMapError(position){
marker2 = handler.addMarker({
lat: 34.0522,
lng: -118.2437,
picture: {
url: "<%= asset_path 'creative/1499326997_Untitled-2-01.png' %>",
width: 48,
height: 48
}
});
handler.map.centerOn(marker2);
handler.getMap().setZoom(10);
};
initialize();
关于javascript - 在模式中重复使用谷歌地图街景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45654166/
我有一个页面,其中应包含一个带有谷歌地图的 div 和一个带有街景的 div。 map 工作正常,但街景根本不显示,它只是一个空的 div。但我无法让 JS 抛出错误。 这是我的代码,它可能是我缺少的
我正在使用 Bing Maps 7.0 Ajax Control API,想知道如何显示街景。好像没有办法,但也不能这样。有办法吗? 谢谢,克里斯 最佳答案 Microsoft Street*side
我正在使用 React 将街景加载到我得到的组件中: 正如我们所看到的 - map 组件加载得很好,街景组件似乎也加载得很好,只是它后面的图像(实际的街景)没有加载。 报告的错误是: ** Uncau
当您创建没有任何位置的街景 View 时,您会看到一个带有控件的灰色框。 var panorama = new google.maps.StreetViewPanorama(element.find
我有一个谷歌地图街景,效果很好: 我使用 google maps API 来定位和渲染 map (coffeescript) # initialize google street view in
这个问题已经有答案了: Google street view URL (5 个回答) 已关闭 9 年前。 我想创建一个链接,将我带到“Google 街景”地址。我找到了这个: How to conve
我过去常常从我的应用程序向 map 发送一个 Intent,以显示街景全景图。因为有些日子当我启动 Intent map 时说:“街景 View 在这里不可用”。我尝试运行一个新项目,其 Intent
我们可以在 MKMapKit 中使用街景吗?它与 iPhone 谷歌地图应用程序一起使用。如果现在我们可以集成到我们的应用程序中吗? 最佳答案 我已经成功使用 javascript Google Ma
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
map 中没有可拖到街道上的小人图标。 有没有办法以编程方式启用他? 谢谢。 最佳答案 MKMapView 不支持“小人”(街景小人)或街景。 一种替代方法是直接使用 Google Maps Java
有没有办法在 Xcode 中的 Google map 街景 (GMSPanoramaView) 中进行自定义标记?我可以找到在常规 map View 中执行自定义标记的教程,但找不到在街景 View
我正在尝试将 Google map V3 API 集成到我们的网站中。我需要读取地址并将其设置为 MAP API,以便 map 显示该地址的街景。 所以我需要 3 点帮助。 如何读取地址值。 示例:v
Google map API 提供了一些回调用户编写的方法但具有特定参数的方法,例如 getPanoramaByLocation() 。我的问题是我无法可靠地将我的请求与响应关联起来。基本调用如下所示
我正在模态上输出街景 map 。目前,在调整窗口大小之前,它只会显示黑色。我尝试在按钮点击时使用 google.maps.event.trigger(map, "resize"); 方法,但似乎无法使
我想使用自定义全景位置,但我需要一个全景 ID。有人可以解释一下如何从下一个链接获取全景图 id: https://www.google.nl/maps/@52.239981,6.851849,3a,
最近,谷歌地图可以通过“TimeMachine”回到过去的街景。 我在 API 中找不到方法。 他们的 TimeMachine 参数是否用于更改时间? 如果我们没有 API 来获取“TimeMachi
我正在 Google Maps v3.exp 上绘制一些标记和折线。 当我切换到 StreetView 时,标记在那里,多段线不存在。搜索了 Google、SO 和所有其他已知资源,令人惊讶的是,关于
我想知道是否有任何方法可以更改 StreetviewPanorama 对象的视野? 这没有任何记录,但 Google map 网站似乎没有与通过 API 创建的对象相同的 FOV。 几个例子: 巴黎(
我按照下面的方式使用过街景 /* Map html */ /* Css associated */ .bigmap{ width:100%;
我的应用程序有一些代码可以直接打开 Google map 。我们正在尝试使用如下 URL 直接打开特定坐标的街景 View : comgooglemaps-x-callback://?center=4
我是一名优秀的程序员,十分优秀!