lzw232
路人甲
路人甲
  • 注册日期2007-12-21
  • 发帖数5
  • QQ
  • 铜币119枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1496回复:6

在点层中查找点,有点急

楼主#
更多 发布于:2008-01-03 12:58
<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>
喜欢0 评分0
cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
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>
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
举报 回复(0) 喜欢(0)     评分
lzw232
路人甲
路人甲
  • 注册日期2007-12-21
  • 发帖数5
  • QQ
  • 铜币119枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2008-01-07 16:01
高手快帮小弟解决下这个问题吧。。。
举报 回复(0) 喜欢(0)     评分
lzw232
路人甲
路人甲
  • 注册日期2007-12-21
  • 发帖数5
  • QQ
  • 铜币119枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2008-01-04 12:13
cl991036大哥,你好,请问该怎么保存featureCursor呢?请点拨点拨小弟我吧,谢谢啦!!
举报 回复(0) 喜欢(0)     评分
lzw232
路人甲
路人甲
  • 注册日期2007-12-21
  • 发帖数5
  • QQ
  • 铜币119枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
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>
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
举报 回复(0) 喜欢(0)     评分
lzw232
路人甲
路人甲
  • 注册日期2007-12-21
  • 发帖数5
  • QQ
  • 铜币119枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2008-01-03 13:51
<P>咋没人回答我呢</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部