2010-12-21 29 views
1

ich eine Anwendung in Django mache, die eine kleine Karte im Benutzerprofil hat (von django-Profil zur Verfügung gestellt, aber modifiziert, um GMaps v3 zu verwenden)falsche Positionierung v3 Google Maps

Die Sache ist, dass alles, was ich koordinieren Setzen Sie den Konstruktor in der Karte falsch dargestellt. Momentan stelle ich die Koordinaten von Santiago de Compostela (Spanien) auf Lat. 42.88 und Lang. -8.55 Aber Google Maps sagt mir immer wieder, dass ich in Bayingolin (China) bin.

Übrigens passiert das gleiche mit Google Maps v2, es findet die Koordinaten falsch.

Hier ist der Code:

{% block content %} 
    {% if GOOGLE_MAPS_API_KEY and user.get_profile.location %} 
     <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> 
     <meta name="viewport" content="initial-scale=1.0, user-scalable=yes"> 
     <script type="text/javascript"> 
     function initialize() { 
      var latlng = new google.maps.LatLng({{ user.get_profile.latitude }}, {{ user.get_profile.longitude }}); 
      var opts = { 
       zoom: 10, 
       center: latlng, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 
      var map = new google.maps.Map(document.getElementById("location"), opts); 
      var marker = new google.maps.Marker({ 
       position: latlng, 
       map: map, 
       title: "Test" 
      }); 
     } 
    </script> 
    {% endif %} 
<div id="profile"> 
<div id="profile_right"> 
    <div id="avatar" class="span-3 center"> 
     <a href="{% url profile_edit_avatar %}"> 
      <img class="border" src="/static/generic.96.jpg" /> 
     </a> 
     <p><a href="{{ request.path_info }}edit/avatar/">{% if user.get_profile.has_avatar %}{% trans "Change avatar" %}{% else %}{% trans "Add avatar" %}{% endif %}</a></p> 
    </div> 

    <div> 
     <p>{% trans "Username: " %} {{ user }}</p> 
     <p>{% trans "Real name: " %} {{ user.first_name }} {{ user.last_name }}</p> 
     <p>{% trans "Age: " %} {{ user. }} 
     <p>{% trans "Member for: " %} {{ user.date_joined }}</p> 
     <p>{% trans "E-mail:" %} 
      <span class="{% if not email or not validated %}quiet red{% endif %}"> 
      {%if not email %} 
       {% trans "Not set yet" %} 
      {% else %} 
       {{ email }} 
       {% if not validated %} 
        {% trans " (Not validated)" %} 
       {% endif %} 
      {% endif %} 
      </span> 
     </p> 
     <p> 
     <label for="location">{% trans "Country" %}:</label> 
     {% if user.get_profile.country %} 
      {{ user.get_profile.get_country_display }} 
     {% else %} 
      <span class="quiet red">{% trans "Not set" %}</span> 
     {% endif %} 
     </p> 

     <p> 
      {% trans "Ciudad: " %} {{ user.get_profile.province }} 
     </p> 

    </div> 
</div> 

<div id="profile_left"> 
    {% if GOOGLE_MAPS_API_KEY %} 
     <p>{% trans "Location" %}: 
      {% if user.get_profile.location %} 
       {{ user.get_profile.location }} 
      {% else %} 
       {% trans "Not set" %} 
      {% endif %} 
     </p> 
    {% endif %} 
    {% if user.get_profile.location %} 
     <div class="span-12 last"> 
      <div id="location" style="width: 480px; height: 240px;"></div> 
     </div> 
    {% endif %} 
</div> 
</div> 

Hier ist ein Screenshot mit dem Ergebnis: alt text

+0

Added ein Screenshot mit der Vorlage Rendering :) –

+0

Der interessante Teil ist Javascript/html;) –

+0

@ Mike: Das ist alles, was ich (in Bezug auf Google Maps haben) . Es gibt nichts mehr –

Antwort

1

Eigentlich hatte ich das gleiche Problem, dass die I10N-Engine meine Dezimalausgabe neu formatierte. Eine Problemumgehung für mich war die Verwendung des stringformat:"s" Filters für die Ausgabe von Dezimalzahlen im Javascript-Teil der Vorlagen.

In Ihrem Fall wäre das:

var latlng = new google.maps.LatLng({{ user.get_profile.latitude|stringformat:"s" }}, {{ user.get_profile.longitude|stringformat:"s" }}); 
+0

Danke! Ich wusste nicht, wie man das Format ändert :) –

0

wie die Koordinaten Sucht, dass Platz 86,87110 ist, 42,10547, die (im Text) zu ziemlich nahe ist die Koordinaten, die du benutzt, vielleicht ein Fehler in einem Parsing?

-8.55 -> 85.5 irgendwie?

+0

Ich benutze DecimalField, um die Koordinaten zu speichern, so sollte es nicht verlegen Dezimalpunkt oder negatives Vorzeichen. –

0

Ich fand die Antwort. Das Problem ist der I10N-Motor von Django. Ich habe es für spanische Einheiten konfiguriert, und in Spanien werden Dezimalzahlen durch ein Komma angegeben, nicht durch einen Punkt, sodass das Ergebnis der Speicherung von beispielsweise: 42.1231 und -8.2456 in 42.1231 und -8.2456 endet.

Mit meiner Vorlage, die Endung Ergebnis:

var latlng = new google.maps.LatLng(42,1231,-8,2456); 

, die offensichtlich nicht von Google Maps analysiert werden.