Ответ 1
Похоже, вы хорошо описали варианты:
Если вы хотите работать с локальными данными без привлечения общедоступного веб-сервера, вам нужно будет использовать подход на основе 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
Теперь либо поставьте переключатель в код, либо комментируйте/раскомментируйте, либо используйте конструкцию script для переключения или какой бы то ни было ваш текущий процесс для переключения между 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, командная строка script для загрузки вашего нового файла KML и т.д.), большинство из которых требуют, чтобы вы делали что-то вручную, прежде чем загружать свою карту, вы можете подумать о создании обновления на страницу, которую вы загружаете. В зависимости от платформы, которую вы используете, это может быть проще сделать на внутреннем или внешнем интерфейсе; ключ был бы иметь script на вашем общедоступном сервере, который позволит обновлять KML:
- Получить строку KML из запроса. POST
- Подтвердите строку 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, созданных на локальном хостинге, без необходимости выполнять отдельный ручной шаг при каждой перезагрузке страницы.