Shape file + Mapserver + OpenLayers

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Shape file + Mapserver + OpenLayers

Сообщение xen87 » 10 май 2014, 13:22

Здравствуйте, уважаемые пользователи форума!
Подскажите пожалуйста решение: необходимо отобразить ряд шейп-файлов на подложке из ОпенСтритМап.
На Гис-лабе много статей, посвященных и Mapserver и OpenLayers (большое спасибо авторам), но прочитав их и поэксперимент над .map и .html - к решению я так и не приблизился. Вот что у меня получилось:
.map file:

Код: Выделить всё

MAP
  NAME        "mapserver_tutorial_wms_server"
  IMAGETYPE   PNG
  EXTENT      139.72520 35.67139 139.78845 35.70731       
  SIZE        550 450

  IMAGECOLOR  255 255 255
  SHAPEPATH   "../data"

  FONTSET     ../fonts/fonts.txt

  UNITS dd

  WEB	
    TEMPLATE  'example_template.html'
    IMAGEPATH "C:\OSGeo4W/tmp/ms_tmp/"
    IMAGEURL "/ms_tmp/"
    MINSCALEDENOM  1000
    MAXSCALEDENOM  70000
    METADATA
      "wms_title"          "MapServer Tutorial WMS Server"
      "wms_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:\OSGeo4W/apps/mapserver-tutorial/example12.map"
      "wms_srs"            "EPSG:4301 EPSG:4269 EPSG:4326"
      "wms_abstract"       "This demonstration server shows how to setup a MapServer .map file to serve data through the WMS standard."
    END    
  END
  
  PROJECTION
    "init=epsg:4326"
  END  


  LAYER 
    NAME "places"
    METADATA
    "wms_title"    "Place name"
    END     
    DATA chimei_epsg_4326 
    STATUS ON
    TYPE POINT
    LABELITEM "NAMAE"
    CLASS
      NAME "Places"
      STYLE
        COLOR 10 100 100
      END
      LABEL
        TYPE TRUETYPE
        FONT pgothic
        COLOR 220 20 20
        SIZE 7
        POSITION CL
        PARTIALS FALSE
        BUFFER 5
        ENCODING "SHIFT_JIS"                              
      END
    END
    PROJECTION
      "init=epsg:4326"
    END    
  END 

END 
.html file:

Код: Выделить всё

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
    <link rel="stylesheet" href="style.css" type="text/css" />
    <style type="text/css">
        #map {
         width: 800px;
            height: 500px;
            border: 1px solid black;
        }
    </style>
    <script src="OpenLayers.js"></script>
    <script type="text/javascript">
        var lon = 139.72520;
        var lat = 35.67139;
        var zoom = 11;
        var map, layer, localWMS ;
        function init(){
            map = new OpenLayers.Map( 'map');
            layer = new OpenLayers.Layer.OSM( "Simple OSM Map");
            
            localWMS = new OpenLayers.Layer.WMS( "Local WMS layers",
			          "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:/OSGeo4W/apps/mapserver-tutorial/example12/example_4326.map",
			          {layers: 'mapserver_tutorial_wms_server', transparent: true}, {isBaseLayer: false});

            
            map.addLayer(layer);
            map.setCenter(
                new OpenLayers.LonLat(lon, lat).transform(
                    new OpenLayers.Projection("EPSG:4326"),
                    map.getProjectionObject()
                ), zoom
            );    
        }
    </script>
  </head>
  <body onload="init()">
    <h1 id="title">OpenLayers Example</h1>

    <div id="tags">
    </div>
    <p id="shortdesc">
        Shows the basic use of OpenLayers with our local WMS layers and a GeoGrid WMS layer.
    </p>

    <div id="map" class="smallmap"></div>

    <div id="docs">
        OpenLayers is a JavaScript file (OpenLayers.js) that can be easily included in any HTML file.<br>Click on the source
        below to see the few lines required to add these 2 WMS servers into the map.<br>
          <br>
          <hr noshade width="40%" size="1" align="left">
          <a href="/mapserver-tutorial/example14/openlayers_source.html">- (source) -</a>&nbsp;&nbsp;
          <a href="/mapserver-tutorial/index.html">- (back) -</a>
    </div>
  </body>
