OpenLayers: начало работы

Обсуждение материалов сайта: вопросы, замечания, предложения
native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 19 мар 2012, 07:01

Нужно создать интерактивную карту с возможностью выбора объекта на ней и получение об объекте сведений. И когда выбираем, объект как-то выделяется. Слой из mapinfo.

Map файл:

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

# Map-файлы начинаются с ключевого слова MAP, обозначающего начало
# "map"-объекта. Закрывает map-объект ключевое слово END в конце файла. Вся
# карта, которая будет отображаться пользователю описывается внутри.

MAP
  NAME           "WMS"
  STATUS         ON
  IMAGETYPE      PNG
  EXTENT         0.219579 0.147636 0.223491 0.151293
  SIZE           800 600
#  SHAPEPATH      "/ms4w/apps/Blag_network_polyline/"
  IMAGECOLOR     255 255 255


WEB
#    TEMPLATE  "template.html"
#    IMAGEPATH "H:/ms4w/tmp/ms_tmp/"
#    IMAGEURL  "/tmp/"
	METADATA
                wms_enable_request "*" 
		wms_title "BLG Demo"
		wms_abstract "This is the WMS demo from ADM"
		wms_onlineresource "http://localhost/cgi-bin/mapserv?map=H:/ms4w/apps/netw2/olblgnet1.map&"
		wms_srs "EPSG:4326"

        wms_onlineresource         "http://localhost/cgi-bin/mapserv?map=H:/ms4w/apps/netw2/olblgnet1.map&"
        wms_getfeatureinfo         "http://localhost/cgi-bin/mapserv?map=H:/ms4w/apps/netw2/olblgnet1.map&"
        wms_featureinfoformat      "text/plain"
	END
  END

  PROJECTION
 #  "proj=latlong"
   "ellps=WGS84"
   "datum=WGS84"
   "init=epsg:4326"
  END

#   Внутри MAP-объекта определяются новые объекты - слои (LAYER).
#   Обязательно нужно определить по крайней мере один слой.
#   Количество слоев ограничено сверху (по умолчанию - не больше 100 слоев),
#   если нужно большее количество слоев, придется перекомпилировать
#   MapServer (см. заголовочный файл map.h)


  LAYER # Определяем слой
    NAME         Blag_network
#    DATA         Blag_network_polyline
    TYPE         LINE
    TEMPLATE template.html
    STATUS DEFAULT
    CONNECTIONTYPE OGR
    CONNECTION "Blag_network_polyline.TAB"
    STYLEITEM "AUTO"
PROJECTION   
         "init=epsg:4326"
       END

      METADATA
               "wms_title"       "Blag_network"
               "wms_abstract"       "Blag_network layer"
         "wms_include_items"    "all"
         "wms_srs"       "EPSG:4326"
         "wms_format"             "image/gif"
         "wms_extent"       "0.219579 0.147636 0.223491 0.151293"
   END
#     Внутри слоя нужно определить как минимум один класс. Классов может быть
#     несколько, но не больше 10 (иначе опять придется перекомпилировать MapServer)

    CLASS
      NAME       "Blag_network"


#       Внутри класса определяются стили: как именно данный класс отобразить
#       на карте.
      STYLE
        COLOR        102 252 202
        OUTLINECOLOR 72 172 72
      END
    END
  END # Конец определения слоя
END # Конец определения карты
HTML файл:

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

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>OpenLayers BLG</title>
  <script src="apps/openlayers-2.10/OpenLayers.js"></script>
      <script type="text/javascript">
function init(){

OpenLayers.ProxyHost = "proxy.cgi?url=";

				//Creation of a custom panel with a ZoomBox control with the alwaysZoom option sets to true				
				OpenLayers.Control.CustomNavToolbar = OpenLayers.Class(OpenLayers.Control.Panel, {
	
				    /**
				     * Constructor: OpenLayers.Control.NavToolbar 
				     * Add our two mousedefaults controls.
				     *
				     * Parameters:
				     * options - {Object} An optional object whose properties will be used
				     *     to extend the control.
				     */
					
					
				    initialize: function(options) {
				        OpenLayers.Control.Panel.prototype.initialize.apply(this, [options]);
				        this.addControls([
				          new OpenLayers.Control.Navigation(),
						  //Here it come
				          new OpenLayers.Control.ZoomBox({alwaysZoom:true})
				        ]);
						// To make the custom navtoolbar use the regular navtoolbar style
						this.displayClass = 'olControlNavToolbar'
				    },
					
					
				
				    /**
				     * Method: draw 
				     * calls the default draw, and then activates mouse defaults.
				     */
				    draw: function() {
				        var div = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments);
                        this.defaultControl = this.controls[0];
				        return div;
				    }
				});
	
    function showInfo(e) {
       var popup = new OpenLayers.Popup.FramedCloud("popup",
                   map.getLonLatFromPixel(e.xy),
                   new OpenLayers.Size(120,120),
                   e.text='инфа об объекте',
                   null,
                   true
                );
       map.addPopup(popup);
    }	  
	
