初学MapX,对MapX编程不甚了解,老板就让写一个.gst文件切割的软件,按照经纬度,现在一点头绪都没有,哪位高手有相关的资料帮我一把,不甚感激. 
要是有源代码最好了,最好是C#的,,麻烦各位大侠了. 
如果没有具体的代码可以把思路给我说一下.谢谢

解决方案 »

  1.   

    就是算法,网上搜一下经纬度转换成像素的计算方法,很多.
    转换成像素后就能用
    Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    切图片了
      

  2.   

    比如,你用mapx读入gst图
    Map1.ConvertCoord转换成屏幕坐标
    在根据屏幕坐标使用API
    Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
    转换成图片的相对坐标.也就是说  
    你再mapx上选中2个点,那么这两个点在mapx上首先知道的是他的经纬度,根据这个经纬度,获取他图片上的坐标
    比如图片大小是1000*800,那么经纬度(35.5,25,5)的点对应图片上坐标可能是(500,600),在根据另外一个点计算出的图片坐标可能是(550,650),那么截的图片就是(500,600)-(550,650)的一个矩形
    Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long 
    可以把这个矩形截出来
      

  3.   

    转别人的思路:一个gst文件在程序中肯定对应一个map对象。。 
    map对象有个方法可以获取整个map的边界。好像是map.bounds或者是map.layers.bound 获取边界后,按级别将地图范围分割,举例如下 
    比如你的map的bounds范围是  左下:120.000000,30.00000 右上 130.00000,40.000000 
    你可以自己设定 比如地图视野最大的一级(设定为level1)每个图片的跨度是 经度5度,纬度5度, 
    那么这一级别可以分成4个(根据你设定的第一级跨度的大小,图片个数会对应变化)图片输出,对应的边界分别为 
    第一个: 左下 120.000000,30.00000 右上 125.00000,35.000000 
    第二个: 左下 125.000000,30.00000 右上 130.00000,35.000000 
    第三个: 左下 120.000000,35.00000 右上 125.00000,40.000000 
    第四个: 左下 125.000000,35.00000 右上 130.00000,40.000000 把它放大一倍则得到第二级(level2)的跨度 是  经度2.5,纬度2.5.同上可以算出可以分成16个图片输出,对应边界的切分同上 每放大一级 跨度是上一级的 1/2,图片个数是上一级的四倍(单个的跨度小了,个数自然多了) 
    上面是切分的方法。。至于切分后输出,可以如下处理 
    set map.bounds=.... 
    map.Export 
    帮助上的例子如下 
    dim rect as new MapXLib.Rectangle 
    '设置地图边界矩形的正确方式 
    rect.Set -124.82, 18.08, -52.14, 53.01 
    set map1.Bounds = rect '此示例展示 Map.ExportMap 方法。它使用 
    '方法来将地图作为 BMP 文件置于剪贴板中。 
    Private Sub Command1_Click() 
    Map1.PaperUnit = miUnitCentimeter 
    `Export a 12 cm by 9 cm map to the clipboard in BMP Format 
    Map1.ExportMap "clipboard", miFormatBMP, 12, 9 
    If Clipboard.GetFormat(vbCFBitmap) Then 
    Debug.Print "Clipboard contains a BMP" 
    Else 
    Debug.Print "Clipboard does not contain a BMP" 
    End If 
    End Sub