Bonjour,
je développe une application avec sencha touch, j'utilise une map pour afficher des éléments pensent dans ma base de données.
problème : la fonction de google permettant de récupérer les coordonnées avec une adresse me renvois une erreur OVER_QUERY_LIMIT.
ma fonction récupère les éléments dans la base de données et appel ensuite la fonction permettant de geocoder :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 AfficheClie: function() { var map = Ext.getCmp('myMap').getMap(); var view = this; // Set up a model to use in our Store Ext.define('Client', { extend: 'Ext.data.Model', config: { fields: [ {name: 'libelle', type: 'string'}, {name: 'Adresse1', type: 'string'}, {name: 'Adresse2', type: 'string'}, {name: 'Adresse3', type: 'string'}, {name: 'Codepostal', type: 'string'}, {name: 'Ville', type: 'string'}, ] } }); var DataStore = new Ext.data.Store( { model: 'Client', fields: ['libelle', 'Adresse1', 'Adresse2', 'Adresse3', 'Codepostal', 'Ville'], proxy: { type: 'rest', url: 'serv/ConnectBase.php', actionMethods: { read: 'POST' }, reader: { type: 'json', root: 'result', } }, //autosave: false, autoload: true, }); DataStore.load( { callback: function (records, operation, success) { for (var i =0;i<records.length;i++) { if (records[i].data.Adresse1 != '' || records[i].data.Adresse2 != '' || records[i].data.Adresse3 != '' || records[i].data.Codepostal != '' || records[i].data.Ville != '') { var adresse = records[i].data.Adresse1 +' '+ records[i].data.Adresse2 +' '+records[i].data.Adresse3 + ' ' + records[i].data.Codepostal + ' ' + records[i].data.Ville; view.codeAddress(map,adresse,records[i].data.libelle) } } this.tabMarkers = new Array(); }, scope: this }); },
Il me semle avoir vus qu'il fallait synchroniser ses requêtes géocode pour ne les envoyer qu'une par une, mais je ne voit pas comment faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 codeAddress :function (map,address,libelle) { var view = this; var geocoder = new google.maps.Geocoder(); geocoder.geocode( { 'address': address}, function( data, status) { switch(status) { case google.maps.GeocoderStatus.OK: { var pos = data[0].geometry.location; for(var i=0;i<view.tabMarkers.length;i++) { if(view.tabMarkers[i].position.Ya.toFixed(3) == pos.Ya.toFixed(3) && view.tabMarkers[i].position.Za.toFixed(3) == pos.Za.toFixed(3) && view.tabMarkers[i].title != "origine") { return true; } } var distanceKm = google.maps.geometry.spherical.computeDistanceBetween(view.origine.position, pos); distanceKm = distanceKm/1000; if(distanceKm < view.proximite) var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/green.png"); else var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/red.png"); var infowindow = new google.maps.InfoWindow( { content: libelle + " : " + distanceKm.toFixed(2)+ ' km' }); var marker = new google.maps.Marker( { map : map, position : pos, icon: icon, title: libelle }); view.tabMarkers.push(marker); google.maps.event.addListener(marker, 'click', function() { if(view.direction != null) view.direction.setMap(null); infowindow.open(map, marker); view.itineraire(marker); }); break; } case google.maps.GeocoderStatus.ZERO_RESULTS: { Ext.Msg.alert("Erreur adresse", "Aucune adresse n'a ete trouvée pour : "+libelle); break; } case google.maps.GeocoderStatus.OVER_QUERY_LIMIT: { Ext.Msg.alert("Erreur requete limitee", "Trop de requete ont ete envoyees"); break; } case google.maps.GeocoderStatus.REQUEST_DENIED: { Ext.Msg.alert("Erreur requete annulee", "votre requete a ete annulee"); break; } case google.maps.GeocoderStatus.INVALID_REQUEST: { Ext.Msg.alert("Erreur requete invalide", "votre requete pour " + libelle + " n'est pas valide"); break; } default: { Ext.Msg.alert("Erreur !","Une erreur inconnue est survenue"); break; } } }); },
ps: ce code n'est pas du tout optimiser, ce n'est qu'un "premier jet".
merci d'avance
Partager