//  var bounds = new OpenLayers.Bounds (0.219579, 0.147636, 0.223491, 0.151293);
        var map = new OpenLayers.Map('map',{
    maxExtent: new OpenLayers.Bounds(0.21757899999961,0.147636,0.223491,0.151293),
   // maxExtent: new OpenLayers.Bounds(10.21757899999961,10.147636,10.223491,10.151293),
    maxResolution: 1,
    units: 'degrees',
    projection: "EPSG:4326"});
	  var wms1 = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'}, {isBaseLayer: true});
        var wms2 = new OpenLayers.Layer.WMS( "OpenLayers MapServer", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/netw2/olblgnet1.map",{layers: 'Blag_network', visibility: true, transparent: true}, {opacity: .5});
        var water_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
	url: 'http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/netw2/olblgnet1.map',
	title: 'wms info',
	layers: [wms2 ],
	queryVisible: true
});

map.addLayers([wms1,wms2]);
//map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();

water_ctrl.events.register('getfeatureinfo', this, showInfo);
map.addControl(water_ctrl);
water_ctrl.activate();

var panel = new OpenLayers.Control.CustomNavToolbar();
	            map.addControl(panel);
}

</script>
</head>
    <body onload="init()">
      <div style="width:80%; height:80%" id="map"></div>    
</body>
</html>
Как сделать чтобы отдельно круг выделялся, отдельно квадрат и т.д.?

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

Re: OpenLayers: начало работы

Сообщение Denis Rykov » 19 мар 2012, 08:13

1) Нужно именно чтобы выделялся или просто выводилась информация об объекте или и то и то?
2) Сколько объектов в слое к которому будет выполняться запрос?
Spatial is now, more than ever, just another column- The Geometry Column.

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 19 мар 2012, 08:19

1) И то и то нужно.
2) Должно быть много объектов, но для теста в моём слое 5.

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

Re: OpenLayers: начало работы

Сообщение Denis Rykov » 19 мар 2012, 08:36

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

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 19 мар 2012, 09:08

Попробовал в QGIS проверить. Показывает пустой слой. Но это скорее всего из-за координат. У меня слой с рисунком в границах 0.219579 0.147636 0.223491 0.151293, поэтому не может отобразить, наверное. Но ошибок не выдаёт.

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 19 мар 2012, 09:32

Нет, что-то не так. Не отображается слой.

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 20 мар 2012, 05:29

Решил заново начать. Используя QGIS и Geosample: Открытый набор геоданных для различного ПО ГИС, посмотрев видео, почитал Quantum GIS Руководство пользователя Версия 1.7.0 ’Wroclaw’ создал новый проект, добавил векторный слой (shp) и растровый слой (tif), сделал свой shp-слой, перешёл в нём на старую символику, воспользовался Модулем экспорта в файл проекта MapServer. Исправил map-файл руками - главное добавил

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

wms_enable_request "*"
'ows_enable_request'  "*"
Проверил в браузере, в QGIS - всё показывается и добавляется.

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

#msWMSDispatch(): WMS request not enabled. Chek wms/ows_enable_request settings.
MAP
  NAME "MyMap"
  STATUS ON
  # Map image size
  SIZE 800 800
 # UNITS dd

  EXTENT 77.462843 46.986851 94.835452 55.562401
  #FONTSET './fonts/fonts.txt'
  #SYMBOLSET './symbols/symbols.txt'
  PROJECTION
    #'proj=longlat'
    'ellps=WGS84'
    "datum=WGS84"
    "init=epsg:4326"
