先週、このファイル mappanslow.html を http://code.google.com/p/gmaps-samples-v3/source/browse/trunk/talks/io2011/map-usability/mappanslow.html?spec=svn265&r=で見つけました。 265 を使用しており、json ファイルからデータを取得する方法を知っていることは非常に役に立ちました。現在、このマップを V3 で再コーディングしてい ます http://www.ville.rimouski.qc.ca/styles/carte/carte.jspと私の問題は、ユーザーがどのデータを (異なるデータから) 選択できる必要があるかということですjson ファイル) は、「Imprimer」の下の選択ボックスで必要なものを選択すると表示されます。mappaslow.html は 1 つの 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);
...
このようなことは可能ですか?私は多くの方法を試しましたが、常に構文エラーまたは未定義の結果になります。
ターゲットは上の 2 番目のリンクのマップであることを忘れないでください。
@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"}
]
}];
最初のループで正しい数の「ファイル」が認識されていることが警告でわかります。問題は、何かが 2 番目のループに渡されることです。
for (var t = 0; t < markers[i].length; t++) {