Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Googlemap


Автор: magdelphi 21.12.2007, 19:41
Всем привет!
Протестируйте работу.


Автор: magdelphi 23.12.2007, 14:40
Да, активности немного, это подарок начинающим, разбирайтесь!

Автор: W0LF 24.12.2007, 14:09
а как работает ,сорри, некогда щас смотреть исходники. обрабатывает сервак и шлет клиенту?

Автор: magdelphi 24.12.2007, 22:32
Получение спутниковых снимков земной поверхности заданных координат и масштаба службы google map.

Автор: javastic 26.12.2007, 11:16
magdelphi, ну чтож, спасибо за подарок! Лови +   smile 

Автор: Brodyaga 23.10.2008, 08:50
Всем доброго времени суток! Чтото я не вижу прикреплённой проги к посту? У когонить есть она?
Или ктонить знает где можно достать пример реализации получения карт с сервера Google  через телефон? слышал, что есть какаято Java-библиотека Google Maps... Приветствуются все мысли и высказывания по данной теме!!! smile

Автор: Окунь 23.10.2008, 09:25
У гугла есть Static Maps API, предназначенный специально для мобильных устройств. Это просто набор хттп-запросов для получения куска карты. Отрисовку и логику надо реализовывать вручную: готовой официальной библиотеки в виде jar для j2me нет (зато такая штука есть для проекта OpenStreet, если интересно). Впрочем, ничего сложного сделать это самому. Наверняка на sourceforge можно найти и уже готовую библиотеку.
В принципе, можно в мидлете использовать хттп-запросы из полноценного Google Maps API. В этом случае даже ключ не проверяется и на картинках нет гуглового логотипа.  Но такой способ противоречит лицензии.

Автор: Brodyaga 23.10.2008, 09:36
А использование Static Maps API, чем отличается от использования Google Maps API ? То что на картах логотип гугл? И что за проект OpenStreet ?

Автор: Окунь 23.10.2008, 10:03
Google Maps API - это библиотека на ЯваСкрипт для работы с картой через браузер. Но оттуда можно взять один-два нужных хттп-запроса и использовать в мидлете. Static Maps API - это по-сути и есть те самые "один-два нужных хттп-запроса". С точки зрения программирования эти подходы почти не отличаются. С точки зрения результата - только логотипом.
Насколько я знаю, то, если ты не пишешь собственный браузер с поддержкой ЯваСкрипт, у тебя только один официальный способ работы с гугловыми картами - это Static Maps API.

По поводу опенстрит: http://www.openstreetmap.org/

Автор: Brodyaga 24.10.2008, 08:10
А где можно скачать библиотеку jar OpenStreetMap для j2me и документацию к ней?? а то чтото не могу на их сайте найти?! Подскажите плиз

Автор: Окунь 24.10.2008, 10:03
Сорри, что-то я с опенстрит проглючил. Сам найти не могу. Недавно видел где-то j2me библиотеку. Похоже, она относилась к какому-то другому проекту. В любом случае, в нете подобных библиотек немало.

Автор: Brodyaga 24.10.2008, 10:14
Подобных библиотек это что имеется ввиду? работающих с OpenStreet для j2me? или работающих с GoogleMaps с j2me? покажите хот одну? и бесплатную, а то я только платные нашёл ;)

Автор: Окунь 24.10.2008, 11:49
На скорую руку нашел вот эту статью. Может, будет полезна:
http://wiki.forum.nokia.com/index.php/J2ME_Google_Maps_API#Utility_method_for_map_scrolling

Автор: Brodyaga 5.12.2008, 15:32
Цитата

На скорую руку нашел вот эту статью. Может, будет полезна:
http://wiki.forum.nokia.com/index.php/J2ME...r_map_scrolling


Спасибо, Окунь! Очень даже оказалась полезной!!! ;)

Автор: Brodyaga 9.12.2008, 08:58
На эмуляторе работает, а вот на телефоне чтото не хочет... Какие то байты принимает норм и создаёт из них ихображение, а по каким то не может создать изображение и null возвращает... проверял на нескольких телефонах, везде так... в чём дело не знаете?

