Говоря, что 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:
Лена, а в какой программе страница просматривается? Спрашиваю, потому что в Internet Explorer Mobile нельзя указать позицию HTML-элемента, поэтому там нельзя сложить карту из отдельных ее элементов. В Internet Explorer Mobile есть и другие ограничения, из-за чего обычные OpenStreetMap и Google Maps не будут работать.
Вы оказались правы. При попытке посмотреть на мобильном телефоне страницу htm с тегом iframe, получила чистую страницу.
Придется изучать титлы. Для облегчения задачи согласна уже на стандартный размер 256х256
А как получить API Key?
Создала акаунт.
На странице Manage Your Account просят ввести:
To get started, please add the URL of the site which you would like to add maps to:
У google в этом случае на странице появлялся сгенерированный ключ…
P.S.
Заметила в самом верху странице Domain URL is invalid
Этот адрес мне выделил сис.админ и на нем крутится мое сетевое приложение и регистрация у google не имела проблем и карты google все работают и грузятся. Что не так?
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