Отображение авторских прав на карты в API GMaps V3
В настоящее время я переношу приложение из GMaps V2 в V3. Поскольку я использую OSM и другие слои, отличные от Google, я хочу сохранить уведомление об авторских правах в правом нижнем углу. Но справочная документация не дает никаких намеков на это. В V2 авторское право даже имело свой собственный класс GCopyrightCollection
и было передано GTileLayer
. Игровая площадка Google Code также не является примером для V3.
Кто-нибудь знает, как это сделать в новом API?
Ответы
Ответ 1
Список рассылки помог мне в этом вопросе (см. thread). Существует образец кода в Google Code для коллекций авторских коллекций и как отобразить их в правом нижнем углу карты DIV.
Как есть проблема с компоновкой пользовательского DIV в нижнем правом углу (только при перетаскивании карты только в правильное положение, проблема самого API GMaps), теперь я показываю его в левом нижнем углу. ( ОБНОВЛЕНИЕ: Проблема кажется исправленной в API!)
Следующий код работает как ожидалось (конечно, я не использую глобальные переменные, удаленный this.
для ясности):
copyrightDiv = document.createElement("div")
copyrightDiv.id = "map-copyright"
copyrightDiv.style.fontSize = "11px"
copyrightDiv.style.fontFamily = "Arial, sans-serif"
copyrightDiv.style.margin = "0 2px 2px 0"
copyrightDiv.style.whiteSpace = "nowrap"
map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(copyrightDiv)
copyrights = {}
copyrights["OSM"] = "<a target=\"_blank\" href=\"http://www.openstreetmap.org/\">OpenStreetMap</a>"
copyrights["Osmarender"] = copyrights["OSM"]
copyrights["Cloudmade"] = "<a target=\"_blank\" href=\"http://cloudmade.com/\">CloudMade</a> - Map data <a target=\"_blank\" href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CCBYSA</a>"
copyrights["Cloudmade-Fine"] = copyrights["Cloudmade"]
function onMapTypeIdChanged()
{
newMapType = map.getMapTypeId()
copyrightDiv = document.getElementById("map-copyright")
if(newMapType in copyrights)
copyrightDiv.innerHTML = copyrights[newMapType]
else
copyrightDiv.innerHTML = ""
}
google.maps.event.addListener(map, "maptypeid_changed", onMapTypeIdChanged)
// Call once so that the correct copyright notice is set for
// the initially selected map type
setTimeout(onMapTypeIdChanged, 50)
Ответ 2
Решение AndiDog сильно вдохновило меня. Но есть некоторые недостатки - авторское право, построенное таким образом, не имеет такой приятной полупрозрачности стандартного авторского права google. Было бы очень сложно сконструировать его для поддержки всех браузеров и т.д., Поэтому я использую другую стратегию - найдите текст "Условия использования" в DOM и поместите свой текст авторского права перед ним в div, созданный Google. Кроме того, я улучшил функцию до для пользовательских логотипов, как в мой вопрос здесь:
function gmaps3_copyright(map, copyrights, logos)
{
var copyrightDiv, logoDiv;
var google_div__span_created = 0;
logoDiv = document.createElement("div");
logoDiv.index = 0; // used for ordering
map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(logoDiv);
function onMapTypeIdChanged()
{
newMapType = map.getMapTypeId()
if (!google_div__span_created) { // hack into google div - prefered solution
copyrightDiv = document.createElement("span");
$(copyrightDiv).insertBefore(
$('#mainMap :contains("Terms of Use")')
.filter(function() { return $(this).children().length < 1 })
);
google_div__span_created = 1;
}
if (newMapType in copyrights)
copyrightDiv.innerHTML = copyrights[newMapType] + ' - '
else
copyrightDiv.innerHTML = ""
if (newMapType in logos)
logoDiv.innerHTML = logos[newMapType]
else
logoDiv.innerHTML = ""
}
google.maps.event.addListener(map, "maptypeid_changed", onMapTypeIdChanged);
// Call once so that the correct copyright notice is set for
// the initially selected map type
// but wait until the complete html markup is loaded
google.maps.event.addListener(map, 'tilesloaded', function () {
setTimeout(onMapTypeIdChanged, 50);
// still add some timeout to be 100% sure
})
}
просто назовите его следующим образом:
gmaps3_copyright(map,
{
'OSM': '© <a href="#" onclick="location.href='http://www.openstreetmap.org/'; return false;" target="_blank">OpenStreetMap</a> contributors, <a href="#" onclick="location.href='http://creativecommons.org/licenses/by-sa/2.0/'; return false;" target="_blank">CC-BY-SA</a>',
'Cloudmade' : "<a target=\"_blank\" href=\"http://cloudmade.com/\">CloudMade</a> - Map data <a target=\"_blank\" href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CCBYSA</a>"
},
{
'OSM': // logo html code here
}
)
Вам может потребоваться изменить строку "Условия использования" для вашей локализации.