Я пытаюсь добавить слой WMS с удаленного сервера ArcGIS в мое веб-приложение GWT. Я использую библиотеку gwt-openlayers
.Как добавить слои WMS с gwt-openlayers?
Мой код:
MapOptions defaultMapOptions = new MapOptions();
mapWidget = new MapWidget("100%", "100%", defaultMapOptions);
Map map = mapWidget.getMap();
//gNormal = new GoogleV3("Google Normal", gOptions);
//map.addLayer(gNormal);
WMSParams wmsParams = new WMSParams();
wmsParams.setFormat("image/png");
wmsParams.setLayers("1");
wmsParams.setStyles("");
WMSOptions wmsLayerParams = new WMSOptions();
wmsLayerParams.setUntiled();
wmsLayerParams.setProjection("EPSG:3857"); // is it correct setting for WMS layer?
// wmsLayerParams.setProjection("EPSG:102113");
// wmsLayerParams.setProjection("EPSG:4326");
wmsLayerParams.setTransitionEffect(TransitionEffect.RESIZE);
String wmsUrl = "sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer";
arcGis = new WMS("ArcGis", wmsUrl, wmsParams);
map.addLayer(arcGis);
map.setBaseLayer(arcGis);
LonLat lonLat = new LonLat(-84.1,36.4); //USA
lonLat.transform("EPSG:4326", map.getProjection());
//System.out.println("map projection "+map.getProjection());
map.setCenter(lonLat, 3);
add(mapWidget);
Я прочитал много статей и так вопросы, но я до сих пор не может решить эту проблему. Моя проблема заключается в рендеринг розовых плит на карте вместо обычного изображения. Я скопировал URL изображения, как много stackoverflow
ответов, предложенных и увидел следующее:
http://localhost:8084/sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer?FORMAT=image%2Fpng&LAYERS=1&STYLES=&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG%3A4326&BBOX=-135,45,-90,90&WIDTH=256&HEIGHT=256
Без localhost:8084
префикса URL отлично работает и показывает мне небольшой кусок карты.
Вопросы:
1) Как избавиться от LOCALHOST приставки WMS URL? В моем коде wmsUrl
выглядят как sampleserver1...
, так что это правильно. Похоже, мое приложение добавляет, что это корневой путь к удаленному URL-адресу.
2) Я прочитал, что слои WMS должны иметь следующий проектор - "EPSG:3857"
. Это правда? Как я упоминал выше, когда я вручную помещал в браузер правильный URL-адрес без префикса «localhost», я видел некоторое изображение, но я не уверен, что это правильно. Вероятно, изображение смещено.
3) Моя конечная цель - добавить 2 слоя к карте - слой Google Map и слой WMS. Карта Google использует "EPSG:900913"
в качестве проекции по умолчанию. Может ли кто-нибудь дать общие советы по размещению слоя google и уровня WMS на одной карте. Может быть, есть некоторые трюки, распространенные ошибки, связанные с проекциями и так далее.
Не могли бы вы поделиться немного больше о рендеринга 2 слоев одновременно с GWT OpenLayers? Я где-то читал, что можно создать объект «Вектор» из службы WFS. Проблемы с 'FeatureType' и' FeatureNamespace' - где я могу найти значения? Запрос GetCapabilities возвращает пустой 'featureTypeList'.Также я читал о создании WFS из WMS, но все мои усилия были безуспешными. – Baurzhan
Насколько я знаю, создать WFS из WMS невозможно. По крайней мере, ни «правильный» - он все равно будет вести себя так же, как оригинальная WMS. То же самое касается объектов Vector. WMS всегда предоставляет растровые данные - сервер обрабатывает свои собственные, иногда векторные, данные на основе клиентского запроса и предоставляет изображение геокодированной карты - растр. См. Http://www.opengeospatial.org/standards/wms. – Kenny806
К вашему первому вопросу: у меня нет опыта работы с gwt-OpenLayers, я работал только с javascript OpenLayers (см. Http://www.openlayers.org). Но при одновременном рендеринге двух или более слоев не требуется больше, чем создание объекта слоя, а затем добавление его к карте, например: wms1 = новая WMS («wms1», wms1URL, wms1Options); wms2 = новая WMS («wms2», wms2URL, wms2Options); map.addLayers ([wms1, wms2]); map.setBaseLayer (wms1); ' – Kenny806