我上周在 http://code.google.com/p/gmaps-samples-v3/source/browse/trunk/talks/io2011/map-usability/mappanslow.html?spec=svn265&r=上找到了这个文件 mappanslow.html 265 ,知道如何从 json 文件中获取数据对我来说非常有用。我目前正在 V3 中重新编码这张地图 http://www.ville.rimouski.qc.ca/styles/carte/carte.jsp我的问题是用户必须能够选择哪些数据(来自不同的json 文件)将通过在“Imprimer”下的选择框中选择他想要的内容来显示。mappaslow.html 适用于一个 json 文件,但我尝试将代码用于多个 json 文件,如果我列出,例如,我的所有文件如下所示:
<script type="text/javascript" src="file1.json"></script>
<script type="text/javascript" src="file2.json"></script>
<script type="text/javascript" src="file3.json"></script>
显示的数据始终来自最后一个(file3.json)。
有谁知道如何解决这个问题?
有来自 mappaslow.html 的代码:
<script type="text/javascript" src="markers.json"></script>
<script type="text/javascript">
var map;
var timeout;
var m = [];
function init() {
map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(44.85471, -93.24185),
zoom: 17,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false
});
google.maps.event.addListener(map, 'bounds_changed', function() {
clearMarkers();
if (timeout) {
window.clearTimeout(timeout);
}
timeout = window.setTimeout(function() {
addMarkers();
}, 500);
});
}
function addMarkers() {
var bounds = map.getBounds();
for (var i = 0; i < markers.length; i++) {
var pos = new google.maps.LatLng(markers[i].lat, markers[i].lng);
if (bounds.contains(pos)) {
var marker = new google.maps.Marker({
map: map,
position: pos
});
m.push(marker);
}
}
}
function clearMarkers() {
for (var i = 0, marker; marker = m[i]; i++) {
marker.setMap(null);
}
m = [];
}
google.maps.event.addDomListener(window, 'load', init);
</script>
此示例中使用的 json 文件和我的地图如下所示:
var markers = [
{"lat":44.86065444748757, "lng":-93.26223975870084},
{"lat":44.84990797511595, "lng":-93.22287578639873}];
感谢您的建议@harmlessdragon,但我希望能够通过在参数中传递所选 .json 的名称来指定正确的变量,因为它们的结构是相同的。就像是:
function addMarkers(jsonName) {
var rightJson = jsonName;
var bounds = map.getBounds();
for (var i = 0; i < rightJson.markers.length; i++) {
var pos = new google.maps.LatLng(rightJson.markers[i].lat, rightJson.markers[i].lng);
...
有可能做这样的事情吗?我尝试了很多方法,但总是导致语法错误或未定义的东西。
别忘了目标是上面第二个链接的地图。。
@harmlessdragon,我终于找到了 json 文件的正确语法:
var markers = [{
"file1": [
{"lat": "number", "lng": "number"}, {"lat": "number", "lng": "number"},
]},{"file2": [
{"lat": "number", "lng": "number"}, {"lat": "number", "lng": "number"},
]},{"file3": [
{"lat": "number", "lng": "number"}, {"lat": number, lng: number"}
]
}];
我看到一个警告,第一个循环识别了正确数量的“文件”。现在的问题是任何东西都会进入第二个循环:
for (var t = 0; t < markers[i].length; t++) {