Bug #6933
champ "carte" et export JSON
0%
Description
Pour le champ carte, la valeur est "lat;lon" avec lat et lon des décimaux.
Pour l'export JSON il serait plus intéressant d'avoir dictionnaire sous forme "geohash" tel que reconnu par ElasticSearch (et d'autres) :
{ "lat": ..., "lon": ... }
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a environ 9 ans
- Fichier 0001-map-export-json-in-a-lat-lon-dict-6933.patch 0001-map-export-json-in-a-lat-lon-dict-6933.patch ajouté
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a environ 9 ans
Ça ne doit pas être bien compliqué d'accompagner ce patch d'un test (cf ce qui se fait dans test_fields.py).
(il manque un espace devant 'lon').
Mis à jour par Thomas Noël il y a environ 9 ans
- Fichier 0001-map-export-json-in-a-lat-lon-dict-6933.patch 0001-map-export-json-in-a-lat-lon-dict-6933.patch ajouté
Mes mauvaises habitudes ont la peau dure. Voici, avec l'espace et un peu de tests.
Mis à jour par Frédéric Péters il y a environ 9 ans
Côté elasticsearch, ça semble bien vouloir avaler du "location" : "41.12,-71.34"
; mais comme on a de toute façon un point virgule à la place de leur virgule, structurons, et là il faut sans doute que lat et lon soient des valeurs numériques, plutôt que des chaines, non ?
(je lis http://www.elastic.co/guide/en/elasticsearch/reference/1.3/mapping-geo-point-type.html )
Mis à jour par Thomas Noël il y a environ 9 ans
Bien vrai.
Bon, en fait, j'ai faignanté dès que j'ai remarqué (empiriquement) que Elastic savait utiliser des chaines.
Pour le numérique, j'avais commencé, et je voulais passer par du Decimal, et je ne suis pas parvenu à sérialiser proprement un Decimal en JSON. Peut-être que float() est acceptable, mais ça m'a été une pensée désagréable.
Je préférerais quand même rester sur un json en dico "lat/lon", parce que c'est plus clair, on voit tout de suite qu'il s'agit de coordonnées géo, c'est généralement plus facile à traiter que faire un split, etc.
Donc, si on peut sérialiser la chose en dico JSON mais avec deux décimaux, ça me va très bien.
Mis à jour par Thomas Noël il y a environ 9 ans
Frédéric Péters a écrit :
(je lis http://www.elastic.co/guide/en/elasticsearch/reference/1.3/mapping-geo-point-type.html )
(juste au cas où, on utilise la 1.5)
Mis à jour par Frédéric Péters il y a environ 9 ans
Pour la gestion Decimal dans la sortie json, c'est comme pour le date/heure, il va falloir l'ajouter à qommon.misc.JSONEncoder.
Mais je pense float() acceptable pour l'usage, la seule question qu'il me restait concernait les résultats pour les comparaisons dans les tests, mais des tests sur le côté me disent que ça passerait.
Mis à jour par Thomas Noël il y a environ 9 ans
- Fichier 0001-map-export-json-in-a-lat-lon-dict-6933.patch 0001-map-export-json-in-a-lat-lon-dict-6933.patch ajouté
Ouaich, allez, ça ira tant qu'on ne géolocalise pas au micromètre près ;)
Mis à jour par Frédéric Péters il y a environ 9 ans
- Statut changé de Nouveau à Résolu (à déployer)
Voilà, poussé.
commit 4f790b48a03b7603c4fa1a0e638f1e11395b85b6 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Sun Apr 12 16:34:49 2015 +0200 map: export json in a lat/lon dict (#6933)
Mis à jour par Benjamin Dauvergne il y a environ 9 ans
La bonne manière de définir la précision d'un Decimal c'est d'utiliser
quantize() avec éventuellement un mode d'arrondi précisé dans le
context. Pour obtenir 2 décimales il faut par exemple:
str(valeur_decimale.quantize(decimal.Decimal('0.01')))
Si on utilise le formatage des flottant, on a je pense un cast implicite
et toutes sortes de saletés s'ensuivent.
Mis à jour par Thomas Noël il y a environ 9 ans
- Fichier 0001-json-export-decimal-with-fixed-precision-6933-contin.patch 0001-json-export-decimal-with-fixed-precision-6933-contin.patch ajouté
- Statut changé de Résolu (à déployer) à En cours
Sur cette idée, suite du patch, avec une "astuce" soufflée par Benjamin : un export JSON qui gère les Decimal (en faisant croire à un float mais en fait non)
Mis à jour par Benjamin Dauvergne il y a environ 9 ans
output decimals with a fixed precision
Je ne vois pas bien où la précision est fixé dans le patch.
Mis à jour par Thomas Noël il y a environ 9 ans
Benjamin Dauvergne a écrit :
Je ne vois pas bien où la précision est fixé dans le patch.
Je voulais dire, en anglais, "export avec la précision fixée dans le Decimal", autre traduction accueillie avec bienveillance ;)
Mis à jour par Thomas Noël il y a environ 9 ans
Et dernier patch donc, l'utilisation de Decimal dans le champ Map.
Mis à jour par Thomas Noël il y a environ 9 ans
- Fichier 0001-map-json-lat-lon-as-Decimal-6933-continued.patch 0001-map-json-lat-lon-as-Decimal-6933-continued.patch ajouté
Thomas Noël a écrit :
Et dernier patch donc, l'utilisation de Decimal dans le champ Map.
Avec le fichier joint, désolé.
Mis à jour par Frédéric Péters il y a environ 9 ans
- Statut changé de En cours à Résolu (à déployer)
Je trouve plutôt moche d'ajouter ce qui est clairement identifié comme un hack alors qu'on peut très bien être en float d'après moi; je vais fermer ce ticket mais si jamais tu veux le pousser, vas-y quand même.
Mis à jour par Benjamin Dauvergne il y a environ 9 ans
Je n'avais pas vu que ça concernait des latitudes/longitudes dans ce cas effectivement ça ne sert à rien.
map: export json in a lat/lon dict (#6933)