Клуб API Карт

Загрузка/сохранение координат

miguel.pak
6 апреля 2011, 01:37

Добрый день,

никак не могу взять в толк, почему неправильно поднимаются координаты после сохранения на сервер.

Есть код:

var map;

var latitudeField = document.getElementById("<%= this.hfMapLatitude.ClientID %>");
var longtitudeField = document.getElementById("<%= this.hfMapLongtitude.ClientID %>");
var zoomField = document.getElementById("<%= this.hfMapZoom.ClientID %>");

function getValue(field)
{
    return field.value == 0 ? 5 : field.value;
}

function setValue(field, value)
{
    field.value = value;
}

function Redraw()
{
    if(map != null){map.redraw();}
}
function Init()
{
    setValue(latitudeField,<%=this.Latitude%>);
    setValue(longtitudeField, <%=this.Longtitude %>);
    setValue(zoomField,<%=this.ZoomLevel%>);
}
$(document).ready(function () {
    try
    {
        Init();
        var lat = getValue(latitudeField);
        var lng = getValue(longtitudeField);
        var point = new YMaps.GeoPoint(lat,lng);
        var zoomLevel = getValue(zoomField);
        var div = $("div[map]");
        map = new YMaps.Map(div);
        map.addControl(new YMaps.Zoom());
        map.addControl(new YMaps.MiniMap());
        map.setCenter(point, zoomLevel);
        map.addControl(new YMaps.TypeControl());
        map.addControl(new YMaps.ToolBar());
        map.addControl(new YMaps.ScaleLine());
        if(lat != 5 && lng != 5)
        {
        var placemark = new YMaps.Placemark(point);
            map.removeAllOverlays();
            map.addOverlay(placemark);
        }
        else
        {
            map.setCenter(point,zoomLevel);
        }
        var myEventListener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
            var placemarkPoint = mEvent.getGeoPoint();
            var placemark = new YMaps.Placemark(placemarkPoint);
            map.removeAllOverlays();
            map.addOverlay(placemark);
            setValue(latitudeField,placemarkPoint.getLng());
            setValue(longtitudeField,placemarkPoint.getLat());
            setValue(zoomField,map.getZoom());
            map.redraw();
        }, this);
        map.redraw();
    }
    catch (e)
    {
        alert(e);
    }
});

После его работы получается вот что:

1. После того как кликнул на карту:

2. После того как данные сохранились на сервер и были с нова загружены.

Заранее благодарен.

З.Ы.

Почему так же надо менять местами широту и долготу, не могу понять...

Для передачи данных между сервером и скриптом использую скрытые поля. Сервреная технолгия - ASP.NET.

3 комментария
Подписаться на комментарии к посту

Приведите конкретные цифры того, что вы отправляете (alert(point.toString())) и того что вы получаете с сервера alert(point.toString()). 

или посмотрите сгенерированный код страницы.

Почему так же надо менять местами широту и долготу, не могу понять...

Здесь так принято. От перемены мест параметров смысл не меняется :)

 

Для передачи данных между сервером и скриптом использую скрытые поля. Сервреная технолгия - ASP.NET.

var lat = ;  // ????

 

document.getElementById
В одном коде с jQuery смотрится как-то некрасиво

Пардон, как-то не привык что Ctrl+Enter шлет сообщение в браузере :)

Вообщем спасибо за наводку. Дело было в разделителе. Он был запятой и соответственно возвращал целое число после записи.

А вы не могли бы поподробнее рассказать почему все же надо менять местами широту и долготу?

Похоже на потерю точности.

Т.е. смотреть надо не в АПИ, а в серверную часть. Какие значения она получает, что записывает и какие значения потом считывает.