代码如下:
这个是我写的用于查询地名的函数:public void AddResultList(string layerName,string DM)//layername表示图层名字,DM表示地名(关键字)
        {
            MapXLib.Layer lyr = mainForm1.amapMain.Layers._Item(layerName);
            MapXLib.FindResult Found = lyr.Find.SearchEx(DM, "");
            this.listResult.Items.Clear();
            if (Found.Matches != null)
            {
                for (int i = 1; i <= Found.Matches.Count; i++)
                {
                    this.listResult.Items.Add(Found.Matches[i].Name);//将查询的结果添加到listbox中                }
            }
            
        }我想稍作修改应该就可能使用了吧,你自己改吧,我懒得帮你改了。

解决方案 »

  1.   

    谢谢楼上。刚按你的方法查出来Found.Matches.Count为0,是不是因为我的没有DataSets的原因?能不能把你的DataSets.Add方法怎么调用的贴出来看看?
      

  2.   

    你搜索的图层是地图自带的图层还是你自己添加的图层,如果说自己添加的图层那就比较麻烦了,因为自己添加的图层不带有数据表,所以搜索的时候可能会搜索不到的。就算是地图自带的图层如果没有数据表,同样搜索不到的。
    如果是你自己添加的图层,需要用到搜索功能的话,那么我建议你用ACCESS数据库来保存这些自己添加的图层信息。那么搜索的时候就直接在ACCESS数据库中查找,找到后,根据从数据库中获得的经纬度信息,定位到地图上就可以了。
      

  3.   

    是地图自带的。地名都以图元的形式显示在地图上了,我要模糊查询这些地名。
    对于这个地图,我们有另一个C++的项目,它的模糊查询是这样写的:                  layer = m_pMapX->GetLayers().Item(layername);

    layer.BeginAccess(miAccessRead);

    vtLayer.vt = VT_DISPATCH;
    vtLayer.pdispVal = layer.m_lpDispatch;
    ds = m_pMapX->GetDatasets().Add(miDataSetLayer,vtLayer,layername); 

            rs.CreateDispatch(rs.GetClsid());
    r.CreateDispatch(r.GetClsid());
    CString strValue;
    if (!CXMLShare::NodeRead(m_GeosetPath.Left(m_GeosetPath.ReverseFind('\\')),"//Root/Map/ROW_ADDR_NAME",strValue))
    {
    strValue=ROW_ADDR_NAME;
    }
            strWhere=strValue+_T(" like \"%") + searchStr + _T("%\"");
    fs=layer.Search(strWhere);但我把它转换成C#,执行到thisMap.DataSets.Add时报错“字段参数无效”的异常