J'essaie de dessiner sur une toile, mais les points que je dessine finissent par être au mauvais endroit. Je sais que c'est quelque chose lié à la boucle (et plus probablement à la portée variable et à la séquence des événements) parce que quand je dessine chacun des points de données un à la fois, ils apparaissent au bon endroit. Dès que je boucle sur un tableau de plus d'un élément, les points ne finissent pas au bon endroit (je les dessine sur une carte google maps - oui, j'ai utilisé leur api javascript mais je vais faire quelque chose de plus personnalisé que leur api ne le permet, mais en utilisant leur API pour cartographier des points, j'ai vérifié que mes points se dessinent correctement quand ils sont faits un par un, mais se retrouvent au mauvais endroit quand je boucle sur le tableau) .Dessiner sur toile dans les points de boucle sont éteints
map.setCenter(new google.maps.LatLng(data[0].location.lat, data[0].location.long));
map.setZoom(15);
var bounds = map.getBounds();
var topLeft = bounds.getNorthEast();
var bottomRight = bounds.getSouthWest();
var left = topLeft.lat();
var top = topLeft.lng();
var right = bottomRight.lat();
var bottom = bottomRight.lng();
var height = Math.abs(top - bottom);
var width = Math.abs(left - right);
canvas = $('#mapCanvas').get(0);
var canvasHeight = canvas.height;
var canvasWidth = canvas.width;
context = canvas.getContext('2d');
var radius = 10;
var fromTop;
var fromLeft;
var ratioTop;
var ratioLeft;
var centerX;
var centerY;
_.each(data, function(point) {
var latLng = new google.maps.LatLng(point.location.lat, point.location.long);
if (bounds.contains(latLng)) { // this point lies in the map, plot it on the canvas!
// calculate distance from top left
fromTop = Math.abs(top - point.location.long);
fromLeft = Math.abs(left - point.location.lat);
ratioTop = fromTop/height;
ratioLeft = fromLeft/width;
centerX = Math.floor(ratioLeft * canvasWidth);
centerY = Math.floor(ratioTop * canvasHeight);
context.beginPath();
context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
context.fillStyle = 'green';
context.fill();
context.closePath();
}
});
Note - le tableau de données contient des objets comme celui-ci:
{ _id: 5362a54a038a09d66ac9b36d,
location: { lat: 46.368619, long: -109.027793 } }
Voici une illustration du problème: Les points verts sont dessinés sur la toile, les jaunes et violets sont dessinés à l'aide de Google api. Notez que le premier point dessiné chevauche l'emplacement correct. Aussi, comme mentionné précédemment, si je dessine le 3ème point individuellement, ou l'un d'eux individuellement, alors ils apparaissent au bon endroit.
J'ai aussi mis en place un jsFiddle
(de/ratio) + (gauche/Haut) et centerX/y sont vars de la fonction, ne les définissent pas outsid e. Ce n'est pas la cause première, mais ce sera plus propre. Pourriez-vous également montrer le code de travail et décrire ou joindre la photo de «pas au bon endroit»? – GameAlchemist
Ouais - terminé. Et j'ai d'abord eu ceux définis à l'intérieur, je l'ai factorisé pour s'assurer que ce n'était pas le problème. –