#    'towgs84=0,0,0,0,0,0,0'
#    'no_defs'
  END

  # Background color for the map canvas -- change as desired
  IMAGECOLOR 255 255 255
  IMAGEQUALITY 95
  IMAGETYPE png

  OUTPUTFORMAT
    NAME png
    DRIVER 'GD/PNG'
    MIMETYPE 'image/png'
   # IMAGEMODE RGBA
    EXTENSION 'png'
  END
  # Legend
  #LEGEND
  #    IMAGECOLOR 255 255 255
  #  STATUS ON
  #  KEYSIZE 18 12
  #  LABEL
  #    TYPE BITMAP
  #    SIZE MEDIUM
  #    COLOR 0 0 89
  #  END
  #END

  # Web interface definition. Only the template parameter
  # is required to display a map. See MapServer documentation
  WEB
    # Set IMAGEPATH to the path where MapServer should
    # write its output.
    #IMAGEPATH '/tmp/'

    # Set IMAGEURL to the url that points to IMAGEPATH
    # as defined in your web server configuration
    #IMAGEURL '/tmp/'

    # WMS server settings
    METADATA
      wms_enable_request "*"
	'ows_enable_request' "*"	
      'ows_title'           'MyMap'
      'ows_onlineresource'  'http://localhost/cgi-bin/mapserv.exe?map=H:/ms4w/apps/newp1/maps1.map&'
      'ows_srs'             'EPSG:4326'
    END

    #Scale range at which web interface will operate
    # Template and header/footer settings
    # Only the template parameter is required to display a map. See MapServer documentation
#    TEMPLATE 'fooOnlyForWMSGetFeatureInfo'
#    TEMPLATE  "template.html"
  END

  LAYER
    NAME 'relief-hill'
    TYPE RASTER
    DUMP true
    TEMPLATE template.html
    EXTENT 77.462843 46.986851 94.835452 55.562401
    DATA 'H:/ms4w/apps/newp1/raster/relief-hill.tif'
    METADATA
      'ows_title' 'relief-hill'
    END
    STATUS ON
    TRANSPARENCY 100
    PROJECTION
    'proj=longlat'
    'ellps=WGS84'
    #'towgs84=0,0,0,0,0,0,0'
    #'no_defs'
    END
  END

  LAYER
    NAME 'admin'
    TYPE POLYGON
    DUMP true
    TEMPLATE template.html
  EXTENT 77.462843 46.986851 94.835452 55.562401
    DATA 'H:/ms4w/apps/newp1/shape/admin.shp'
    METADATA
     # 'ows_title' 'admin'
               "wms_title"       "admin"
               "wms_abstract"       "admin layer"
         "wms_include_items"    "all"
         "wms_srs"       "EPSG:4326"
         "wms_format"             "image/gif"
         "wms_extent"       "77.462843 46.986851 94.835452 55.562401"
    END
    STATUS ON
    TRANSPARENCY 100
    PROJECTION
    'proj=longlat'
    'ellps=WGS84'
    #'towgs84=0,0,0,0,0,0,0'
    #'no_defs'
    END
    CLASS
       NAME 'admin' 
       STYLE
         WIDTH 3.5 
         OUTLINECOLOR 255 0 255
       END
    END
  END

  LAYER
    NAME 'my1shp'
    TYPE POLYGON
    DUMP true
    TEMPLATE fooOnlyForWMSGetFeatureInfo
  EXTENT 77.462843 46.986851 94.835452 55.562401
    DATA 'H:/ms4w/apps/newp1/shape/my1shp.shp'
    METADATA
      'ows_title' 'my1shp'
    END
    STATUS ON
    TRANSPARENCY 100
    PROJECTION
    'proj=longlat'
    'ellps=WGS84'
    'towgs84=0,0,0,0,0,0,0'
    'no_defs'
    END
    CLASS
       NAME 'my1shp' 
       STYLE
         WIDTH 0.91 
         OUTLINECOLOR 0 0 0
         COLOR 98 137 43
       END
     LABEL 
      FONT tahoma
      TYPE truetype
      SIZE 12
      COLOR 0 0 0
      ANGLE 0
      POSITION cc
      FORCE true
      ANTIALIAS true
      PARTIALS true
     END 
    END
  END

# Map file created from QGIS project file H:/ms4w/apps/newp1/ mapserverproject.qgs
# Edit this file to customize for your map interface
# (Created with PyQgis MapServer Export plugin)
END

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

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>OpenLayers BLG</title>
  <script src="http://openlayers.org/dev/lib/OpenLayers.js"></script>
      <script type="text/javascript">
