Страница 2 из 2

Re: Shape file + Mapserver + OpenLayers

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

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

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

Re: Shape file + Mapserver + OpenLayers

Добавлено: 14 май 2014, 22:55
Denis Rykov
Покажите весь js код карты.

Re: Shape file + Mapserver + OpenLayers

Добавлено: 14 май 2014, 23:03
xen87
Вот:

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

<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>

Re: Shape file + Mapserver + OpenLayers

Добавлено: 14 май 2014, 23:08
Denis Rykov
А если написать:

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

isBaseLayer: false
вместо

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

isBaseLayer: true

Re: Shape file + Mapserver + OpenLayers

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

Re: Shape file + Mapserver + OpenLayers

Добавлено: 14 май 2014, 23:15
Denis Rykov
А какой запрос в этом случае уходит к серверу - посмотрите в консоли браузера.

Re: Shape file + Mapserver + OpenLayers

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

Re: Shape file + Mapserver + OpenLayers

Добавлено: 14 май 2014, 23:34
Denis Rykov
Вот подключил WMS ПКК на OSM, все работает: http://gis-lab.info/share/DR/sandbox/wms-example.html

Re: Shape file + Mapserver + OpenLayers

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

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

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

Re: Shape file + Mapserver + OpenLayers

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

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

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>
Как-то оно так.