- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 SO 的帮助下,我成功地对地址进行了地理编码,并将其相应的引脚放置在 map 上。 问题是我无法选择坐标以便在 map 上向其附加 #message div,因为我不再有坐标。
我怀疑我在这一部分做错了什么:
/* Message
--------------------*/
$("#message").appendTo(map.getPane(G_MAP_FLOAT_SHADOW_PANE));
function displayPoint(marker, index){
$("#message").hide();
var moveEnd = GEvent.addListener(map, "moveend", function(){
var markerOffset = map.fromLatLngToDivPixel(marker.getLatLng());
$("#message")
.fadeIn()
.css({ top:markerOffset.y, left:markerOffset.x });
GEvent.removeListener(moveEnd);
});
map.panTo(marker.getLatLng());
}
当我使用原始坐标代码时它可以工作(这在jsbin上被注释掉):
var markers = [
[39.729308,-121.854087],
[39.0,-121.0]
];
for (var i = 0; i < markers.length; i++) {
var point = new GLatLng(markers[i][0], markers[i][1]);
marker = new GMarker(point);
map.addOverlay(marker);
markers[i] = marker;
}
但我需要帮助让它与当前代码一起工作:
function showAddress(markers) {
if (geocoder) {
geocoder.getLatLng(markers,
function(point) {
if (!point) {
alert(markers + " not found");
} else {
marker = new GMarker(point);
map.addOverlay(marker);
markers[i] = marker;
}
}
);
}
}
for (var i = 0; i < markers.length; i++) {
showAddress(markers[i]);
}
我对使用谷歌地图 API 还不太熟悉,所以任何关于我做错了什么的见解都会非常有帮助。谢谢=]
最佳答案
恐怕您的代码有很多问题:P
我不得不做一些整形手术,但结果是:http://jsbin.com/atofe
以下是我所做的更改的描述。如果您需要帮助理解任何内容,请告诉我。
<小时/><script type="text/javascript">
document.write(marker);
</script>
我必须将其注释掉,因为它导致了错误。我猜你不小心把它留在那里了。
<script type="text/javascript">
// document.write(marker);
</script>
<小时/>
var markers = [
["624 Nord Ave #20, Chico CA"],
["200 Nord Ave, Chico CA"],
["100 Nord Ave, Chico CA"],
["5th and Ivy, Chico CA"]
];
由于我们使用地址而不是坐标,因此您不需要(事实上您不应该这样做,因为它只会使事情变得复杂)将每个字符串封装在数组中。我还将其重命名为addresses
,以使其更加清晰并防止与实际标记发生冲突(稍后会详细介绍)。
var addresses = [
"624 Nord Ave #20, Chico CA",
"200 Nord Ave, Chico CA",
"100 Nord Ave, Chico CA",
"5th and Ivy, Chico CA"
];
<小时/>
function showAddress(markers) {
if (geocoder) {
geocoder.getLatLng(markers,
function(point) {
if (!point) {
alert(markers + " not found");
} else {
marker = new GMarker(point);
map.addOverlay(marker);
markers[i] = marker;
}
}
);
}
}
for (var i = 0; i < markers.length; i++) {
showAddress(markers[i]);
}
/* Add Markers to List
--------------------*/
$(markers).each(function(i,marker){
$("<li>")
.html(i+" - "+marker)
.click(function(){
displayPoint(marker, i);
})
.appendTo("#list");
GEvent.addListener(marker, "click", function(){
displayPoint(marker, i);
});
});
这是我必须做出最多改变的地方。您在这里犯了几个重大错误。
首先,当您应该使用新名称时,您重新使用了变量markers
。在此过程中,您重写了地址字符串数组,并误解了内容的存储位置(这就是为什么我将地址字符串数组重命名为addresses
)。
其次,您尝试在地理编码器实际返回其响应之前将标记添加到列表中。我认为您没有意识到 getLatLng 是一个异步函数,因此它仅在地理编码器返回其响应后才执行回调函数。由于您没有等待响应,因此“将标记添加到列表”部分变得毫无用处,因为尚未检索到标记。
因此,为了解决这些问题,我将“添加标记到列表”部分移至新的 handleGeocoderResponse
函数中。这可确保仅在返回地理编码器响应后才将标记添加到列表中。我还必须使用双 closure因为我们使用循环和异步函数。
function handleGeocoderResponse(addr, j) {
/*
These are closures. We have to return a function
that contains our Geocoder repsonse handling code
in order to capture the values of "addr" and "j"
as they were when they were passed in.
*/
return (function(point) {
if (!point) {
alert(addr + " not found");
}
else {
var marker = new GMarker(point);
map.addOverlay(marker);
/* Add markers to list
------------------------*/
$("<li>")
.html(j + " - " + addr)
.click(function(){
displayPoint(marker, j);
})
.appendTo("#list");
GEvent.addListener(marker, "click", function(){
displayPoint(marker, j);
});
}
});
}
for (var i = 0; i < addresses.length; i++) {
if (geocoder) {
var address = addresses[i];
geocoder.getLatLng(
address,
handleGeocoderResponse(address, i)
);
}
}
关于javascript - 需要帮助反向地理编码将消息附加到 GLatLng 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816479/
我的代码:http://jsbin.com/epuxu 在 SO 的帮助下,我成功地对地址进行了地理编码,并将其相应的引脚放置在 map 上。 问题是我无法选择坐标以便在 map 上向其附加 #mes
我正在尝试使用 Google Maps JavaScript API 从两个 address 点绘制测地线折线。 var polyOptions = {geodesic:true}; var poly
我正在使用以下代码在 map 上分组并显示船舶位置列表: function configure_ship_polylines() { var shipPoints = new Array();
我有一个GCircle在 Wicket 口 GMap3 。我希望用户能够在圈内以及圈外单击 map (添加/删除标记)。问题:据我了解,圆圈上的单击事件不会传播到 map ,因为 GCircle 组件
我是一名优秀的程序员,十分优秀!