这个问题困扰我好些天了。。大概是(1)  创建一个临时图层   
     (2)读取GPS点   
     (3)在该图层上AddFeature()   
     (4)设置MapCenter   属性到该点的位置。
这些步骤,就是地图一个对象、要汽车一个对象(就是要画出来的图片),然后让两者匹配。。把图片钉到地图上。。MapXtreme 也好,mapx也罢。。我被搞的晕头转向。下边是我的错误代码。请高手指点我该如何修改               [align=left]  MapInfo.Mapping.Map map = (MapInfo.Mapping.Map) o;     // Display the zoom level
Double dblZoom = System.Convert.ToDouble(String.Format("{0:E2}", mapControl1.Map.Zoom.Value));
statusBar1.Text = "Zoom: " + dblZoom.ToString() + " " + mapControl1.Map.Zoom.Unit.ToString();
MapInfo.Geometry.DPoint dp=new MapInfo.Geometry.DPoint();

dp.x=double.Parse("119.234975");
dp.y=double.Parse("26.055025"); System.Drawing.Point ScrPoint=new Point();
mapControl1.Map.DisplayTransform.ToDisplay(dp,out ScrPoint); //这行我是想讲经纬度转换成屏幕上的坐标。。 string a=ScrPoint.X.ToString(); //输出4701243.0  我觉得很莫名奇妙
string b=ScrPoint.Y.ToString();

MapXLib.Map mapx_Lib=((MapXLib.Map)map);

//mapx_Lib.DefaultStyle.SymbolFont="custom symbols";  //这一行有错。。提示SymbolFont只读
mapx_Lib.DefaultStyle.SymbolType=1;
mapx_Lib.DefaultStyle.SymbolBitmapName="PING-64.BMP";
mapx_Lib.DefaultStyle.SymbolBitmapSize=24;
mapx_Lib.DefaultStyle.SymbolBitmapTransparent=true; fNewSymbol = mapx_Lib.FeatureFactory.CreateSymbol(ScrPoint, mapx_Lib.DefaultStyle);

MapXLib.RowValues rv=new MapXLib.RowValuesClass();
fMapSymbol = lyrMyLayer.AddFeature(fNewSymbol,rv);
a = fMapSymbol.FeatureKey; //我自己都搞不明白这个a是那里来滴。。[/align]     如果觉得我写太乱。。请大侠帮忙贴一下C# 的代码谢谢。。

解决方案 »

  1.   

    给点提示:
    在地图上添加图元不需要自己绘制,因为MAPX已经将相应功能集成在其中了,你只需要简单调用即可。                MapXLib.Feature ftr = new MapXLib.FeatureClass();
                    ftr.Attach(amapMain.GetOcx());
                    ftr.Type = MapXLib.FeatureTypeConstants.miFeatureTypeSymbol;
                    ftr.Style = amapMain.DefaultStyle;
                    ftr.KeyValue = “车牌号码”;
                    ftr.Point.Set(carx, cary);
    将汽车图标添加到MAPX地图上:                //设置\MapX 5.0\CUSTSYMB 路径下的图片
                    ftr.Style.SymbolBitmapName = "C:\\Car.bmp";
                    ftr.Style.SymbolBitmapTransparent = true;
                    ftr.Style.SymbolBitmapSize = 32;
                    ftr = amapMain.Layers._Item("图层名").AddFeature(ftr, new MapXLib.RowValuesClass());
      

  2.   

    我觉得我的问题肯能出在。。我在mapxstreme 下边的C:\Program Files\MapInfo\MapXtreme\6.5\Samples\Desktop\Features\MapFactory这个路径下的事例进行二次开发的。。所以。地图对象引用的时候老实要引用到MapInfo.Map...所以请高手再指点下。。我该怎么做。
      

  3.   

                  
      MapInfo.Mapping.Map map = (MapInfo.Mapping.Map) o;     // Display the zoom level 
    Double dblZoom = System.Convert.ToDouble(String.Format("{0:E2}", mapControl1.Map.Zoom.Value)); 
    statusBar1.Text = "Zoom: " + dblZoom.ToString() + " " + mapControl1.Map.Zoom.Unit.ToString(); 
    MapInfo.Geometry.DPoint dp=new MapInfo.Geometry.DPoint(); dp.x=double.Parse("119.234975"); 
    dp.y=double.Parse("26.055025"); System.Drawing.Point ScrPoint=new Point(); 
    mapControl1.Map.DisplayTransform.ToDisplay(dp,out ScrPoint); //这行我是想讲经纬度转换成屏幕上的坐标。。 string a=ScrPoint.X.ToString(); //输出4701243.0  我觉得很莫名奇妙 
    string b=ScrPoint.Y.ToString(); MapXLib.Map mapx_Lib=((MapXLib.Map)map); //mapx_Lib.DefaultStyle.SymbolFont="custom symbols";  //这一行有错。。提示SymbolFont只读 
    mapx_Lib.DefaultStyle.SymbolType=1; 
    mapx_Lib.DefaultStyle.SymbolBitmapName="PING-64.BMP"; 
    mapx_Lib.DefaultStyle.SymbolBitmapSize=24; 
    mapx_Lib.DefaultStyle.SymbolBitmapTransparent=true; fNewSymbol = mapx_Lib.FeatureFactory.CreateSymbol(ScrPoint, mapx_Lib.DefaultStyle); MapXLib.RowValues rv=new MapXLib.RowValuesClass(); 
    fMapSymbol = lyrMyLayer.AddFeature(fNewSymbol,rv); 
    a = fMapSymbol.FeatureKey; //我自己都搞不明白这个a是那里来滴。。
      

  4.   

    嗯。。比较容易看了是吧。。我忘记。。插入标记了。。问题没解决啊。。有谁做过。。讲解下。。我是看了。。别人delphi怎么引用的。。C# 的不明白。。
      

  5.   

    god mapx,多年没折腾过这玩意了