2016-05-27 3 views
1

Je suis assez nouveau pour les données géographiques et Geodjango lui-même. Disons que j'ai modèle:Trouver les cordinates les plus à l'extérieur de la base de données Geodjango qui a une colonne de point

class Employee(models.Model): 
    name = models.CharField(max_length=30) 
    location = PointField() 

Je veux montrer la carte en utilisant leafletjs comme celui-ci http://leafletjs.com/examples/quick-start-example.html avec le nom de l'employé et marqueur sur leur emplacement.

Maintenant, disons que les employés sont partout en Allemagne, mais certains d'entre eux travaillent à distance et sont situés à un endroit encore inconnu. Si elles étaient seulement situées en Allemagne, je pourrais montrer la carte de l'Allemagne entière et ajouter le marqueur basé sur des coordonnées. Le problème est que si un employé est basé en Russie, j'ai besoin d'afficher la Russie et ainsi de suite pour tous les autres pays/employés.

Pour revenir à l'exemple de code:

Si mon modèle Employee queryset renvoie trois employés basés dans deux pays l'Allemagne et la Russie, je veux afficher la carte de l'Allemagne à la Russie avec le marqueur, pas la carte du monde entier. Comment puis-je calculer ces coordonnées les plus externes à partir de Queryset? Ou ce qui pourrait être d'autres approches pour résoudre le problème ci-dessus?

+0

La Russie est un énorme, énorme pays voulez-vous montrer à la Russie et l'Allemagne dans leur totalité? Cela ferait un zoom arrière sur la carte? Pourquoi ne pas simplement utiliser la meilleure boîte de montage? – e4c5

+0

La meilleure boîte de montage est ce que je cherche en effet. Mais on dirait que je n'ai pas à m'inquiéter de le trouver moi-même, les brochures semblent se gérer. Je vais mettre à jour comment ça se passe. – chhantyal

Répondre

2

Le dépliant doit pouvoir calculer le cadre de sélection de la carte en fonction des points que vous souhaitez afficher. Cela peut être fait très facilement aussi. extent est ce que vous cherchez.

bounds = Employee.objects.filter(some filter).extent() 

C'est obsolète dans une nouvelle version, utilisez plutôt:

from django.contrib.gis.db.models import Extent 
bounds = Employee.objects.filter(some filter).aggregate(Extent('point'))['point__extent'] 

En LefletJS:

var mymap = L.map('mapid').fitBounds(51.505, 51.507], [51.56, 50.98]], {padding: [10, 10]}); 
+0

C'est la bonne réponse. Merci – chhantyal

+0

heureux d'avoir aidé – e4c5