Cтатические карты

Всем большое спасибо:)
1.Прежде чем пробывать с титлами (я уже согласна и на размер 256 на 256), меня бы уже очень устроила просто такая ссылка на моей странице:
http://www.openstreetmap.org/export/embed.html?bbox=30.4213,50.3783,30.6121,50.4883&layer=mapnik&marker=50.43122,30.48855
тут и маркер готовый. Цифры я бы программно добавляла.
Только размер карты конечно не подходит.
Подскажите, пожалуйста, формулу как правильно посчитать bbox имея координаты маркера, я что-то не нахожу.:frowning:
Хочу чтобы карта была по размеру шириной и высотой примерно как инструмент Zoom по этой ссылке…

2.Второй путь это конечно так: http://developers.cloudmade.com/projects/tiles/examples/2
но там придется программно маркер добовлять и мне придется тот код переписывать на С++.

Мне первый вариант хочется реализовать. Я так поняла, что в этом варианте загвоздка только в расчете bbox.

bbox = minlon,minlat,maxlon,maxlat

josm считает так:

double size = 180.0 / Math.pow(2, ZOOM); 
b = new Bounds( new LatLon(LAT - size/2, LON - size), new LatLon(LAT + size/2, LON + size) );

как я понимаю пишите на javame ?
если так то есть http://developers.cloudmade.com/projects/show/j2me-lib

Нет пишу на этом: http://www.atozed.com/IntraWeb/index.en.aspx
для Google карты все получилось и довольно просто, а вот OpenStreetMap ну никак не могу победить.:slight_smile:

Как применить эти константы?
Так не выходит:
http://www.openstreetmap.org/export/embed.html?bbox=minlon,minlat,maxlon,maxlat&layer=mapnik&marker=50.43122,30.48855

это, блин, не константы :laughing:
это то, что обозначают эти числа
minlon = minimum longitute = долгота левого угла
аналогично lat = широта
мне это казалось очевидным

Все что у меня есть, это широта и долгота автомобиля в базе данных для установки маркера. Откуда мне знать долготу, например левого угла?

Код от wildMan пока я не могу применить.

Я хочу получить карту по размеру примерно такую как тут:

а в чём проблема их посчитать в зависимости от положения маркера??

Пробую, но что-то не совсем получается.:frowning:
Вот если имеем такие координаты: 50.43122, 30.48855
Вы как посчитаете если, не использовать алгоритм от wildMan?

bbox = 30.48855-dlon,50.43122-dlat,30.48855+dlon,50.43122+dlat
dlon и dlat - хоть константами прописать

Какие вы задаете значения для dlon и dlat? Я пробывала разные цифры - меняется только масштаб карты а не ее размер.:frowning:

ну размер-то уже не от адреса зависит, а от области отображения

можно вот так, например:

iframe это конечно выход из положения. Я его применяю в классическом web интрефейсе, но для wap интерфейса в билиотеке нет возможности добавить iframe :frowning:

Вроде нашла возможность через iframe…

Все таки какие оптимальные значения вы бы поставили для этих констант?

Лена, формала актуальна еще?

Алгоритм такой:

  1. Перевести координаты в меркаторовские (Google и OSM используют меркаторовскую проекцию)
  2. Зная scale и меркаторовские координаты центра области находим координаты границы области. Разрешение (число меркаторовских координат на пиксел) находится по scale. А размер области в пикселях пропорционален размеру области в меркаторовских координатах
  3. Пересчитываем меркаторовские координаты области обратно в обычные.

функции пересчета в меркатор и обратно на языке Javascript:

lonlatToMercator: function(lon, lat) {
    var x = lon * 20037508.34 / 180;
    var y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180);

    y = y * 20037508.34 / 180;
    
    return new OpenLayers.LonLat(x, y);
}


mercatorToLonLat: function(x, y) {

    var lon = (x / 20037508.34) * 180;
    var lat = (y / 20037508.34) * 180;

    lat = 180/Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);
    
    return new OpenLayers.LonLat(lon, lat);
}

Разрешение рассычитывается по масштабу (тот самый параметр scale в ссылке, которую я приводил) так:
getResolutionFromScale = function (scale) {

var normScale = (scale > 1.0) ? (1.0 / scale) : scale;

var resolution = 1 / (normScale * 39.3701* 72);
return resolution;

};

Большое спасибо! Я использую эту информацию в своем следующем проекте.
Просто этот проект уже практически был готов, когда выяснилось, что страны CНГ плохо у Google реализованы. Поэтому я хотела сдыхаться от этого проекта не большой его переделкой, а погружаться в javascript и OpenLayers займет у меня много времени на изучение.:slight_smile:

Я пока обошлась iframe-ом. Координаты формирую так как советовали:

double one = StrToFloat(IWEditWAP1->Text) - 0.02;//первый параметр для bbox
double two = StrToFloat(IWEditWAP2->Text) - 0.02;//второй параметр
double thr = StrToFloat(IWEditWAP1->Text) + 0.02;//третий параметр
double fro = StrToFloat(IWEditWAP2->Text) + 0.02;//четвертый

IWEditWAP1->Text и IWEditWAP2->Text координаты из базы данных типа 50.886, 30.4466
Затем все это засовываю в iframe:

Лена, а в какой программе страница просматривается? Спрашиваю, потому что в Internet Explorer Mobile нельзя указать позицию HTML-элемента, поэтому там нельзя сложить карту из отдельных ее элементов. В Internet Explorer Mobile есть и другие ограничения, из-за чего обычные OpenStreetMap и Google Maps не будут работать.

Вы оказались правы. При попытке посмотреть на мобильном телефоне страницу htm с тегом iframe, получила чистую страницу.:frowning:
Придется изучать титлы. Для облегчения задачи согласна уже на стандартный размер 256х256 :slight_smile:

А как получить API Key?
Создала акаунт.
На странице Manage Your Account просят ввести:
To get started, please add the URL of the site which you would like to add maps to:

Ввожу: *http://195.69.86.18 *
Жму регистрировать - ничего не происходит.

У google в этом случае на странице появлялся сгенерированный ключ…

P.S.
Заметила в самом верху странице Domain URL is invalid
Этот адрес мне выделил сис.админ и на нем крутится мое сетевое приложение и регистрация у google не имела проблем и карты google все работают и грузятся. Что не так?
:frowning:

P.S.
Вообщем заказала у сис.админа буквенню Domain URL, обещал сделать…

Для работы с титлами мне нужен этот код
n = 2 ^ zoom
lon_deg = xtile / n * 360.0 - 180.0
lat_rad = arctan(sinh( Pi * (1 - 2 * ytile / n)))
lat_deg = lat_rad * 180.0 / Pi
Отсюда: http://developers.cloudmade.com/projects/tiles/examples/2

Подскажите, а какой должен быть zoom, чтобы картинку получить как здесь:
http://developers.cloudmade.com/projects/tiles/documents

Кстати, в wiki нашёл ещё такую штуку:
http://osm-tah-cache.firefishy.com/~ojw/MapOf/?lat=54&long=45&z=7&w=144&h=144&format=png
– даёт сразу в нужном разрешении и масштабе… Вот только с маркером опять проблема…