- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个非常奇怪的问题。
答:我的 map 的一种方法效果很好。用户设置起点和终点,然后创建 map ,并且 fitBounds.extend(bounds) 适当设置缩放级别以包含 map 上的开始/结束标记。
B:第二种方法是,如果用户设置起点但不设置终点,但根据其他用户兴趣,我会检索它们的终点和终点,并使用与方法 A 相同的功能将其绘制在 map 上。但是,在 fitBounds.extend(bounds) 上,它将缩放级别设置为 4(国家/地区级别)。然后我必须强制设置缩放。
用户何时执行方法 A(在方法 B 之前或之后)并不重要...当使用方法 A 时,缩放级别是正确的。当其方法 B 时,其始终缩放至 4 级。
...但都使用相同的功能。
这两种方法都能准确地将标记放置在 map 上,并准确绘制标记之间的路线。仅在方法 A 上,自动缩放是正确的,而在方法 B 上,缩放始终设置为 4。
如果用户执行 A,它是对的...然后 B 发生,它会缩小...再次执行 B,它会保持缩小...再次执行 A,它会返回到正确的缩放状态。
快把我逼疯了!
我的 map 对象是“setMap”,它是一个全局变量
function setMapBounds(start,end) {
mapBounds = new google.maps.LatLngBounds();
mapBounds.extend(start.position);
mapBounds.extend(end.position) ;
setMap.fitBounds(mapBounds) ;
}
function addMarkers(newMarkers) { // an array of map points.
var tempMarkers = [] ;
for (var x=0;x<newMarkers.length;x++) {
var tempLatlon = new google.maps.LatLng(newMarkers[x].lat,newMarkers[x].lon) ;
var tempMarker = createMarker(tempLatlon,newMarkers[x].img,newMarkers[x].title) ;
tempMarkers.push(tempMarker) ;
}
return tempMarkers ;
}
function createMarker(latlon,img,title) {
var marker = new google.maps.Marker({
map:setMap,
position:latlon,
icon: img,
title:title
}) ;
return marker ;
}
//这是方法 A - 它总是正确设置缩放
function setDropoff(dropoffLoc) { //called from: index.js/setPickup(), tab-map.html
geoCoder.geocode({'address': dropoffLoc}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
endLocation = dropoffLoc ;
endLat = results[0].geometry.location.lat() ;
endLon = results[0].geometry.location.lng() ;
// first clear any existing END Markers only.
while(markersArray.length) {
markersArray.pop().setMap(null);
}
endPointSet = 1 ;
endLatlon = new google.maps.LatLng(endLat,endLon) ;
var endMarker = createMarker(endLatlon,'img/red-pin.png','Drop off') ;
markersArray.push(endMarker) ;
setMapBounds(userMarker,endMarker) ;
if (startPointSet == 1) {
drawRoute("DRIVING",startLocation,endLocation) ;
}
}
} else {
error = "Address not found."
}
});
}
//这是方法B,它总是将缩小到4。它是从另一个函数中拉出的,该函数测试用户是否手动设置和结束点...如果是,则在用户设置之间添加wayPoints起点/终点。如果没有,则将 map 设置为用户起点到单个兴趣终点
if (endPointSet == 1) { // draw Pickup to START to wayPoints to END
var markers = [
{lat:interests[0].shub_lat,lon:interests[0].shub_lon,img:interests[0].img,title:"Pickup"},
{lat:interests[1].ehub_lat,lon:interests[1].ehub_lon,img:interests[1].img,title:"Dropoff"}
] ;
var points = [interests.shub_address,interests.ehub_address] ;
extraMarkers = addMarkers(markers) ;
drawRoute("BICYCLING",startLocation,endLocation,points) ;
} else {
var markers = [
{lat:interests[0].shub_lat,lon:interests[0].shub_lon,img:interests[0].img,title:"Dropoff"}
] ;
extraMarkers = addMarkers(markers) ;
setMapBounds(userMarker,extraMarkers[0]) ;
drawRoute("WALKING",startLocation,interests[0].shub_address) ;
}
}
这里是从方法 B 中的 else 传递到 setMapBounds 的对象。起点由用户设置...但没有设置终点,我为它们选择一个。第一个对象是开始,第二个对象是结束。
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 563, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.49799999999999
k: 27.873196
...
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 602, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.47631678090198
k: 27.9374560148825
...
这里是从方法 A 传递到 setMapBounds 的对象,用户在其中设置相同的起点和终点。您可以看到方法 A 和 B 的起点相同。
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 563, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.49799999999999
k: 27.873196
...
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 703, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.45717760000002
k: 27.950575
...
最佳答案
我正在制作一个类似的应用程序,我使用的代码是:
var start;
var end;
function updateMap(name, obj){ //obj is a form input i.e. <input type="text">
var marker = (name==='start')?start:end;
geocoder.geocode({address:obj.value}, function(results, status){
//get coords/check if is valid place
if(status === google.maps.GeocoderStatus.OK){
//get info, store in new marker
marker.setPosition(results[0].geometry.location);
marker.setTitle(obj.value);
//if both markers present
if(start.getPosition() && end.getPosition()){
map.fitBounds(new google.maps.LatLngBounds(start.getPosition(), end.getPosition()));
}else{
//otherwise, if one marker
map.setCenter(marker.getPosition());
map.setZoom(15);
}
marker.setMap(map);
}else if(status === google.maps.GeocoderStatus.ZERO_RESULTS){
alert('There is an issue with address. Please refer to the "Help" link.');
}else{
setTimeout(function(){
updateMap(marker, obj);
}, 200);
}
});
}
它的作用是从文本输入中获取参数,对其进行地理编码,然后在 map 上放置标记。该函数由表单元素上的 onchange
事件触发。这可以很容易地适应您自己的用途。如果只有一个点,我只是选择默认的缩放值(通常非常接近街道,尽管您可以根据需要调整它)。
至于你的问题为什么它不起作用,我可以对整个代码做出更好的猜测。目前,我认为这与区域偏差有关,或者它只是一个错误。最好的办法可能就是解决这个问题。
关于javascript - Google map v3 fitBounds 缩放不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30792621/
我的 Leaflet map JavaScript 如下,在底部附近您将看到我的 fitBounds() 定义。 问题是我不明白如何准确使用它,或者将它放在代码中的何处以使其工作(即缩放以包含所有标记
我正在使用 Leaflet 和 Mapbox,我想设置 map 的 View : 所有标记均可见 中心设置为特定点 使用 setView 和 fitbounds 单独完成每个点很容易,但我不知道如何同
当我初始化 map 时,我向 map 添加 1 个标记。当我缩小 map 时,我可以在 map “副本”上多次看到添加的标记。 当我搜索某个位置时, map 会添加一个新标记。之后,我使用 fitBo
我正在使用 Selenium 编写验收测试来测试使用 Google Maps API 的应用程序。为了测试 map 标记的位置,我是 using un-optimized markers和独特的标题属
我有一个谷歌地图边界函数运行如下: function intializeCustom() { var map = new google.maps.Map(document.getElement
我正在尝试在传单 map 中设置 fitBounds 选项,如下所示: var bounds = new L.LatLngBounds([[Math.max(lat, borneLat), Math.
我知道如果边界发生变化,就会触发一个 bounds_changed 事件,但是我需要知道 fitBounds 何时完成(当边界发生变化或边界保持不变时)。 谷歌有某种容忍度,如果边界变化很小,它实际上
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 fitbound 函数在 map 的折线上自动缩放。但第一次如果我更改图表数据并再次调用相同的函数,它就无法正常工作,它就可以正常工作。函数代码如下。 var mapOptions = {
下面的代码工作正常,只是它没有缩放到给定的点。 如果我直接使用 Latlng,它就可以工作,无需将地址转换为 Latlng。 我需要将地址转换为 latlng,因为我是从数据库中获取地址的。 有人知道
我目前只能使用 google map v3。我尝试以这种方式手动添加边界,但它不起作用!? map.fitBounds((53.399999, 9.73215099999993), (53.71714
我只是想澄清一下我的理解方式是否正确。在我的 Google map 应用中,我想向我的用户显示来自特定大陆的标记。 问题:Google Map API 中的边界是由不多于两个点(标记)构成的区域,我说
新编码器尝试在我的 View 中调整 GoogleMap。 我查了很多资料,得出了这个结论,但对我不起作用。 覆盖 func loadView() { var markerList = [GM
我有两种类型的搜索来在 map 上放置标记。一个搜索基于来自输入表单的搜索查询触发,另一个在 moveend 事件上触发(即“在 map 移动时重做搜索”)。结果数据不一样;前者使用半径,后者限制在范
我的代码: if(!bounds.isEmpty()) { map.fitBounds(bounds); if (map.getZoom() > 11) { map.s
我对 googlemaps fitBounds 函数有疑问。 for (var i = 0; i Google Maps LatLngBounds.extend() Demo
我在我们的应用程序中使用 mapbox。执行 this.map.fitBounds(bound value) 将缩小或放大 map 以绑定(bind)指定值。在调用 this.map.fitBound
在这里,我的 javascript 代码在 map 中呈现标记,然后是该 map 的 fitBounds。 map 边界根据geojson得到拟合,但问题是当有任何标记时 在 map 上,我尝试适应绑
如何避免 this.map.fitBounds() 缩小?执行 this.map.fitBounds 将放大或缩小 map 以适合边界值。我想避免 fitBounds 的缩小功能。我怎样才能做到这一点
如果我在 Google map 上添加带有标签的标记,然后调用 fitBounds 到另一个区域,我仍然会继续看到没有标记的标签,除非缩小。这是一个错误吗? 这是一个工作 fiddle ,尝试单击 M
我是一名优秀的程序员,十分优秀!