问:再过一周,另一个艰巨的jquery挑战!http://teamtreehouse.com/library/websites/build-an-interactive-website/google-maps-integration/adding-point-markers-to-a-map
任务:在“ geocoder”对象上的“ geocoderOptions”之后的行上,调用“ geocode”方法,将“ geocoderOptions”作为第一个参数传递,将匿名函数作为第二个参数传递。匿名函数具有两个参数“结果”和“状态”。如果“ google.maps.GeocoderStatus.OK”与雕像相同,则在“ theMap”中以及“结果”中第一个元素的位置处创建一个“ google.maps.Marker”,例如在视频中,然后将其按入到“标记”数组。
与前三个相比,这是一大进步!:/
我认为我要等到最后一句话的第二部分。
在“ geocoder”对象上的“ geocoderOptions”之后的行上,调用“ geocode”方法:DONE
geocoder.geocode();
传递“ geocoderOptions”作为第一个参数,传递匿名函数作为第二个参数:DONE
geocoder.geocode(geocoderOptions,function(){});
匿名函数具有两个参数“结果”和“状态”:DONE(PS匿名仅具有2个“ n”)
geocoder.geocode(geocoderOptions,function(results,status){});
如果“ google.maps.GeocoderStatus.OK”与雕像相同:“完成”(此处PS状态拼写错误)
geocoder.geocode(geocoderOptions,function(results,status){
if(status == google.maps.GeocoderStatus.OK)
});
在视频中的“ theMap”和“结果”中第一个元素的位置处创建一个“ google.maps.Marker”,然后将其推入“ markers”数组中:STUCK(PS在语法上似乎没有多大意义-太多“和”?)
我已经试过了:
geocoder.geocode(geocoderOptions ,function(results,status){
if(status == google.maps.GeocoderStatus.OK)new google.maps.Marker(theMap.results [0] .markers)
});
和这个:
geocoder.geocode(geocoderOptions,function(results,status){
if(status == google.maps.GeocoderStatus.OK)theMap = new google.maps.Marker(results [0] .markers)
});
甚至尝试像视频中那样在其上方创建函数,但这没有用。
上面的两个代码示例均产生此错误:“'markers'数组中预期有1个标记。” 我猜这意味着我没有正确调用数组?我知道它们是不对的,但我只是在尝试“在'theMap'中创建'google.maps.Marker'”
答:这就是代码在此步骤中应该做或应该做的。
1使用Google的Geocoder对地址进行反向地理编码
的geocode()是类型的对象上的方法google.maps.Geocoder。
该geocode()方法有两个参数,第一个是一组选项。选项存储在具有键和值的对象中。我们只关心对address键的值进行反向地理编码。第二个是Google可能用来call()或apply()传入results的array和状态的回调函数。
geocoder.geocode(geocoderOptions,函数(结果,状态){})
2检查状态并从结果数组中获取第一个元素。
我们需要检查状态是否为,OK因为不是,我们将无法获得任何结果。如果是OK这样,我们要处理第一个结果。数组中可能有多个结果。这是如果我们发送的内容是“模糊的”,例如街道地址的一部分,并且Google可能会返回多个结果。由于我们只是在迪斯尼乐园中寻找魔术王国,因此我们可以确信第一个结果很好。
geocoder.geocode(geocoderOptions,function(results,status){
if(status == google.maps.GeocoderStatus.OK){
}
);
3从第一个结果中提取位置
结果发送到函数
geocoder.geocode(geocoderOptions,function(results,status){
if(status == google.maps.GeocoderStatus.OK){
var location = results [0] .geometry.location;
}
);
4创建一个新的google.maps.Marker
记住一个标记需要一个物体的钥匙map,并position在为代码的挑战theMap,在这种特定情况下location。
geocoder.geocode(geocoderOptions,function(results,status){
if(status == google.maps.GeocoderStatus.OK){
var location = results [0] .geometry.location;
var marker = new google.maps.Marker({ map:theMap,position:location});
}
);
5然后 push将marker到markers阵列
在markers.push(nameOfMarkerHere)。
geocoder.geocode(geocoderOptions,function(results,status){
if(status == google.maps.GeocoderStatus.OK){
var location = results [0] .geometry.location;
var marker = new google.maps.Marker({ map:theMap,position:location});
markers.push(marker);
}
);
这样更清楚了吗?如果不是我大概回顾一下在JavaScript基础材料一样的变量,它占地约范围的东西,功能这在约匿名函数详细占地和对象肚里过像钥匙,方法的一些东西和call()和apply()的事情,我说大约在帖子的前面。我认为,一旦再次审阅这些内容后,希望可以更清楚地了解发生了什么,并想象Google如何实现了其中的某些API。
此外,您还可以在本地框上玩耍,输入您知道的地址,然后console.log将结果-并将其映射到地图上,注释掉线条等,这可能会使内容点击更多。