Клуб API Карт

UIWebView динамическое изменение координат из Objective-C

Пост в архиве.
sverso
3 апреля 2013, 16:46

Подскажите, как лучше реализовать динамическое изменение координат ( центра карты ) из Objective-C кода

Страница загружается локально из бандла. Для примера я взял готовый пример из песочницы и немного модифицировал.  

 

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="http://api-maps.yandex.ru/2.0/?load=package.standard&lang=ru-RU" type="text/javascript"></script>

        <script type="text/javascript">

            var myMap;

            // Дождёмся загрузки API и готовности DOM.

            ymaps.ready(init);

            function init ()

            {
                // Создание экземпляра карты и его привязка к контейнеру с
                // заданным id ("map").
                myMap = new ymaps.Map('map', {
                                      // При инициализации карты обязательно нужно указать
                                      // её центр и коэффициент масштабирования.
                                      center:[55.76, 37.64], // Москва
                                      zoom:10
                                      });
            }
           function updateLocation(stringFromApp)
            {
                var address=stringFromApp;
                var mapGeoCode = ymaps.geocode(address ,{result:1});
                mapGeoCode.then(
                                function (res)
                                {
                                var coords = res.geoObjects.get(0).geometry.getCoordinates();
                                myMap.setCenter (coords, 10);
                                var myPlaceMark =  new ymaps.Placemark (coords, {},{preset: 'twirl#redIcon' });
                                myMap.geoObjects.add(myPlaceMark);
                                myMap.update();
                               });
            }

           

        </script>
        <style type='text/css'>
            #map {
                width: 100%;
                height:550px;
            }
          </style>
    </head>

    <body style="margin:0px; padding:0px;" >

        <div id="map"></div>
    </body>

</html>

 

 В настоящий момент я пытаюсь передавать координаты после загрузке HTML страницы в методе 

 

-(void)webViewDidFinishLoad:(UIWebView *)webView {
[mapView stringByEvaluatingJavaScriptFromString:@"updateLocation(\"Краснодар\")"];
}

 

 

 

Но никаких изменений на карте не происходит. Вероятно метод DidFinishLoading вызывается еще до момента , когда карта иницаилизировала API. 

Отсюда вопрос: в какой момент необходимо вызывать функции обновления параметров карты ? Как в IOS приложении определить, что все процессы инийиализации и загрузки API закончились ?

Спасибо

2 комментария

А вы не хотит Map Kit использовать? https://github.com/yandexmobile/yandexmapkit-ios

Екатерина , спасибо за ответ !  Я рассматривал в том числе и возможность использования MapKit. Но выбор был сделан в пользу JavaScript API по следующим причинам:

1. Отсуствие в MapKit встроенных механизмов геокодирования. В любом случае необходимо создавать парсер JSon или XML и делать запросы к API яндекса для получения координат из адреса(в БД  приложениясодержится только адрес).

2. Необходимость отрисовки балунов в том числе с размещением внутри текста. В JAvaScript API это уже сделано. 

3. Маловажный фактор , но отсуствет документация на MAPKit API. Хотя в целом все понятно из примера, которые поставляется вместе с API.

 

Задачу я решил. 

Решение оказалось простым . Формирование в рантайме страницы HTML с необхоимыми параметрами. Шаблон страницы берется из бандла приложения. 

В шаблоне меняются значения необходимых параметров и Вуаля )