Автор: Brodyaga 10.12.2008, 10:26
Может проблема с ключом для гугла?? я ставлю там просто строку "Key_Api" потому как не знаю где получить ключ для использования на мобилах... он для сайтов регистрируется ведь... :(

Автор: Brodyaga 15.12.2008, 09:08
Может быть я не правильно получаю изображения гугла из потока? Делаю это так:
Код

//Функция читает из потока определённое количество байт в массив пока не прочитает нужное количество
public int readCorrectObstinate(byte[] b,int off,int len) throws IOException
{
    //Если массив byte равен null или его длина меньше или равна 0, то возвращаем -1
    if(b==null || b.length<=0)
        return -1;
        
    //Количество прочитанных байт
    int readBytes = 0;
        
    do
    {
      //Скачиваем нужное количество байт в массив b
      readBytes=this.read(b, off, len);
         
      //Увеличиваем стартовую позицию на количество полученных байт
     off+=readBytes;
         
     //Уменьшаем количество байт которое нужно получить на количество полученных байт
     len-=readBytes;
    }
    while(len>0);
        
    //Возвращаем количество скаченных байт
    return readBytes;
}


Этот метод используется для получения байт изображения с гугла, вот здесь:
Код

    httpConnection=(HttpConnection)Connector.open(url);
            
    httpConnection.setRequestMethod(HttpConnection.GET);
        
    int ch;

    TurboDataInputStream turboDataInputStream=new TurboDataInputStream(httpConnection.openInputStream(),observer);
            
    int lenData=(int)httpConnection.getLength();
            
    if(lenData>0)
    {
        byteBuffer=new byte[lenData];
                
        turboDataInputStream.readCorrectObstinate(byteBuffer, 0, lenData);
    }
    else
    {
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
                
        while((ch=inputStream.read())!=-1)
        {
            byteArrayOutputStream.write(ch);
        }
                
        byteBuffer=byteArrayOutputStream.toByteArray();
                
        byteArrayOutputStream.close();
    }


В чём я промахнулся?

Автор: Окунь 18.12.2008, 11:34
Да, нужен ключ. В статик апи он проверяется. На сколько мне известно, подойдет ключ, зарегистрированный для "большого" гугл мэп апи (для сайта).
Пробовал урл (httpConnection=(HttpConnection)Connector.open(URL);) открывать в браузере?
Вполне возможно, что ошибка где-то в другом месте.

Автор: Brodyaga 18.12.2008, 13:27
Цитата

Да, нужен ключ. В статик апи он проверяется. На сколько мне известно, подойдет ключ, зарегистрированный для "большого" гугл мэп апи (для сайта).
Пробовал урл (httpConnection=(HttpConnection)Connector.open(URL);) открывать в браузере?
Вполне возможно, что ошибка где-то в другом месте.


Вот именно, что пробовал! и на эмулятора всё без сбоев работает! А на реальном телефоне сбои постоянно, несколько изображений покажет и всё... далее на отрез отказывается, или может даже второе изображение не показать.. мне кажется ошибка всё-таки в получении в методе readCorrectObstinate, так как байты тех изображений, которые программа отобразить не может, он получает с гугла, а вот запаковать в изображение их не может...

Автор: magdelphi 18.12.2008, 14:18
Выкладываю ещё раз.
Работает без ключей, вся обработка внутри, необходимо добовить zoom.
Пройденые участки сохраняет.

Автор: Окунь 19.12.2008, 12:46
Brodyaga, может потоки не закрываешь? Например, turboDataInputStream.

Автор: F1DEvELoP 27.3.2009, 16:05
Понятно, все работает, зум потом как нить придумаю
а как быть с этим
тут
Код

Image map = gMap.retrieveStaticImage(320, 240, 51.510605, -0.130728, 8, "png32");

я map добавляю на форму, и вижу картинку\

а как быть тут?
Код

double[] lanLng = gMap.geocodeAddress("Leicester Square, London");

просто апендом нельзя добавлять на форму...как быть?

PS у мну есть координаты с привязкой ко всем городам и так далее...мегабайт на 400 БД, но лучше, если вводишь название города латиницей..
БД то не хило весит, что на сервак цеплять....


И еще
Цитата

320, 240, 51.510605, -0.130728, 8, "png32"


(ширина, высота, широта, долгота, масштабирование, формат картинки)

масштабирование, можно установить 0 (самый крупный), только кому нужен глобус???? с материками.
Оптимально - 8
Максимальное увеличение (ставил 17) - показывает 
Больше 17 - пустая картинка (((
Формат картинки ставил png8 - для уменьшения трафика.

можно как опцию добавить счетчик трафика и оценкой стоимости потраченного по тарифам оператора.

----------------------------
Господа, разобрался и со вторым методом

Код

Form mapp = new Form("");
        GoogleMaps gMap = new GoogleMaps("API_KEY");
        try {
            double[] lanLng = gMap.geocodeAddress("kiev");
            //map = gMap.retrieveStaticImage(132, 176, 51.510605, -0.130728, 17, "png8");
            map = gMap.retrieveStaticImage(132, 176, lanLng[0], lanLng[1], 10, "png8");
        } catch (Exception e) { }
       
        mapp.append(map);
        mydisplay.setCurrent(mapp);

Здесь зум=10, потому что нет уточнения, какая улица, а только город, если зум>10 то в ответе пустая картинка
Если уточним запрос, то выясним, что как то маловато данных. нет прорисовки детальной (((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)