</html>
В итоге: слой "layer" - в браузере выводиться (т.е. подложка ОСМ), а слой: "localWMS" - в браузере не выводиться (т.е. слой с шейп-файлом).
Шейп перепроицировал epsg : 4326, экстент и охват вроде настроены верно.
Видимо не верно составлен .map файл или я не верно к нему обращаюсь в .html
Подскажите пожалуйста, третий день бьюсь.
Последний раз редактировалось xen87 19 май 2014, 20:47, всего редактировалось 1 раз.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Shape file + Mapserver + OpenLayers

Сообщение Denis Rykov » 10 май 2014, 14:42

Ваш WMS сервис не поддерживает проекцию 3857 (проекция ОСМ).

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 10 май 2014, 16:09

Ваш WMS сервис не поддерживает проекцию 3857 (проекция ОСМ).
Денис, правильно ли я Вас понял:

Код: Выделить всё

"wms_srs"            "EPSG:4301 EPSG:4269 EPSG:4326 EPSG:3857 "
?
К сожалению, вывести на экран мой шейп-файл так и не получается (((

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Shape file + Mapserver + OpenLayers

Сообщение Denis Rykov » 10 май 2014, 21:27

Да, правильно. Не вижу у вас в коде OL где вы добавляете слой WMS на карту.

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 10 май 2014, 23:26

Не вижу у вас в коде OL где вы добавляете слой WMS на карту.
- да, действительно.
Если добавить так:

Код: Выделить всё

map.addLayer([layer, localWMS]);
- ничего не выводиться (белое окно).
Но если добавить так:

Код: Выделить всё

map.addLayer(localWMS);
map.addLayer(layer);
- выводиться слой ОСМ в нужной области (Токио), но слой с шейп-файлом не выводиться. Путаница с проекциями?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Shape file + Mapserver + OpenLayers

Сообщение Denis Rykov » 11 май 2014, 07:33

Для добавления списка слоёв используется метод addLayers, а не addLayer. А WMS-то у вас рабочий? Проверьте в какой-нибудь настольной ГИС (QGIS, например).
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 11 май 2014, 12:09

Для добавления списка слоёв используется метод addLayers, а не addLayer.
- спасибо, +1.
А WMS-то у вас рабочий? Проверьте в какой-нибудь настольной ГИС (QGIS, например).
- Попробовал подключиться к WMS с помощью КуГИС2.2 - http://gis-lab.info/qa/qgis-wms-wfs.html.

Код: Выделить всё

Название - Local WMS layers
Адрес - http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:/OSGeo4W/apps/mapserver-tutorial/example12/example_4326.map
Подключить - подключился, слой добавил, но во вьювере слой не отобразился ((( Пусто.

Также попытался подключиться к рабочему WMS-слою (данный слой взять из работающего примера и отображается в ГУгл Хроме), результат аналогичный - пустой вьювер (((
Приложу вариант "относительно рабочего" .map-файла, который в обозревателе отображается, а в КуГИС нет (((

Код: Выделить всё

MAP
  NAME        "mapserver_tutorial_wms_server"
  IMAGETYPE   PNG
  EXTENT      139.72520 35.67139 139.78845 35.70731       
  SIZE        550 450

  IMAGECOLOR  255 255 255
  SHAPEPATH   "../data"

  FONTSET     ../fonts/fonts.txt

  UNITS dd

  WEB	
    TEMPLATE  'example_template.html'
    IMAGEPATH "C:\OSGeo4W/tmp/ms_tmp/"
    IMAGEURL "/ms_tmp/"
    MINSCALEDENOM  1000
    MAXSCALEDENOM  70000
    METADATA
      "wms_title"          "MapServer Tutorial WMS Server"
      "wms_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:\OSGeo4W/apps/mapserver-tutorial/example12.map"
      "wms_srs"            "EPSG:4301 EPSG:4269 EPSG:4326 EPSG:3857"
      "wms_abstract"      "This demonstration server shows how to setup a MapServer .map file to serve data through the WMS standard."
    END    
  END
  
  PROJECTION
    "init=epsg:4301"
  END  

  LAYER 
    NAME "roads"
    METADATA
    "wms_title"    "Roads"
    END  
    DATA dourokukan
    STATUS ON
    TYPE LINE
    MAXSCALEDENOM 50000
    CLASS
      NAME "roads"
      STYLE
        COLOR 187 187 127
      END
    END
    PROJECTION
      "init=epsg:4301"
    END      
  END 

  LAYER 
    NAME "administrative"
    METADATA
    "wms_title"    "Administrative"
    END     
    DATA gyouseikai
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Administrative"
      STYLE
        COLOR 227 127 227
      END
    END
    PROJECTION
      "init=epsg:4301"
    END    
  END 

  LAYER 
    NAME "rail"
    METADATA
    "wms_title"    "Rail"
    END     
    DATA tetsudokukan
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Rail"
      STYLE
        COLOR 128 128 128
      END
    END
    PROJECTION
      "init=epsg:4301"
    END    
  END 

  LAYER 
    NAME "rivers"
    METADATA
    "wms_title"    "Rivers"
    END     
    DATA kasenkukan
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Rivers"
      STYLE
        COLOR 0 255 255
      END
    END
    PROJECTION
      "init=epsg:4301"
    END    
  END 

  LAYER 
    NAME "water"
    METADATA
    "wms_title"    "Water"
    END     
    DATA suiikikai
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Water"
      STYLE
        COLOR 0 0 255
      END
    END
    PROJECTION
      "init=epsg:4301"
    END    
  END 

  LAYER 
    NAME "places"
    METADATA
    "wms_title"    "Place name"
    END     
    DATA chimei 
    STATUS ON
    TYPE POINT
    LABELITEM "NAMAE"
    CLASS
      NAME "Places"
      STYLE
        COLOR 10 100 100
      END
      LABEL
        TYPE TRUETYPE
        FONT pgothic
        COLOR 220 20 20
        SIZE 7
        POSITION CL
        PARTIALS FALSE
        BUFFER 5
        ENCODING "SHIFT_JIS"                              
      END
    END
    PROJECTION
      "init=epsg:4301"
    END    
  END 

END 

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Shape file + Mapserver + OpenLayers

Сообщение Denis Rykov » 12 май 2014, 08:48

Если у вас не отображается слой WMS в OpenLayers - откройте консоль и посмотрите какие запросы уходят к WMS серверу, скопируйте URL и откройте его руками в браузере - если все ок, то должна быть либо картинка, либо пустая картинка, в противном случае сообщение об ошибке (предложит сохранить как xml файл). Покажите здесь URL вашего WMS запроса.
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 12 май 2014, 10:31

Здравствуйте, Денис!
Я заметил такую вещь, если пишу так:
Случай 1.

Код: Выделить всё

map.addLayers([layer,localWMS]);
- то отображается только layer (слой ОСМ)
если пишу так:
Случай 2.

Код: Выделить всё

map.addLayer(localWMS);
- то отображается слой-ВМС.
Для второго случая запрос УРЛ:

Код: Выделить всё

http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:/OSGeo4W/apps/mapserver-tutorial/example12/example.map&LAYERS=mapserver_tutorial_wms_server&TRANSPARENT=true&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&FORMAT=image%2Fpng&SRS=EPSG%3A4326&BBOX=139.74609375,35.68359375,139.7900390625,35.7275390625&WIDTH=256&HEIGHT=256
По данному адресу выводиться картинка (тайл) с шейп-файлом.
А для случая 1, я так и не разобрался, даже не нашел УРЛ адрес ((( Просто отображается пустое белое окно (при включении вкладки - localWMS) (((

П.С. в начальный html-файл я добавил:

Код: Выделить всё

map.addControl( new OpenLayers.Control.LayerSwitcher() );
, чтоб переключаться между слоями.
Последний раз редактировалось xen87 12 май 2014, 10:36, всего редактировалось 1 раз.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Shape file + Mapserver + OpenLayers

Сообщение Denis Rykov » 12 май 2014, 10:36

Вот вам рабочий пример подключения WMS и OSM:

Код: Выделить всё

<html>
    <head>
        <title>My Map</title>
        <script src="http://openlayers.org/dev/OpenLayers.js"></script>
        <script>
            function init() {
                var options = {
                    div: "mapid",
                    projection: "EPSG:3857"
                };

                var map = new OpenLayers.Map(options);
                var osm = new OpenLayers.Layer.OSM()
                var imagery = new OpenLayers.Layer.WMS(
                    "Sattelite Image of St. Petersburg",
                    "http://10.22.0.9/cgi-bin/wms",
                    {layers: "sattelite_image", transparent: true},
                    {isBaseLayer: false, opacity: 0.9}
                );
                var extent = [3322236.017526,8366084.2704585,3418852.421265,8395053.9041745];
                map.addLayers([osm, imagery]);
                map.zoomToExtent(extent);
            }
        </script>
    </head>
    <body>
        <body onload="init()">
        <div id="mapid" style="width:100%; height:100%"></div>
    </body>
</html>
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 12 май 2014, 10:47

Вот вам рабочий пример подключения WMS и OSM:
- большое спасибо!
В качестве уточнения, в вашем примере слой из которого генерится WMS-слой, в какой EPSG?
Т.е. должен ли шейп-файл иметь ту же проекцию, что и слой OSM?
Спасибо.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Shape file + Mapserver + OpenLayers

Сообщение Denis Rykov » 12 май 2014, 10:56

Нет, данные могут быть в любой проекции, требуемая проекция указывается в параметрах WMS-запроса и если WMS сконфигурирован с поддержкой данной проекции, то он автоматом перепроецирует данные, вот почитайте.
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 12 май 2014, 14:26

Извините, но проблему пока не решил ((( Грешу на путаницу с проекциями (((
Правильно ли я понял, что в строке:

Код: Выделить всё

PROJECTION
    "init=epsg:4326"
  END
- указываем проекцию выходной карты (output PROJECTION)?
А в строке

Код: Выделить всё

LAYER 
    ...
    PROJECTION
      "init=epsg:4612"
    END      
...
  END 
- указываем проекцию исходных слоев (шейп-файлов)?

И как я понял, они могут не совпадать, как в этом примере - http://mapserver.org/tutorial/example1- ... ple1-6-map

И еще вопрос: в строке - указываем охват в единицах измерений что и в output PROJECTION? (т.е. в данном случае для epsg:4326).

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 13 май 2014, 09:16

Сегодня создал (переделал из примера) новый .map файл.

Код: Выделить всё

MAP
  NAME        "mapserver_tutorial_wms_server"
  IMAGETYPE   PNG
  EXTENT        139.562947 35.524705 139.917821 35.817635
  #EXTENT       15523653 4234704 15587812 4275175
  SIZE        550 450

  IMAGECOLOR  255 255 255
  SHAPEPATH   "../data"

  FONTSET     ../fonts/fonts.txt

  UNITS dd

  WEB	
    TEMPLATE  'example_template.html'
    IMAGEPATH "C:\OSGeo4W/tmp/ms_tmp/"
    IMAGEURL "/ms_tmp/"
    MINSCALEDENOM  1000
    MAXSCALEDENOM  70000
    METADATA
      "wms_title"          "MapServer Tutorial WMS Server"
      "wms_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=wms.map"
      "wms_srs"            "EPSG:4301 EPSG:4326 EPSG:3857"
      "wms_abstract"      "This demonstration server shows how to setup a MapServer .map file to serve data through the WMS standard."
    END    
  END
  
  PROJECTION
    "init=epsg:4612"
  END  

  LAYER 
    NAME "roads"
    METADATA
    "wms_title"    "Roads"
    END  
    DATA dourokukan
    STATUS ON
    TYPE LINE
    MAXSCALEDENOM 50000
    CLASS
      NAME "roads"
      STYLE
        COLOR 187 187 127
      END
    END
    PROJECTION
      "init=epsg:4612"
    END      
  END 

  LAYER 
    NAME "administrative"
    METADATA
    "wms_title"    "Administrative"
    END     
    DATA gyouseikai
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Administrative"
      STYLE
        COLOR 227 127 227
      END
    END
    PROJECTION
      "init=epsg:4612"
    END    
  END 

  LAYER 
    NAME "rail"
    METADATA
    "wms_title"    "Rail"
    END     
    DATA tetsudokukan
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Rail"
      STYLE
        COLOR 128 128 128
      END
    END
    PROJECTION
      "init=epsg:4612"
    END    
  END 

  LAYER 
    NAME "rivers"
    METADATA
    "wms_title"    "Rivers"
    END     
    DATA kasenkukan
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Rivers"
      STYLE
        COLOR 0 255 255
      END
    END
    PROJECTION
      "init=epsg:4612"
    END    
  END 

  LAYER 
    NAME "water"
    METADATA
    "wms_title"    "Water"
    END     
    DATA suiikikai
    STATUS ON
    TYPE LINE
    CLASS
      NAME "Water"
      STYLE
        COLOR 0 0 255
        SIZE 100
      END
    END
    PROJECTION
      "init=epsg:4612"
    END    
  END 

  LAYER 
    NAME "places"
    METADATA
    "wms_title"    "Place name"
    END     
    DATA chimei 
    STATUS ON
    TYPE POINT
    LABELITEM "NAMAE"
    CLASS
      NAME "Places"
      STYLE
        COLOR 10 100 100
      END
      LABEL
        TYPE TRUETYPE
        FONT pgothic
        COLOR 220 20 20
        SIZE 100
        POSITION CL
        PARTIALS FALSE
        BUFFER 100
        ENCODING "SHIFT_JIS"                              
      END
    END
    PROJECTION
      "init=epsg:4612"
    END    
  END 

END 
В ручную построил к нему запросы

Код: Выделить всё

http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:\OSGeo4W/apps/mapserver-tutorial/example12/example.map&SERVICE=wms&VERSION=1.1.1&REQUEST=GetMap&LAYERS=mapserver_tutorial_wms_server&SRS=EPSG:4301&BBOX=139.72520,35.67139,139.78845,35.70731&FORMAT=image/png&WIDTH=550&HEIGHT=450
- работает, выводиться картинка

Код: Выделить всё

http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:\OSGeo4W/apps/mapserver-tutorial/example12/example.map&SERVICE=wms&VERSION=1.1.1&REQUEST=GetMap&LAYERS=mapserver_tutorial_wms_server&SRS=EPSG:4326&BBOX=139.72520,35.67139,139.78845,35.70731&FORMAT=image/png&WIDTH=550&HEIGHT=450
- работает, выводиться картинка

Код: Выделить всё

http://127.0.0.1/cgi-bin/mapserv.exe?MAP=C:\OSGeo4W/apps/mapserver-tutorial/example12/example.map&SERVICE=wms&VERSION=1.1.1&REQUEST=GetMap&LAYERS=mapserver_tutorial_wms_server&SRS=EPSG:3857&BBOX=15523653,%204234704,%2015587812,%204275175&FORMAT=image/png&WIDTH=550&HEIGHT=450
- работает, выводиться картинка (в новой проекции с новым охватом)

А в лога аппача выводиться вот что:

Код: Выделить всё

"GET /cgi-bin/mapserv.exe?MAP=C:/OSGeo4W/apps/mapserver-tutorial/example12/example.map&LAYERS=mapserver_tutorial_wms_server&TRANSPARENT=true&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&FORMAT=image%2Fpng&SRS=EPSG%3A3857&BBOX=-0.3515625,-0.17578125,-0.17578125,0&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 164
- т.е. "левые" координаты охвата. Как их можно победить, чтоб формировался правильный запрос? Подскажите пожалуйста.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Shape file + Mapserver + OpenLayers

Сообщение Denis Rykov » 14 май 2014, 22:25

Этот последний запрос отправляет OpenLayers?
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей