openlayers - wms - карта не загружается - PullRequest
2 голосов
/ 27 января 2012

Я создал простой сайт с картой, где я подключаюсь к wms-серверу. Проблема сейчас в том, что карта не отображается, просто вид маленьких картинок. Вот сайт, который я создал: http://dl.dropbox.com/u/2418858/index.html

Вот код, который я использовал:

<script type="text/javascript">
        var map;
        var wms;
        var map_controls = [new OpenLayers.Control.LayerSwitcher(),
                             new OpenLayers.Control.PanZoomBar(), 
                             new OpenLayers.Control.MouseToolbar(), 
                             new OpenLayers.Control.KeyboardDefaults()];

        function init() {
            map = new OpenLayers.Map("map", {
                controls : map_controls
            });
            wms = new OpenLayers.Layer.WMS("Satellitenbild_30m", "http://gis.lebensministerium.at/wmsgw/", {
                layers : 'Satellitenbild_30m',
                key : '6ae2a41178c77ccee1db7248c9f92b04',
            }, {
                projection : new OpenLayers.Projection('EPSG:32632'),
                singleTile : true,
                buffer : 0,
                ratio : 1
            });

            map.addLayer(wms);

            map.zoomToMaxExtent();

        }
    </script>
</head>
<body onload=init()>
    <div id="map" style="width: 1000px; height: 1000px"></div>
    </div>
</body>

Когда я использую Spatial Commander (GIS-desktop-программа), я вижу карту и могу увеличивать и уменьшать масштаб, но когда я использую Openlayers, я не вижу карту.

Итак, я перехватил запрос vom Spatial Commander с прокси, чтобы увидеть, чем этот запрос отличается от моего, отправленного с моего сайта.

Единственное различие, которое я нашел, было параметром BBOX, который в SC выглядел так:

BBOX=495149.712089618,4954209.6147000715,1173065.9355847104,5633477.615310807

и параметр в запросе, отправленном с моей веб-страницы, выглядел так:

BBOX=-351.5625,-351.5625,351.5625,351.5625

Таким образом, я изменил параметр BBOX, отправленный через мою веб-страницу, вручную и получил это: запрос вручную Так появилась карта!

Теперь мои актуальные вопросы:

  • Почему на моем сайте нет карты?
  • Почему BBOX-параметр отправляется автоматически от Openlayers, если он не соответствует значениям, полученным от пространственного коммандера?
  • Как мне заставить мою карту работать?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 30 января 2012

Попробуйте установить свойство maxResolution для объекта map:

map = new OpenLayers.Map("map", {
    controls : map_controls,
    maxResolution: 1000
}); 
1 голос
/ 28 января 2012

OpenLayers обрабатывает только пару проекций (Web Mercator и WGS84). Для других прогнозов вам необходимо включить библиотеку Proj4js, доступную по адресу - http://proj4js.org/

OpenLayers автоматически интегрируется с этой библиотекой, если она доступна (т.е. добавляется на вашу веб-страницу).

Затем добавьте параметры проекции для вашей проекции (до того, как она будет использована в вашем коде). В этом случае EPSG: 32632

Вы можете получить почти все детали проекции из http://spatialreference.org (когда сайт запущен) в формате Proj4js:

Proj4js.defs["EPSG:32632"] = "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";

http://spatialreference.org/ref/epsg/32632/proj4js/

Однако, учитывая возможности вашего сервиса WMS - его можно запросить и в проекции Web Mercator - поэтому нет необходимости в перепроецировании:

Наконец, отправленная вами демонстрационная ссылка отображает карту - по крайней мере, в FireFox. Вы уверены, что у вас нет ошибок JavaScript? У вас есть лишняя запятая в этой строке:

key : '6ae2a41178c77ccee1db7248c9f92b04',

Это часто приводит к тому, что Internet Explorer перестает показывать карту.

0 голосов
/ 30 января 2012

Проблема в том, что вы не устанавливаете проекцию на объект карты OpenLayers. В этом случае OpenLayers устанавливает проекцию по умолчанию "EPSG: 4326". Затем вы также можете установить свойство maxExtent, чтобы OpenLayers знал, для какой области он должен отправлять запросы изображений. В методе init сделайте это:

map = new OpenLayers.Map("map", {
  controls : map_controls,
  projection: "EPSG:32632",
  maxExtent: new OepnLayers.Bounds(495149.712089618,4954209.6147000715,1173065.9355847104,5633477.615310807)                 
});
...