Google Maps v3 неправильное позиционирование - PullRequest
1 голос
/ 21 декабря 2010

Я делаю приложение в Django, у которого есть небольшая карта в профиле пользователя (предоставленная django-profile, но модифицированная для использования GMaps v3)

Дело в том, что любая координата, которую я помещаю вконструктор неправильно представлен на карте.В настоящее время я помещаю координаты Сантьяго-де-Компостела (Испания) в Лат.42,88 и Лонг.-8.55, но карты Google постоянно говорят мне, что я нахожусь в Байнголине (Китай).

Кстати, то же самое происходит с Google Maps v2, он неправильно определяет координаты.

Вот код:

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

Вот скриншот с результатом: alt text

Ответы [ 3 ]

1 голос
/ 22 декабря 2010

На самом деле, у меня была та же проблема, что двигатель I10N переформатировал мой десятичный вывод. Обходным решением для меня было использование фильтра stringformat:"s" для вывода десятичных чисел в части Javascript шаблонов.

В вашем случае это будет:

var latlng = new google.maps.LatLng( {{ user.get_profile.latitude|stringformat:"s" }}, {{ user.get_profile.longitude|stringformat:"s" }} );
0 голосов
/ 21 декабря 2010

Я нашел ответ. Проблема в двигателе I10N от Django. Я настроил его на испанские единицы, а в Испании десятичные дроби отмечаются запятой, а не точкой, поэтому результат сохранения, например: 42.1231 и -8.2456, заканчивается: 42,1231 и -8,2456. *

С моим шаблоном конечный результат:

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

Это, очевидно, не может быть проанализировано Google Maps.

0 голосов
/ 21 декабря 2010

Похоже, что координаты для этого места - 86.87110, 42.10547, который (в тексте) довольно близок к используемым вами координатам, может быть какая-то ошибка при разборе?

-8,55 -> 85,5 как-нибудь?

...