Shape file + Mapserver + OpenLayers

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

Re: Shape file + Mapserver + OpenLayers

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

Этот последний запрос отправляет OpenLayers?
- да, когда я указываю координаты в метрах:

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

map.setCenter(new OpenLayers.LonLat(15563653, 4254704), zoom);

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

Re: Shape file + Mapserver + OpenLayers

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

Покажите весь js код карты.
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 » 14 май 2014, 23:03

Вот:

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

<script src="OpenLayers.js"></script>
    <script type="text/javascript">
        <!-- var lon = 139.7245; >
        <!--var lat = 35.6816; >
        var zoom = 11;
        <!--var map, layer, localWMS;>

        function init(){
            var options = {
                    div: "map",
                    projection: "EPSG:3857"
                };
                
            var map = new OpenLayers.Map(options);
            var osm = new OpenLayers.Layer.OSM();
            <!-- var gmap = new OpenLayers.Layer.Google("Google Streets", {visibility: false}); >
            
            var 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.map",
                    {layers: 'mapserver_tutorial_wms_server', transparent: true},
                    {isBaseLayer: true, opacity: 0.9});
            
            <!--map.addLayers([localWMS, osm, gmap]);>
            
            
            map.addLayers([localWMS, osm]); 
            <!-- map.addLayer(osm);>
            
            map.setCenter(new OpenLayers.LonLat(15563653, 4254704), zoom); 
            
            map.addControl( new OpenLayers.Control.LayerSwitcher() );
        }
    </script>

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

Re: Shape file + Mapserver + OpenLayers

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

А если написать:

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

isBaseLayer: false
вместо

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

isBaseLayer: true
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 » 14 май 2014, 23:13

В этом случае подложку из ОСМ выводит (в правильном месте, т.е. согласно координатам), а локальный WMS - нет.

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

Re: Shape file + Mapserver + OpenLayers

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

А какой запрос в этом случае уходит к серверу - посмотрите в консоли браузера.
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 » 14 май 2014, 23:22

Может я что-то не то смотрю, но в консоли Хрома - пусто. Также не обновляется файл - access.log. Будто запросы в WMS-серверу вообще не отправляются.

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

Re: Shape file + Mapserver + OpenLayers

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

Вот подключил WMS ПКК на OSM, все работает: http://gis-lab.info/share/DR/sandbox/wms-example.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 » 15 май 2014, 08:27

Денис, спасибо вам.
Разобрался я с консолью:
А какой запрос в этом случае уходит к серверу - посмотрите в консоли браузера.
- выводить ошибку

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

Uncaught TypeError: Cannot read property 'containsLonLat' of null 
А сам WMS-слой - точно рабочий, сегодня успешно подключил его с помощью КуГИса.

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

Re: Shape file + Mapserver + OpenLayers

Сообщение xen87 » 19 май 2014, 20:40

Ура, миссия выполнена!
Только с помощью Дениса удалось решить возникшие вопросы.
По поводу предыдущего поста:
ошибка возникала, при условии добавление только одного слоя - не указывая то, что он является базовым, т.е. писал так

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

var 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.map",
                    {layers: 'mapserver_tutorial_wms_server', transparent: true},
                    {isBaseLayer: false, opacity: 0.9}); // указание слой - не базовый
map.addLayer(localWMS); // добавление слоя
а надо так:

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

var 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.map",
                    {layers: 'mapserver_tutorial_wms_server', transparent: true},
                    {isBaseLayer: true, opacity: 0.9}); // указание слой - базовый
map.addLayer(localWMS); // добавление слоя
Вторая проблема была в том, что не отображались тайлы с ОСМ (( Даже в работающем примере Дениса - у меня сыпались розовые квадраты. Проблема решалась установкой apache -> копированием хтмл-страничек в соответствующую директорию (типа C:\OSGeo4W\apache\htdocs\) и правильного вызова урл:

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

http://localhost/openlayers.html
, где "openlayers.html" - название моей странички.
Для сравнения как вызвал я:

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

file:///C:/OSGeo4W/apps/mapserver-tutorial/example14/openlayers.html
- в данном случае это не верный способ открытия хтмл-странички.

От себя еще добавлю - внимательно просматривайте содержимое .map файл - проекции и охваты должны совпадать.

Окончательный вариант скрипта выглядит так:

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

  <script src="http://openlayers.org/dev/OpenLayers.js"></script>
    <script type="text/javascript">
        var zoom = 11;

        function init(){
            var options = {
                    div: "map",
                    projection: "EPSG:3857",
                 };
                
            var map = new OpenLayers.Map(options);
            var osm = new OpenLayers.Layer.OSM();
            
            var 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.map",
                    {layers: 'mapserver_tutorial_wms_server', transparent: true},
                    {isBaseLayer: false, opacity: 0.9}); // не делаем наш слой ВМС-базовым
                        
            map.addLayers([osm,localWMS]); 
            // map.addLayer(localWMS);
            
            map.addControl(new OpenLayers.Control.LayerSwitcher());
            
            map.setCenter(new OpenLayers.LonLat(15563653, 4254704), zoom);

        }
    </script>
Как-то оно так.

Ответить

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

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

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