pixelhumain/citizenToolKit

Problème avec les Point dans le model (geoPosition)

aboire opened this issue · 5 comments

il faut mettre la longitude au début

Point coordinates are in x, y order (easting, northing for projected coordinates, longitude, latitude for geographic coordinates):

{ "type": "Point", "coordinates": [100.0, 0.0] }

http://geojson.org/geojson-spec.html

je pense qu'effectivement ce refactor peut etre interressant
car ca permet de suivre les standard d'application fonctionnel
par contre le chgt on le fera avec @Kgneo
puisque ca creer un vrai impact

effectivement convertir notre structure a ce format
http://geojson.org/geojson-spec.html#id2
nous permettrait de respecter la norme geoJSON (une norme fonctionnel )
plutot que la norme semantique schema
qui sera généré par le traducteur et génarateur semantique
dans lequel on convertirait l'attribut geoJSON en geo de schema

on pourrait le faire en deux etapes
1- ajouter le format dont @aboire a besoin et maintenir les 2 formats
2 - refactorer pour n'en garder qu'un

wdyt ?

pour meteor la moulinette pour mettre à jour les Point pour que l'index soit bon

            Citoyens.find({}).fetch().map(function(c){
                if(c.geo && c.geo.longitude){
                    Citoyens.update({_id:c._id}, {$set: {'geoPosition': {
                                type: "Point",
                                'coordinates': [parseFloat(c.geo.longitude), parseFloat(c.geo.latitude)]
                            }}});
                }
            });*/

et j'ai test avec ça et l'index est correcte

            Citoyens._ensureIndex({
                    "geoPosition.coordinates": "2dsphere"
            });
            console.log(JSON.stringify(Citoyens.find({'geoPosition.coordinates': {
                        $nearSphere: {
                            $geometry: {
                                type: "Point",
                                coordinates: [55.489422, -21.30901]
                            },
                            $maxDistance: 5000
                        }}},{_disableOplog: true,fields:{pwd:0}}).fetch()));
Kgneo commented

D'après ce que j'ai compris, il s'agit simplement d'inverser la position
des lat/lng dans geoPosition.
Si c'est bien ça, ça ne me pose pas de problème, j'aurais juste une petite
modif à faire de mon côté pour que le SIG ne plante pas.

        this.Sig.getCoordinates = function(thisData, type)
        {
            if(typeof thisData.geoPosition != "undefined"){
                if(type == "markerSingle"){
                    var lat = thisData.geoPosition.coordinates[1];
                    var lng = thisData.geoPosition.coordinates[0];
                    return new Array (lat, lng);
                } else if(type == "markerGeoJson"){
                    return thisData.geoPosition.coordinates;
                }

yes et il faut que ça soit des Float aussi

A faire :

  • changer l'enreg des Point pour tous les objets (@Kgneo)
  • faire la moulinette pour toutes les collections (@aboire)
  • organiser le passage pour tous les environnements (dev, qa, prod) (@sylvainbarbot)