|
阅读:1496回复:6
在点层中查找点,有点急
<P>小弟现在在用DELPHI上用mapcontrol开发,要求是要能在地图上找到符合条件的点,并用不同的颜色显示出来。因为刚入手,所以找了个demo来看,代码如下:</P>
<DIV class=HtmlCode> <P>procedure TMainForm.mm_StationStatusClick(Sender: TObject);<BR>var<BR> pMap : IMap;<BR> queryFilter: ISpatialFilter;<BR> Layers: IEnumLayer;<BR> Layer: ILayer;</P> <P><BR> FeatureLayer:IFeatureLayer;<BR> FeatureCLass:IFeatureCLass;<BR> featureCursor: IFeatureCursor;<BR> Feature:IFeature;<BR> LayerFields: ILayerFields;<BR> Fields:IFields;<BR> Field:IField;<BR> AIndex: Integer;<BR> pPoint:IPoint;<BR> val:OleVariant;</P> <P> Type_: esriFeatureType;<BR> Renderer: IFeatureRenderer;<BR> Symbol: ISymbol;<BR>begin<BR> MapMain.ActiveView.Get_FocusMap(pMap);</P> <P> //查询条件<BR><FONT color=#ff3300> queryFilter := CoSpatialFilter.create as ISpatialFilter;<BR> queryFilter.Set_SpatialRel(esriSpatialRelEnvelopeIntersects);<BR> queryFilter.Set_WhereClause('name=''61100700''');</FONT><BR> <BR> //获取图层字段<BR> pMap.Get_Layers(nil,true,Layers);<BR> Layers.Next(Layer);<BR> while Layer<>nil do begin<BR> FeatureLayer:=IFeatureLayer(layer);<BR> FeatureLayer.Get_FeatureClass(FeatureCLass);</P> <P> <FONT color=#ff3300>FeatureLayer.Search(queryFilter,false,featureCursor);</FONT><BR> AIndex:=-1;</P> <P> if featureCursor<>nil then<BR> featureCursor.NextFeature(feature);</P> <P> if feature<>nil then begin<BR> feature.Get_Fields(Fields);<BR> Fields.FindField('shape',AIndex);</P> <P> if AIndex<>-1 then begin<BR> IgeoFeatureLayer(FeatureLayer).Get_Renderer(Renderer);<BR> Renderer.Get_SymbolByFeature(feature,symbol);<BR> feature.Get_Value(AIndex,val);<BR> pPoint:=IUnknown(val) as IPoint;</P> <P> //居中选择<BR> MapMain.CenterAt( pPoint);<BR> pMap.SelectFeature(Layer, feature);<BR> MapMain.Refresh;<BR> pMap.ClearSelection;</P> <P> break;<BR> end;<BR> end;</P> <P> Layers.Next(Layer);<BR> end;<BR>end;</P></DIV> <P>在这里可以显示一个点,但小弟有很多点要显示,并且是从SQLSERVER的数据库中查找到的</P> <P>于是,小弟就在上面的查询条件下面加了如下语句:</P> <DIV class=HtmlCode>with DM.ADO_zhk do<BR> begin<BR> Close;<BR> SQL.Clear;<BR> SQl.Add('select stnm from ST_STBPRP_B where stcd=''61100700'' or stcd=''61100100'' order by stnm');<BR> Open;<BR> first;<BR> while not Eof do<BR> begin<BR><FONT color=#ff0000> queryFilter.Set_WhereClause('name='''+DM.ADO_zhk.FieldByName('stnm').AsString+'''');<BR></FONT> next;<BR> end;<BR> end; </DIV> <P>这里是从数据库中查询的点,然后小弟想把它们都在点层上显示出来,但我运行后,只能显示查询结果的最后一个点,请问我应该怎么做才能使它们都显示出来呢?求各位解答,跪谢先!主要是<FONT color=#ff3300>queryFilter<FONT color=#000000>和 </FONT><FONT color=#000000> </FONT><FONT color=#ff3300>FeatureLayer.Search</FONT></FONT><FONT color=#000000>那个地方应该怎么写呢?</FONT></P> |
|
|
1楼#
发布于:2008-01-09 09:34
<P>hile not Eof do<BR> begin<BR><FONT color=#ff0000> queryFilter.Set_WhereClause('name='''+DM.ADO_zhk.FieldByName('stnm').AsString+'''');</FONT></P>
<P><FONT color=#ff0000>得到<FONT color=#000000>featureCursor</FONT></FONT></P> <P><FONT color=#ff0000><FONT color=#000000>得到ifeature</FONT></FONT></P> <P><FONT color=#ff0000><FONT color=#000000>使用imap.SelectFeature(ilayer,ifeature)</FONT></FONT><FONT color=#ff0000><BR></FONT> next;<BR> end;</P> <P>完成后刷新地图</P> <P>imap=〉IActiveView IActiveView-Refresh </P> |
|
|
|
2楼#
发布于:2008-01-07 16:01
高手快帮小弟解决下这个问题吧。。。
|
|
|
3楼#
发布于:2008-01-04 12:13
cl991036大哥,你好,请问该怎么保存featureCursor呢?请点拨点拨小弟我吧,谢谢啦!!
|
|
|
4楼#
发布于:2008-01-04 12:08
<P>
<SCRIPT language=javascript type=text/javascript><br>document.write (usercolor('1','cl991036'));<br></script>
<B><FONT color=#ff0000>cl991036</FONT><FONT color=#000000>大哥,你好,请问该怎么保存featureCursor呢?</FONT></B></P> <P><STRONG>请点拨点拨小弟我吧,谢谢啦!!</STRONG></P> |
|
|
5楼#
发布于:2008-01-03 15:33
while not Eof do<br> begin<br><font color="#ff0000"> queryFilter.Set_WhereClause('name='''+DM.ADO_zhk.FieldByName('stnm').AsString+'''');<br></font> next;<br> end;<br>这样只有最后一次<br>每次查询的信息<font color="#ff3300">featureCursor你要保存</font>
|
|
|
|
6楼#
发布于:2008-01-03 13:51
<P>咋没人回答我呢</P>
|
|