5

API と HTML5 地理位置情報を使用して、Google マップのモデルに保存されている緯度と経度に基づいてマーカーを配置しようとしています。

問題は、テンプレート キーワードを使用して JavaScript タグ内に格納された各オブジェクトの緯度/経度情報をループする方法ですが、これは Django では実行できないと思います。

ここで同様の質問を見つけましたJavascript で DJango テンプレート タグを使用して Google マップ マーカーを追加します。

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 %}    
    }

格納された Django オブジェクト内のアイテムを緯度、経度情報で適切にループし、API を使用して Google マップに配置する方法についての洞察をいただければ幸いです。

4

1 に答える 1

9

django-geopositionを使用して地理データを管理しています

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})

テンプレート 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>
于 2012-12-17T19:59:24.153 に答える