阅读:3790回复:2
[求助]openlayer多边形框选查询
<p> 在做一个多边形框选查询,下面是写的一段代码,先画一个多边形,然后得到<font face="Verdana">geometry</font>,alert的结果是POLYGON((<font face="Verdana">87.896030117188 43.662511703125, 87.978427578125 43.382360335938,88.434360195313 43.40982615625,88.247592617188 43.640539046875,87.896030117188,43.662511703125</font>))</p>
<p>本来是想用<font face="Verdana">FILTER:geometryFilter</font>直接查询,但这样报错<font face="Verdana">WFS server error. Invalid or Unsupported FILTER in GetFeature : [object Object]</font></p> <p> </p> <p>后来尝试现在的写法,按弹出的POLYGON,直接把点写进去(但逗号分隔位置不一样,需要手动改一下),可以查出来。</p> <p>请大家帮忙看看第一种写法有什么错误,如果不行,怎么把POLYGON里的内容转为第二种写法里的;或者有其他方法?</p><a href="attachment/2011-12/2011122111284664250.txt">2011-12/2011122111284664250.txt</a><br/> |
|
1楼#
发布于:2011-12-22 09:29
<p>转贴:</p><p> </p><p>openlayers提供了几十个示例,虽然每个示例都很简单,但却很具有代表性,值得初学者学习。<br/>现在我想做一个测试,包含多个图层、缩放条、工具条、鼠标位置、弹出窗口,其中图层分别来自geoservr<br/>提供的WMS和WFS服务接口。<br/>主要代码如下:<br/>样式定义,定义地图大小,工具条位置和替换按钮图片。<br/><style
type="text/css"><br/> #map {<br/> width: 640px;<br/> height: 475px;<br/> border: 1px solid black;<br/> }<br/><br/> .olControlPanel div { <br/> display:block;<br/> position: absolute;<br/> top: 0px;<br/> left: 190px;<br/> width: 60px;<br/> height: 23px;<br/> margin: 5px;<br/> }<br/> .olControlPanel .olControlMouseDefaultsItemActive { <br/> background-image: url("/openlayers/img/Pan.gif");<br/> }<br/> .olControlPanel .olControlMouseDefaultsItemInactive { <br/> background-image: url("/openlayers/img/PanSelected.gif");<br/> }<br/> .olControlPanel .olControlZoomBoxItemInactive { <br/> width: 60px; <br/> height: 23px;<br/> position: absolute;<br/> top: 0px;<br/> left: 250px;<br/> background-image: url("/openlayers/img/ZoomInSelected.gif");<br/> }<br/> .olControlPanel .olControlZoomBoxItemActive { <br/> width: 60px; <br/> height: 23px;<br/> position: absolute;<br/> top: 0px;<br/> left: 250px;<br/> background-image: url("/openlayers/img/ZoomIn.gif");<br/> }<br/> .olControlPanel .olControlSelectFeatureItemInactive { <br/> width: 60px; <br/> height: 23px;<br/> position: absolute;<br/> top: 0px;<br/> left: 310px;<br/> background-image: url("/openlayers/img/InfoSelected.gif");<br/> }<br/> .olControlPanel .olControlSelectFeatureItemActive { <br/> width: 60px; <br/> height: 23px;<br/> position: absolute;<br/> top: 0px;<br/> left: 310px;<br/> background-image: url("/openlayers/img/Info.gif");<br/> }<br/> </style><br/>JS代码,核心部分。<br/><script src="/openlayers/OpenLayers.js"></script><br/> <script type="text/javascript"><br/> <!--<br/> //定义全局变量<br/> var map, layer, selectControl, selectedFeature;<br/> //关闭弹出窗口的函数<br/> function onPopupClose(evt) {<br/> selectControl.unselect(selectedFeature);<br/> }<br/> //构造弹出窗口的函数<br/> function onFeatureSelect(feature) {<br/> selectedFeature = feature;<br/> popup = new OpenLayers.Popup.Anchored("chicken", <br/> feature.geometry.getBounds().getCenterLonLat(),<br/> new OpenLayers.Size(250,75),<br/> "<div style='font-size:.8em'>" + feature.attributes['cq:LNAME'] +"</div>",<br/> null, true, onPopupClose);<br/> feature.popup = popup;<br/> map.addPopup(popup);<br/> }<br/> //销毁弹出窗口的函数 <br/> function onFeatureUnselect(feature) {<br/> map.removePopup(feature.popup);<br/> feature.popup.destroy();<br/> feature.popup = null;<br/> }<br/> //地图和页面加载函数<br/> function init(){<br/> //设置地图缩放范围和缩放等级,0级比例尺最小<br/> map = new OpenLayers.Map( $('map'), { maxScale: 500, minScale: 500000, numZoomLevels: 5 });<br/> //加载行政区图层,WMS栅格图像<br/> layer = new OpenLayers.Layer.WMS( "District", <br/> "http://192.98.151.17:8081/geoserver/wms", {layers: 'cq:GMAP_DISTRICT'} );<br/> map.addLayer(layer);<br/> //加载水系图层,WMS栅格图像<br/> layer = new OpenLayers.Layer.WMS( "Water", <br/> "http://192.98.151.17:8081/geoserver/wms", {layers: 'cq:GMAP_LAKE', 'transparent': true, format: 'image/png' } );<br/> map.addLayer(layer);<br/> //加载单位图层,WFS矢量数据,由openlayers在客户端绘制,注意:数量太多会导致速度缓慢<br/> layer = new OpenLayers.Layer.WFS( "Unit", <br/> "http://192.98.151.17:8081/geoserver/wfs", {typename: 'cq:GPOI_GOV'}, <br/> { <br/> typename: 'unit', <br/> featureNS: 'http://www.openplans.org/cq', <br/> extractAttributes: true, <br/> maxfeatures: 10,<br/> textAttrToDisplay: 'lname' <br/> } );<br/> map.addLayer(layer);<br/> //在地图上添加按钮和工具条<br/> zb = new OpenLayers.Control.ZoomBox();<br/> var panel = new OpenLayers.Control.Panel({defaultControl: zb});<br/> selectControl = new OpenLayers.Control.SelectFeature(layer, {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect, hover: true});<br/> panel.addControls([<br/> new OpenLayers.Control.MouseDefaults(), zb, selectControl<br/> ]);<br/> map.addControl(panel);<br/> <br/> map.addControl(new OpenLayers.Control.PanZoomBar({zoomWorldIcon:false}));<br/> map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));<br/> map.addControl(new OpenLayers.Control.MousePosition());<br/> //设置初始地图的中心坐标和缩放等级<br/> map.setCenter(new OpenLayers.LonLat(106.5, 29.5), 3);<br/> <br/> }<br/> // --><br/> </script><br/>HTML代码<br/><body ><br/> <h1>OpenLayers Test</h1><br/> <div id="panel"></div><br/> <div id="map"></div><br/> <textarea style="display:none" id="serialize" cols="96" rows="10"/><br/> </body><br/><br/></p> |
|
|
2楼#
发布于:2011-12-22 11:00
这个帖子看过了,看了没有得到答案
|
|