как выделить объект на карте цветом?
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 08 авг 2011, 15:25
- Репутация: 0
как выделить объект на карте цветом?
Привет. Использую MapServer+OpenLayers. также стоит postgis. Вопрос такой: как при клике на объект(например дом) выделить его цветом?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как выделить объект на карте цветом?
Если слой векторный, то воспользоваться контролом SelectFeature (пример), если растровый, то идеи можно посмотреть здесь.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 08 авг 2011, 15:25
- Репутация: 0
Re: как выделить объект на карте цветом?
спасибо, пробую
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 08 авг 2011, 15:25
- Репутация: 0
Re: как выделить объект на карте цветом?
спасибо большое. разобрался
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 08 авг 2011, 15:25
- Репутация: 0
Re: как выделить объект на карте цветом?
разобрался да не совсем.
если написать - ...FILTER (gid=400).... то объект будет нарисован
а если передаю из запроса - .......FILTER (gid=%SQL%)....... то рисуются красные квадраты на всю карту.
firebug говорит
в запросе слоя пишу
в карте
если написать - ...FILTER (gid=400).... то объект будет нарисован
а если передаю из запроса - .......FILTER (gid=%SQL%)....... то рисуются красные квадраты на всю карту.
firebug говорит
и таких 8 штук.Resource interpreted as Image but transferred with MIME type text/html: "http://localhost:8080/cgi-bin/mapserv.e ... xy=256+256".
OpenLayers.Tile.Image.OpenLayers.Class.positionImageImage.js:336
OpenLayers.Tile.Image.OpenLayers.Class.renderTileImage.js:308
OpenLayers.Tile.Image.OpenLayers.Class.drawImage.js:237
OpenLayers.Layer.Grid.OpenLayers.Class.spiralTileLoadGrid.js:513
OpenLayers.Layer.Grid.OpenLayers.Class.initGriddedTilesGrid.js:431
OpenLayers.Layer.Grid.OpenLayers.Class.moveToGrid.js:192
OpenLayers.Layer.OpenLayers.Class.redrawLayer.js:527
OpenLayers.Layer.HTTPRequest.OpenLayers.Class.redrawHTTPRequest.js:149
OpenLayers.Map.OpenLayers.Class.addLayerMap.js:941
(anonymous function)
в запросе слоя пишу
Код: Выделить всё
var highlight = new OpenLayers.Layer.MapServer("Highlighting",
mapsrvpath,
{'map': mappath,layers:'highlights', format:'image/png', SQL:400},
{isBaseLayer:false, visibility:true, opacity:0.5, transparent:true }
);
map.addLayer(highlight);
Так как же правильно передать параметр в .map файл?LAYER
NAME "highlights"
STATUS on
TYPE polygon
CONNECTIONTYPE postgis
CONNECTION "user=postgres password=postgres dbname=postgis host=localhost"
DATA "the_geom from (select * from zemlepol_2_region) as newtable using unique gid using srid=4326"
PROCESSING "CLOSE_CONNECTION=DEFER"
FILTER (gid=%SQL%)
PROJECTION
"init=epsg:4326"
END
CLASS
STYLE
COLOR 229 60 54
OUTLINECOLOR 188 0 0
END
END
END
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как выделить объект на карте цветом?
Нужно вставить строку сгенерированного запроса в браузер и посмотреть на что ругается мапсервер.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 08 авг 2011, 15:25
- Репутация: 0
Re: как выделить объект на карте цветом?
вот запрос из firebug
вот ответ mapservera
чтоб это значило
Код: Выделить всё
http://localhost:8080/cgi-bin/mapserv.exe?map=C%3A%2Fms4w%2FApache%2Fhtdocs%2Fsite%2Fmaps%2Fw.map&layers=highlights&format=image%2Fpng&SQL=400&mode=map&map_imagetype=png&mapext=8049.0566037736+-10000+17065.408805031+-983.64779874214&imgext=8049.0566037736+-10000+17065.408805031+-983.64779874214&map_size=256+256&imgx=128&imgy=128&imgxy=256+256
Код: Выделить всё
msDrawMap(): Image handling error. Failed to draw layer named 'highlights'. msPostGISLayerWhichShapes(): Query error. Error (ERROR: syntax error at or near ")" LINE 1: ...ind_srid('','zemlepol_2_region','the_geom')) and (gid=%SQL%) ^ ) executing query: select encode(ST_AsBinary(ST_Force_2D("the_geom"),'NDR'),'hex') as geom,"gid" from zemlepol_2_region where the_geom && GeomFromText('POLYGON((8049.05660377337 -10000,8049.05660377337 -983.64779874214,17065.4088050312 -983.64779874214,17065.4088050312 -10000,8049.05660377337 -10000))',find_srid('','zemlepol_2_region','the_geom')) and (gid=%SQL%) msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msValidateParameter(): Regular expression error. Parameter pattern validation failed.
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 09 ноя 2011, 14:02
- Репутация: 0
Re: как выделить объект на карте цветом?
Код: Выделить всё
new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT(
"POLYGON((80.363552 52.935941,84.055363 53.00, 84.055363 51.976070))"
)
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как выделить объект на карте цветом?
В зависимости от того каким образом вы выбираете объект по клику. В любом случае нужно сначала получить свойство geometry фичи, а затем вызвать метод toString().native писал(а):Как вместо 80.363552 52.935941,84.055363 53.00, 84.055363 51.976070 получить и вставить координаты в формате WKT как раз того объекта, по которому кликаем мышью?Код: Выделить всё
new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT( "POLYGON((80.363552 52.935941,84.055363 53.00, 84.055363 51.976070))" )
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 09 ноя 2011, 14:02
- Репутация: 0
Re: как выделить объект на карте цветом?
функция такая
Код: Выделить всё
var click_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
url: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/newp1/maps1.map",
layers: [wms2],
queryVisible: true,
infoFormat: 'application/vnd.ogc.gml',
autoActivate: true,
vendorParams: {radius: 10 },
eventListeners: {
'getfeatureinfo': function(e) {
showInfo(e);
console.log(e.text);
pointlayer.removeAllFeatures(pointlayer);
pointlayer.addFeatures([
OpenLayers.Geometry.Point(84, 54), map.getResolution(), 60, 0))
new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT(
"POLYGON((80.363552 52.935941,84.055363 53.00, 84.055363 51.976070))"
)
)
]);
tracklayer = new OpenLayers.Layer.PointTrack('track', {styleFrom: OpenLayers.Layer.PointTrack.SOURCE_NODE});
tracklayer.addNodes(pointlayer.features);
map.addLayer(pointlayer);
}
}
});
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как выделить объект на карте цветом?
Не смог распарсить ваш код, в нём явно какие-то синтаксические ошибки. Опишите словами чего вы хотите.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 09 ноя 2011, 14:02
- Репутация: 0
Re: как выделить объект на карте цветом?
Продолжаю из этой темы. Поверх wms слоя по клику на объекте рисуем векторный объект такой же формы, получается что-то типа наложения. Вот мне и нужны координаты объекта, чтобы нарисовать его на векторном слое. Возможен же такой вариант для выделения?
Полностью код страницы:
Полностью код страницы:
Код: Выделить всё
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>OpenLayers BLG</title>
<script src="http://localhost/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(200,200),
e.xy,
null,
true
);
map.addPopup(popup);
}
var map = new OpenLayers.Map('map',{maxExtent: new OpenLayers.Bounds(77.462843, 46.986851, 94.835452, 55.562401)});
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 pointlayer = new OpenLayers.Layer.Vector('Original');
var click_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
url: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/newp1/maps1.map",
layers: [wms2],
queryVisible: true,
infoFormat: 'application/vnd.ogc.gml',
autoActivate: true,
vendorParams: {radius: 10 },
eventListeners: {
'getfeatureinfo': function(e) {
showInfo(e);
console.log(e.text);
pointlayer.removeAllFeatures(pointlayer);
pointlayer.addFeatures([
//new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(map.getLonLatFromPixel(e.xy))),
//new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(85, 55)),
// new OpenLayers.Feature.Vector(OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(84, 54), map.getResolution(), 60, 0))
new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT(
"POLYGON((80.363552 52.935941,84.055363 53.00, 84.055363 51.976070))"
)
)
]);
tracklayer = new OpenLayers.Layer.PointTrack('track', {styleFrom: OpenLayers.Layer.PointTrack.SOURCE_NODE});
tracklayer.addNodes(pointlayer.features);
map.addLayer(pointlayer);
}
}
});
var report = function(e) {
OpenLayers.Console.log(e.type, e.feature.id);
};
var highlightCtrl = new OpenLayers.Control.SelectFeature(pointlayer, {
hover: true,
highlightOnly: true,
renderIntent: "temporary",
eventListeners: {
beforefeaturehighlighted: report,
featurehighlighted: report,
featureunhighlighted: report
}
});
var selectCtrl = new OpenLayers.Control.SelectFeature(pointlayer,
{clickout: true}
);
map.addControl(highlightCtrl);
map.addControl(selectCtrl);
highlightCtrl.activate();
selectCtrl.activate();
map.addLayers([wms2, wms1, pointlayer]);
// vectors.addFeatures([feature]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();
// горячие клавиши
map.addControl(new OpenLayers.Control.KeyboardDefaults());
// координаты текущего положения мыши
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(click_ctrl);
//map.addControl(new OpenLayers.Control.CustomNavToolbar());
}
</script>
</head>
<body onload="init()">
<div style="width:80%; height:80%" id="map"></div>
</body>
</html>
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как выделить объект на карте цветом?
Похожий вопрос возникал в другой теме - посмотрите, я там ответил.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 09 ноя 2011, 14:02
- Репутация: 0
Re: как выделить объект на карте цветом?
Какое условие написать чтобы при нажатии на пустую область, т.е. не на объект, ничего не происходило?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как выделить объект на карте цветом?
Код: Выделить всё
'getfeatureinfo': function(e) {
if (e.features.length) {
#your stuff
}
}
Spatial is now, more than ever, just another column- The Geometry Column.
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 2 гостя