现在的位置: 首页 > 综合 > 正文

MapXtreme 2004 Web控件回送数据分析

2013年01月29日 ⁄ 综合 ⁄ 共 1771字 ⁄ 字号 评论关闭
  

在MapXtreme 2004的web应用中,都是通过几个隐藏Input将客户端操作发回服务器端的.这几个Input是: 

隐藏字段名

作用

*****_Image_CurrentToolName

存储当前的用户控件名称: MapInfoWebZoomIn; MapInfoWebPan…

*****_Image_ToolControlParent

存储当前控件的父控件名称:

ToolbarControl1;未定义…

 

*****_Image_PointsData

记录用户操作的屏幕坐标集合

*****_SelLayers

存储选择的层

       ***** 为页面定义的Map控件ID,默认为 MapControl1

 

在以上的字段中,重点是*****_Image_PointsData字段,里面保存的是用户操作所产生的屏幕坐标集合.一般情况下,放大\缩小\平移\框选\圈选产生两个点数据;点选\定位产生一个点数据;测距\多边形选择视操作情况会有多于2个的点数据.数据格式为:

       2,162 92,242 138

此数据格式通过逗号分为两个部分.点个数,屏幕坐标,屏幕坐标,…

通过以下方法可以直接拆解为点集合:

 

    Public Function ExtractPoints(ByVal dataPoints As StringAs Point()
        
If (Not dataPoints Is NothingThen
            
Dim textArray1 As String() = Split(dataPoints, ",")
            
If (Not textArray1 Is NothingThen
                
Dim num1 As Integer = CInt(textArray1(0))
                
Dim points As Point() = New Point(num1 - 1) {}
                
Dim num2 As Integer = 0
                
Do While (num2 < num1)
                    
Dim textArray2 As String() = Split(textArray1(num2 + 1), " ")
                    points(num2).X 
= CInt(textArray2(0))
                    points(num2).Y 
= CInt(textArray2(1))
                    num2 
+= 1
                
Loop
               
return points
            
End If
        
End If
       
return nothing
    
End Function

拆解出来的点集合是屏幕坐标,通过以下方法可以转化为地理坐标,以便后续使用:

        Dim map as MapInfo.Engine.Session.Current.MapFactory(_Alias)
        
Dim inputPoints() As System.Drawing.Point   =   ExtractPoints(dataPoints     
            Dim exportPoints() As MapInfo.Geometry.DPoint

        map.DisplayTransform.FromDisplay(inputPoints, exportPoints)

_Alias            地图别名,Mapcontrol的mapAlias属性值.
dataPoints     客户端发回的数据

假如开发者对MapX现有的那几个控件不满意,可以通过模拟以上数据格式来自行设计交互的方式.比如:双击放大,右键选中等.当然这样的方法不太正规.还是编写自己的服务器端控件好一点.不过在编写之前了解一些基础知识还是比较好的.

抱歉!评论已关闭.