Все равно, не доходит.
Вот есть авмтомбиль и у меня в базе прибор прислал его широту и долготу (для маркера).
Как используя эту информацию расчитать границы области?
Я например хочу, чтобы карта всегда была размером 400 на 400 пикселей, а в центре ее автомобиль с его широтой и долготой из базы данных.
Получается так?:
Придумать чтобы область всегда была 400 на 400.
Придумать на сервере логику для скачивания картинки с openstreetmap.org с нужной областью 400 на 400.
скачать например 8 соседних тайлов
соответственно получим кусочек 3x3 тайла (768x768 px) приблизительно в центре которого будет точка полученная от авто
из него уже можно вырезать 400x400 если надо
vvoovv, Cloudmade создали создатели OSM. большая часть сервисов предоставляемая ими - свободна
если заметили то mapnik теперь рендерит не раз в неделю а гораздо оперативней (иногда за полчаса-час) - это тоже заслуга Cloudmade.
Говоря, что Cloudmade - коммерческая компания, я имел ввиду, что там разработчикам платят деньги за работу. А в Openstreetmap любой участник имеет полное право в любой момент прекратить работу.
Всем большое спасибо:)
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 имея координаты маркера, я что-то не нахожу.
Хочу чтобы карта была по размеру шириной и высотой примерно как инструмент Zoom по этой ссылке…
это, блин, не константы
это то, что обозначают эти числа
minlon = minimum longitute = долгота левого угла
аналогично lat = широта
мне это казалось очевидным
Пробую, но что-то не совсем получается.
Вот если имеем такие координаты: 50.43122, 30.48855
Вы как посчитаете если, не использовать алгоритм от wildMan?
Перевести координаты в меркаторовские (Google и OSM используют меркаторовскую проекцию)
Зная scale и меркаторовские координаты центра области находим координаты границы области. Разрешение (число меркаторовских координат на пиксел) находится по scale. А размер области в пикселях пропорционален размеру области в меркаторовских координатах
Пересчитываем меркаторовские координаты области обратно в обычные.
функции пересчета в меркатор и обратно на языке 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) {
Большое спасибо! Я использую эту информацию в своем следующем проекте.
Просто этот проект уже практически был готов, когда выяснилось, что страны CНГ плохо у Google реализованы. Поэтому я хотела сдыхаться от этого проекта не большой его переделкой, а погружаться в javascript и OpenLayers займет у меня много времени на изучение.
Я пока обошлась 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: