Похоже, вы довольно хорошо обрисовали варианты:
Если вы хотите работать с локальными данными, без привлечения общедоступного веб-сервера , вам потребуется использовать подход на основе javascript для анализа KML и загрузки его на карту. Хотя это не будет полностью повторять функциональность Google, вероятно, этого будет достаточно для первоначальной разработки, если вы заботитесь только о отображении функций KML. В этом случае я бы, вероятно, настроил класс-заглушку, например:
// I'll assume you have a global namespace called MyProject
MyProject.LOCAL_KML = true;
MyProject.KmlLayer = function(url) {
// parse the KML, maybe caching an array of markers or polygons,
// using one of the libraries you list in your question
};
// now stub out the methods you care about, based on
// http://code.google.com/apis/maps/documentation/javascript/reference.html#KmlLayer
MyProject.KmlLayer.prototype.setMap = function(map) {
// add the markers and polygons to the map, or remove them if !map
}
// etc
Теперь либо вставьте переключатель в код, либо оставьте комментарий / раскомментируйте, либо используйте сценарий сборки для переключения, либо используйте текущий процесс для переключения между dev и рабочим кодом:
var kmlPath = "/my.kml";
var kmlLayer = MyProject.LOCAL_KML ?
new MyProject.KmlLayer(MyProject.LOCAL_KML_HOST + kmlPath) :
new google.maps.KmlLayer(MyProject.PRODUCTION_KML_HOST + kmlPath);
kmlLayer.setMap(myMap);
Если, с другой стороны, вам нужны все функции в Google KmlLayer
, или вы хотите убедиться, что все работает с настройкой производства, или вы не хотите беспокоиться Если вы отключите функции, предоставляемые Google, вам нужно будет загрузить их на общедоступный сервер, чтобы Google мог выполнять обработку на стороне сервера.
Помимо очевидных опций (FTP, сценарий командной строки для загрузки нового KML-файла и т. Д.), Для большинства из которых требуется выполнить какие-либо действия вручную перед загрузкой страницы карты, вы можете рассмотреть возможность встраивания обновления в страница, которую вы загружаете. В зависимости от используемой платформы, это может быть проще сделать на серверной или интерфейсной части; ключом будет иметь скрипт на вашем общедоступном сервере, который позволит обновлять KML:
- Получить строку KML из запроса. ПОЧТА
- Проверка строки KML (просто чтобы вы не открывали свой сервер для атак)
- Запись в один файл, например, "My.kml"
Затем при просмотре страницы карты обновите удаленный KML на основе данных из localhost
. Вот версия на стороне клиента, использующая jQuery:
// again, you'd probably have a way to kill this block in production
if (MyProject.UPDATE_KML_FROM_LOCALHOST) {
// get localhost KML
$.get(MyProject.LOCAL_KML_HOST + kmlPath, function(data) {
// now post it to the remote server
$.post(
MyProject.DEV_KML_HOST + '/update_kml.php',
{ kml: data },
function() {
// after the post completes, get the KML layer from Google
var kmlLayer new google.maps.KmlLayer(MyProject.DEV_KML_HOST + kmlPath);
kmlLayer.setMap(myMap);
}
);
})
}
По общему признанию, здесь есть много обходов (страница -> локальный хост, страница -> удаленный сервер, Google -> удаленный сервер, Google -> страница), так что это будет медленно . Но это позволит вам правильно отображать в коде Google динамические данные KML, созданные на локальном хосте, без необходимости выполнять отдельный шаг вручную при каждой перезагрузке страницы.