function init(){

OpenLayers.ProxyHost = "proxy.cgi?url=";

var map = new OpenLayers.Map('map',{maxExtent: new OpenLayers.Bounds(77.462843, 46.986851, 94.835452, 55.562401)});
//,
    //maxResolution: 1,
    //units: 'degrees',
    //projection: "EPSG:4326"});
    //var wms1 = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'}, {isBaseLayer: true});
    var wms1 = new OpenLayers.Layer.WMS( "Границы", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/newp1/maps1.map",{layers: 'admin', visibility: true, transparent: true}, {opacity: .7});
    var wms2 = new OpenLayers.Layer.WMS( "OpenLayers MapServer", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/newp1/maps1.map",{layers: 'my1shp', visibility: true},{isBaseLayer: true});    
map.addLayers([wms2,wms1]);

map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();
var panel = new OpenLayers.Control.CustomNavToolbar();
	            map.addControl(panel);
}

</script>
</head>
    <body onload="init()">
      <div style="width:80%; height:80%" id="map"></div>    
</body>
</html>
Что делать дальше? Подскажите, пожалуйста.
Вложения
relief-hill.rar
растр
(928.49 КБ) 208 скачиваний
shape.rar
SHP слои
(41.02 КБ) 215 скачиваний

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

Re: OpenLayers: начало работы

Сообщение Denis Rykov » 20 мар 2012, 07:12

Вот, уже более конструктивно пошла беседа. Теперь как я понимаю вы хотите запрашивать информацию об объекте по клику? Тогда воспользуйтесь контролом WMSGetFeatureInfo.

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


var click_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
url: "http://localhost/cgi-bin/mapserv.exe?ma ... /maps1.map",
layers: [wms1, wms2],
queryVisible: true,
infoFormat: 'application/vnd.ogc.gml',
autoActivate: true,
vendorParams: {
radius: 10
},
eventListeners: {
'getfeatureinfo': function(e) {
console.log(e);
}
}
});
map.addControl(click_ctrl);

Посмотрите не объект (e) с помощью фаербага или подобного ему инструмента (IE для подобных задач крайне неудобен) - там содержится вся необходимая информация, с которой можно делать что угодно, заменив console.log(e) на что-нибудь полезное, например вывод информации в попап. Получилось?
Spatial is now, more than ever, just another column- The Geometry Column.

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 20 мар 2012, 08:01

Пишет ошибку доступа.
Access to restricted URI denied
file:///H:/ms4w/apps/openlayers-2.10/OpenLayers.js
Line 1188

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 20 мар 2012, 08:44

Что-то вроде этой информации должно быть?

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

BBOX	69.41697,46.187956,102.881325,56.361296
FEATURE_COUNT	10
FORMAT	image/png
HEIGHT	463
INFO_FORMAT	application/vnd.ogc.gml
LAYERS	admin,my1shp
QUERY_LAYERS	admin,my1shp
RADIUS	10
REQUEST	GetFeatureInfo
SERVICE	WMS
SRS	EPSG:4326
STYLES	,
VERSION	1.1.1
WIDTH	1523
X	632
Y	189
map	/ms4w/apps/newp1/maps1.map

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 20 мар 2012, 09:29

Пока что получилось так:

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

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>OpenLayers BLG</title>
  <script src="../openlayers-2.10/OpenLayers.js"></script>
      <script type="text/javascript">
function init(){

function showInfo(e) {
       var popup = new OpenLayers.Popup.FramedCloud("popup",
                   map.getLonLatFromPixel(e.xy),
                   new OpenLayers.Size(120,120),
                   e.text,
                   null,
                   true
                );
       map.addPopup(popup);
    }	  



var map = new OpenLayers.Map('map',{maxExtent: new OpenLayers.Bounds(77.462843, 46.986851, 94.835452, 55.562401)});
//,
    //maxResolution: 1,
    //units: 'degrees',
    //projection: "EPSG:4326"});
    //var wms1 = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'}, {isBaseLayer: true});
    var wms1 = new OpenLayers.Layer.WMS( "Границы", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/newp1/maps1.map",{layers: 'admin', visibility: true, transparent: true}, {opacity: .7});
    var wms2 = new OpenLayers.Layer.WMS( "OpenLayers MapServer", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/newp1/maps1.map",{layers: 'my1shp', visibility: true},{isBaseLayer: true});    

var click_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
    url: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/newp1/maps1.map",
    layers: [wms1, wms2],
    queryVisible: true,
    infoFormat: 'application/vnd.ogc.gml',
    autoActivate: true,
    vendorParams: {radius: 10 },
eventListeners: {
        'getfeatureinfo': function(e) {
            console.log(e);
		console.log(e.xy);
		console.log('freeText');
            map.addPopup(new OpenLayers.Popup.FramedCloud(
                        "chicken", 
                        map.getLonLatFromPixel(e.xy),
                        null,
                        e.xy,
                        null,
                        true
                    ));

        }
	}
});


map.addLayers([wms2,wms1]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();

//click_ctrl.events.register('getfeatureinfo', this, showInfo);
map.addControl(click_ctrl);
//click_ctrl.activate();


map.addControl(new OpenLayers.Control.CustomNavToolbar());
}

</script>
</head>
    <body onload="init()">
      <div style="width:80%; height:80%" id="map"></div>    
</body>
</html>
В итоге на консоли

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

Object { features=[0], request=cXMLHttpRequest, xy=x=842,y=264, ещё...}
x=842,y=264 { x=842, y=264, CLASS_NAME="OpenLayers.Pixel"}
freeText
В popupe координаты, но если заменить e.xy на e.text, то будет ошибка

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

this.size is null
прочитал вот это, но немного не понял куда он что перенёс.

native
Интересующийся
Сообщения: 26
Зарегистрирован: 09 ноя 2011, 14:02
Репутация: 0

Re: OpenLayers: начало работы

Сообщение native » 20 мар 2012, 09:55

))) Переместил куда надо.

