создание своего OSM-сервера, как прокси

Данные и так хранятся в PostgreSQL. PostGIS - это расширение PostgreSQL, дополняющее его такими типами данных как геометрия и большим количеством функций для работы с ним. Именно этот функционал и используется рендерами. Говоря о базе данных postgis речь идёт о базе данных postgresql с установленным расширением postgis.

Интересно ,что даёт переход на использование мапника версии 2 , пока только много косяков :slight_smile:

Косяков переход на mapnik2 не даёт вообще, если руки не кривые и всё сделано по инструкции.
А плюшек добавляется множество, взять хотя бы Германовские надписи. Если их не использовать - не меняется ровным счётом ничего.

“Германовские надписи” - это что за зверь такой, можно взглянуть? :slight_smile:

Что ж вы газеты-то не читаете? :slight_smile:
http://shtosm.ru/2011/09/28/1/
http://shtosm.ru/2011/09/08/1/

До обеда? Советских? :slight_smile:
Спасибо, понял

Ага, спасибо. Разобрался, залил базу, запустил мапник, написали, что нужно поднять собственный tilecache-сервер. Запустил - вроде квадратики показывает…

Теперь как-то это дело надо прикрутить к рельсам, чтобы они показывали не интернетный мапник, а локальный.
Или всё-таки я зря поставил tilecache?

Он вроде просто в jawa-скриптах openlayers локального osm-сервера прописывается и все.

Попытался “в лоб добавить”, через fgrep, там где cyclemap есть - не пошло. Начал рыть документацию. Конкретно про rails + tilecache - ничего нет. Килограммы документации по Openlayers - много описаний про добавление на свою html-страничку, про какой-то turbogears и очень много не о том…

Голова уже кругом идёт…

Товарищи, может ли кто тыкнуть в “ман” чтобы было описано как прописать TileCache сервер, в OpenLayers в rails-порте?

В ман не ткну, ткну в js :slight_smile:

Я заменял в этих файлах

  1. …/public/openlayers/OpenLayers.js
  2. …/public/openlayers/OpenSreetMap.js

поиском нашел адрес мапника и заменил на свой

Хм, сделал как вы говорите - не получилось. Может быть надо что-то перекомпилировать после изменений в js?

Сам же я до этого добавил новый слой по аналогии с CycleMap, добавлял везде где нашёл:
public/javascripts/map.js
public/export/embed.html
public/openlayers/OpenStreetMap.js

Кстати, в …/public/openlayers/OpenLayers.js и менять особо нечего.

Как раз там и нужно, у меня в строке 1009


... sphericalMercator:true,url:'http://geo.local.s-s-s.ru/${z}/${x}/${y}.png',clone:function(obj){if(obj==null){obj=new OpenLayers.Layer.OSM(this.name,this.url,this.getOptions());}

в OpenStreetMap.js


    /**
     * Constructor: OpenLayers.Layer.OSM.Mapnik
     *
     * Parameters:
     * name - {String}
     * options - {Object} Hashtable of extra options to tag onto the layer
     */
    initialize: function(name, options) {
        var url = [
            "http://geo.local.s-s-s.ru/${z}/${x}/${y}.png"
/*
*            "http://a.tile.openstreetmap.org/${z}/${x}/${y}.png",
*            "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png",
*            "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png"
*/

Я ничего не перекомпилировал, изменения вступают сразу

Неясно, для чего исправлять родные классы, если есть Layer.XYZ, например:

    var tah = new OpenLayers.Layer.XYZ(
        "Osmarender",
        "http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png",
        {
            numZoomLevels: 18,
            sphericalMercator: true
        }
    );

    var osmde = new OpenLayers.Layer.XYZ(
        "OpenStreetMap.de",
        "http://tile.openstreetmap.de/tiles/osmde/${z}/${x}/${y}.png",
        {
            numZoomLevels: 18,
            sphericalMercator: true
        }
    );

Т.е. в public/openlayers/OpenLayers.js (там вообще какая-то каша) ничего править не надо, а нужно добавить создание своего layer-а, вот только куда?
Нарисовал в OpenStreetMap.js, как вы показали - не работает, т.е. нового layer-а с именем “OpenStreetMap.de” в меню не появилось…

map.addLayers([osmde, tah]);

Дак куда добавлять?
Добавил в rails/public/openlayers/OpenStreetMap.js в конец файла следующее:

var osmde = new OpenLayers.Layer.XYZ(
OpenStreetMap.de”,
http://tile.openstreetmap.de/tiles/osmde/${z}/${x}/${y}.png”,
{
numZoomLevels: 18,
sphericalMercator: true
}
);

map.addLayers([osmde]);

Запустил сервер rails - нового слоя “OpenStreetMap.de” не появилось.

Что я делаю не так?

П.С. Вся документация по OpenLayers говорит о том, как добавить js-код на свою html-страничку, чтобы показывать карту, про связку rails+openlayers так и не нашёл :frowning:

Сделал как вы написали (поправил и в OpenLayers.js) работает так же как и до внесения изменений в OpenLayers.js. С изменениями в OpenLayers.js и без изменений в OpenLayers.js - только лишь с правкой url в OpenStreetMap.js на слое Mapnik отображает нагенерированные мной тайлы, но вот в таком виде:

и вот так, если поближе:

Хотя в генераторе тайлов (mapnik) прописано генерировать весь мир mapnik/generate_tiles.py:
bbox = (-180.0,-90.0, 180.0,90.0)

А по факту получается сгенерировало только америку - сгенерировало только на основе данных линии моря и рек (взятых из world_boundaries). А Россию, которая и есть в базе - не показывает, хотя если подбирать координаты через tilecache, то Россия есть:

Может быть дело в проекции или Что-то другое?

  1. тайлы надо генерировать в EPSG:3857, а не EPSG:4326;
  2. схема нумерации тайлов - не TMS, а Google.

Разумеется, не надо пихать куда попало, необходимо иметь элементарное программистское предсталение о происходящем.

//
    map = new OpenLayers.Map('map', options);

    var mapnik = new OpenLayers.Layer.OSM();
    map.addLayers([mapnik]);

    var tah = new OpenLayers.Layer.XYZ(
        "Osmarender",
        "http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png",
        {
            numZoomLevels: 18,
            sphericalMercator: true
        }
    );

    var osmde = new OpenLayers.Layer.XYZ(
        "OpenStreetMap.de",
        "http://tile.openstreetmap.de/tiles/osmde/${z}/${x}/${y}.png",
        {
            numZoomLevels: 18,
            sphericalMercator: true
        }
    );

    map.addLayers([osmde, tah]);

Море примеров есть тут: http://openlayers.org/dev/examples/

Ну так, что “это дело” теперь отображается вместо мапника ОСМ, я правильно понял?

Т.е. теперь нужно разобраться что и как нагенерил мапник 2.0 (видимо там не только в шрифтах разница :slight_smile: )