2012-05-31 6 views
5

Ich versuche, Markierungen basierend auf dem Längen- und Breitengrad, die in einem Modell gespeichert sind, in einer Google Map mithilfe der API- und HTML5-Geolokation zu platzieren.Platzieren von Markierungen auf Google Map Mit Django

Das Problem ist, wie die Lat/Lon-Informationen für jedes Objekt innerhalb von JavaScript-Tags mithilfe von Vorlagenschlüsselwörtern durchlaufen werden, was meiner Meinung nach in Django nicht möglich ist.

fand ich eine ähnliche Frage hier Adding Google Map Markers with DJango Template Tags in Javascript, die leicht modifiziert und ich innerhalb einer Vorlage platziert - keine separate Skriptdatei - aber es scheint nicht zu funktionieren:

function loadMarkers(){ 
     {% for story in stories %} 
      var point = new google.maps.LatLng({{story.latitude}},{{story.longitude}}); 
      var marker = new google.maps.Marker({ 
      position: point, 
      map: map 
     }); 
     {% endfor %}  
    } 

Einsicht auf, wie man richtig Schleife durch Gegenstände in einem gespeicherten Django-Objekt mit lat, lon info und platzieren Sie diese auf einer Google Map mit der API würde sehr geschätzt werden.

+0

Haben Sie irgendwelche Fehler zu verwalten i n JS? – ilvar

+0

Wäre gut, wenn Sie einen Link zu Ihrer Implementierung posten könnten oder zumindest überprüfen könnten, dass die Django-Ausgabe für story.x ein gültiger Wert ist. – andresf

+0

@andresf: Hier ist die Seitenimplementierung: https://pastee.org/4yhdc –

Antwort

8

Ich benutze django-geoposition meiner Geodaten

from django.db import models 
from geoposition.fields import GeopositionField 

class Zone(models.Model): 
    name = models.CharField(max_length = 50) 
    kuerzel = models.CharField(max_length = 3) 
    kn_nr = models.CharField(max_length = 5) 
    beschreibung = models.CharField(max_length = 300) 
    adresse = models.CharField(max_length = 100) 
    position = GeopositionField() 

view.py

from geo.models import Zone 
from django.shortcuts import render_to_response, get_object_or_404, redirect 

def ShowZonen(request): 
    zone=Zone.objects.all() 
    return render_to_response('zonen.html', {"zone": zone}) 


def showZoneDetail(request, zone_id): 
    zone=Zone.objects.get(id=zone_id) 
    return render_to_response('zonendetail.html', {"zone": zone}) 

Vorlage zonendetail.html

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 

    var map; 
    function initialize() { 
    var mapDiv = document.getElementById('map-canvas'); 
    map = new google.maps.Map(mapDiv, { 
     center: new google.maps.LatLng(48.208174,16.373819), 
     zoom: 12, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    google.maps.event.addListenerOnce(map, 'tilesloaded', addMarkers); 

    } 
    function addMarkers() { 

     {% for mark in zone %} 
     var point = new google.maps.LatLng({{mark.position.latitude}},{{mark.position.longitude}}); 
      var image = '{{ STATIC_PREFIX }}'+ 'checkmark.png'; 
      var marker = new google.maps.Marker({ 
      position: point, 
      map: map, 
      icon: image, 
      url: 'http://172.16.0.101:8882/zone/' + {{mark.id}}, 
      title: '{{ mark.id }}', 
     }); 
      marker['infowindow'] = new google.maps.InfoWindow({ 
        content: "<h1>{{mark.name}}</h1> <br> {{ mark.name }} <p> <a href=\"http:\/\/172.16.0.101:8882\/zone\/{{ mark.id }}\"> {{ mark.name }}</a>", 
     }); 
      google.maps.event.addListener(marker, 'click', function() { 
       //window.location.href = this.url; 
       this['infowindow'].open(map, this); 
      }); 
      google.maps.event.addListener(marker, 'mouseover', function() { 
       // this['infowindow'].open(map, this); 
        }); 
      google.maps.event.addListener(marker, 'mouseout', function() { 
       // this['infowindow'].close(map, this); 

      }); 





     {% endfor %}  

    } 


    google.maps.event.addDomListener(window, 'load', initialize); 
</script> 
Verwandte Themen