Ответ такой:

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

<?xml version="1.0" encoding="ISO-8859-1"?>

<msGMLOutput 
	 xmlns:gml="http://www.opengis.net/gml"
	 xmlns:xlink="http://www.w3.org/1999/xlink"
	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<my1shp_layer>
	<gml:name>my1shp</gml:name>
		<my1shp_feature>
			<gml:boundedBy>
				<gml:Box srsName="EPSG:4326">
					<gml:coordinates>85.785240,54.697463 87.283061,56.037063</gml:coordinates>
				</gml:Box>
			</gml:boundedBy>
		</my1shp_feature>
	</my1shp_layer>
</msGMLOutput>
Соответственно в popup выводится название слоя и координаты объекта.
Как теперь их выделять и где заносить доп. информацию об объектах?

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

Re: OpenLayers: начало работы

Сообщение Denis Rykov » 21 мар 2012, 13:04

Про выделение отписался здесь, про заполнение атрибутов - это уже задача не OpenLayers. Можно, например, разработать необходимую форму, которую открывать по клику на объекте, заполнять и передавать на сервер введенные данные и ID объекта и уже на сервере скриптом вставлять полученные данные в базу. Или, как вариант, использовать WFS-T (см tinyOWS).
Spatial is now, more than ever, just another column- The Geometry Column.

psyhosis
Интересующийся
Сообщения: 22
Зарегистрирован: 05 май 2013, 20:41
Репутация: 1

Re: OpenLayers: начало работы

Сообщение psyhosis » 05 май 2013, 21:11

Доброго времени суток!
Применил метод WMSGetFeatureInfo для отображения дополнительной информации на карте и получил проблему:
при запросе (клике) браузер Crome нормально отображает текст, пришедший в результате работы метода,
а вот распоследняя свежескачанная Mozilla Firefox (да и старенькая тоже) и старенький IE не понимают кодировку, я так понимаю они в utf8 ее выводят, хотя в самом ответе и на самой странице в теге meta явно указан charset=Windows-1251. Страница на 1251 выводится нормально, а всплывающее окно вопросами заполнено.
utf8 пока не получилось применить, потому как ответ формирует mapserver из shape-данных (то есть фактически dbf база с кодировкой 1251)
Если взять запрос, который формирует метод и запросить прямо из браузера - все нормально отображается.
и вот не знаю, что теперь делать?
переходить на utf-8, но тогда надо средствами javascript как то надо текст перекодировать, но как? методы из интернета не подошли (http://mabp.kiev.ua/2008/04/02/encoding ... avascript/ пробовал - кракозябры страшные только)
базу dbf перекодировать не предлагать.

psyhosis
Интересующийся
Сообщения: 22
Зарегистрирован: 05 май 2013, 20:41
Репутация: 1

Re: OpenLayers: начало работы

Сообщение psyhosis » 06 май 2013, 20:12

Обнаружил сегодня странную вещь: запросы что от хрома что от файрфокса один в один (по логам апача), а вот ответ хрому приходит в windows-1251, а файрфоксу в utf-8. Как мапсрверу объяснить, что надо отвечать всем одинаково. "wms_encoding" "windows-1251" установлен в MAP-WEB-METADATA...

Ответить

Вернуться в «Материалы сайта»

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

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