谷歌地图v3定位错误

时间:2010-12-21 15:39:36

标签: django api google-maps django-templates

我正在Django中做一个应用程序,在用户配置文件中有一个小地图(由django-profile提供,但修改为使用GMaps v3)

问题是我在构造函数中放置的任何坐标在地图中表示错误。目前,我正在将圣地亚哥德孔波斯特拉(西班牙)的坐标放在Lat。 42.88和龙。 -8.55但Google地图一直告诉我,我在Bayingolin(中国)。

顺便说一句,谷歌地图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 个答案:

答案 0 :(得分:1)

实际上,我遇到的问题是I10N引擎重新格式化了我的十进制输出。对我来说,解决方法是使用stringformat:"s"过滤器在模板的Javascript部分输出十进制数。

在你的情况下:

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

答案 1 :(得分:0)

看起来那个地方的坐标是86.87110,42.10547,它(在文本中)非常接近你使用的坐标,可能在解析时有些错误?

-8.55 - &gt; 85.5莫名其妙?

答案 2 :(得分:0)

我找到了答案。问题是Django的I10N引擎。我将它配置为西班牙单位,在西班牙,小数用逗号表示,而不是点,因此存储的结果例如:42.1231和-8.2456最终结果为:42,1231和-8,2456。

使用我的模板,结果是:

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

显然无法通过Google地图解析。