阅读:1578回复:3
[求助]利用 .NetLink 实现WebGIS
<P align=left>最近我在利用.NetLink开发一个WebGIS的信息服务;现在看了BlueViewer这个例子;有些不明白的地方!希望有使用过这个开发经验的高手指点一二!<br>以下是我对里面的解释 有一些不懂请高手指点一二!由于不能上传文件,我只好贴上了!希望那各位大哥知道的话;解释一下发到我的邮箱swift_leaf54@126.com;先谢各位高手了。<br>default.aspx.vb的代码:我的解释如果有问题请大家指出<br>Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load<br> If Not IsPostBack Then <br> Session.Add("VALID_USER", True)<br>如果是第一次加载回话加载一个有效的用户 <br> hvMapPage.Value = "MakeMap.aspx"<br> End If<br> If (Request.QueryString("XMIN") = Nothing Or _<br> Request.QueryString("YMIN") = Nothing Or _<br> Request.QueryString("XMAX") = Nothing Or _<br> Request.QueryString("YMAX") = Nothing) Then<br> ' If no initial extent is defined in the incoming QueryString, default <br> ' to the extent defined in web.config.<br> 如果没有引入初始化范围,获得web.config里面的初始化范围。<br> hvMinX.Value = ConfigurationSettings.AppSettings("DEFAULT_EXTENT_XMIN")<br> hvMinY.Value = ConfigurationSettings.AppSettings("DEFAULT_EXTENT_YMIN")<br> hvMaxX.Value = ConfigurationSettings.AppSettings("DEFAULT_EXTENT_XMAX")<br> hvMaxY.Value = ConfigurationSettings.AppSettings("DEFAULT_EXTENT_YMAX")<br> Else<br> ' If we have a valid and complete extent defined in the QueryString,<br> ' use these values as the inital extent.<br> 如果在查询字符串有效而完整的地图范围使用这些值进行初始化<br> hvMinX.Value = Request.QueryString("XMIN")<br> hvMinY.Value = Request.QueryString("YMIN")<br> hvMaxX.Value = Request.QueryString("XMAX")<br> hvMaxY.Value = Request.QueryString("YMAX")<br> End If<br> End Sub<br>MakeMap.aspx.vb 代码解释<br>Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br> Dim bRequestFailed As Boolean 定义一个请求失败的布尔型变量<br> Dim sError As String 定义一个出错时描述的字符串<br> ' Test for the VALID_USER<br> ' key in the session (which will be there if the<br> ' browser session has visited default.aspx already).<br>验证有效的会话用户值(如果浏览器的会话已经被default.aspx页面访问过)<br>下面的代码主要是说明当会话有效值为假时 向屏幕发送出错信息。<br> If Not Session("VALID_USER") = True Then<br> sError = AddCRs("Error: Either your user session had timed out or this is an unauthorized client... Please close your browser and try again.")<br> SendErrorScreen(sError, _<br> CLng(Request.QueryString("WIDTH")), _<br> CLng(Request.QueryString("HEIGHT")) _<br> )<br> Exit Sub<br> End If<br> ' Get the map. Trap for failure.<br> 获得地图,捕获失败<br> Try<br> bRequestFailed = False<br> Dim sServer As String = ConfigurationSettings.AppSettings("DEFAULT_MAPSERVER")<br> 默认的地图服务器<br> Dim iPort As Integer = CInt(ConfigurationSettings.AppSettings("DEFAULT_MAPPORT"))<br> 地图服务的端口<br> Dim sService As String = ConfigurationSettings.AppSettings("DEFAULT_MAPSERVICE")<br> 默认的地图服务<br> Dim iWidth As Integer = CInt(Request.QueryString("WIDTH"))<br> Dim iHeight As Integer = CInt(Request.QueryString("HEIGHT"))<br> 地图的高度和宽度<br> Dim conArcIMS As New ESRI.ArcIMS.Server.ServerConnection(sServer, iPort)<br> 定义ArcIMS服务连接<br> Dim axlRequest As New ESRI.ArcIMS.Server.Xml.AxlRequests<br> 定义axl请求<br> Dim axlResponse As New System.Xml.XmlDocument<br> 定义axl回答<br> conArcIMS.ServiceName = sService<br> ArcIMS的服务名称<br> <br> 定义AXl请求的字符串<br> Dim sAXLText As String<br> sAXLText = "<ARCXML 1.1?? version="">"<br> sAXLText = sAXLText ; "<REQUEST><GET_IMAGE><PROPERTIES>"<br> sAXLText = sAXLText ; "<IMAGESIZE ??? & iHeight ? height="" iWidth width="" />"<br> sAXLText = sAXLText ; "<ENVELOPE ??? & ? Request.QueryString(?YMAX?) maxy="" Request.QueryString(?XMAX?) maxx="" Request.QueryString(?YMIN?) miny="" Request.QueryString(?XMIN?) minx="" />"<br> sAXLText = sAXLText ; "<LEGEND false?? display="" />"<br> sAXLText = sAXLText ; "</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>"<br> <br> 响应axl的请求<br> axlResponse.LoadXml(conArcIMS.Send(sAXLText))<br> If axlResponse.GetElementsByTagName("OUTPUT").Count = 1 Then<br> Dim nodeOutput As System.Xml.XmlNodeList = axlResponse.GetElementsByTagName("OUTPUT")<br> imageURL = nodeOutput(0).Attributes("url").Value<br> End If<br> Catch ex As System.Exception<br> bRequestFailed = True<br> sError = ex.Message<br> End Try<br> ' If map request failed, generate an image that reports<br> ' the failure. Otherwise, redirect the client to the <br> ' map.<br> 如果地图请求失败,产生一图片报告失败的信息。否则重新向客户端地图服务<br> If bRequestFailed Then<br> Dim sFullMessage As String = "An error occurred while processing your map request:" ; _<br> vbCrLf ; AddCRs(sError)<br> SendErrorScreen(sFullMessage, _<br> CLng(Request.QueryString("WIDTH")), _<br> CLng(Request.QueryString("HEIGHT")))<br> Else<br> Response.Redirect(imageURL)<br> End If<br> End Sub<br> Private Sub SendErrorScreen(ByVal sMsg As String, _<br> ByVal lWidth As Long, _<br> ByVal lHeight As Long)<br> ' Purpose: Creates an on-the-fly GIF with a text message.<br> 目的:创建一个GIF图片,用于发送文本消息<br> Dim bmpMap As New Bitmap(lWidth, _<br> lHeight, _<br> System.Drawing.Imaging.PixelFormat.Format32bppArgb)<br> Dim graMap As Graphics = Graphics.FromImage(bmpMap)<br> graMap.DrawString(sMsg, New Font("Verdana", 8), Brushes.White, 10, 10)<br> bmpMap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif)<br> End Sub<br> Private Function AddCRs(ByVal sIn) As String<br> ' Purpose: Adds a carriage return at a given<br> ' interval.<br> 请问这个段代码时什么意思呢?<br> Const INTERVAL = 60<br> Dim sOut As String<br> Dim i As Integer<br> Dim j As Integer = 0<br> For i = 1 To Len(sIn)<br> j = j + 1<br> If j = INTERVAL Then<br> sOut = sOut ; vbCrLf<br> j = 0<br> End If<br> sOut = sOut ; Mid(sIn, i, 1)<br> Next i<br> Return sOut<br> End Function<br>End Class<br>WebConfig 文件 关键代码<br>这个时设置地图服务<br><!-- <br> APPLICATION SPECIFIC SETTINGS - ArcWeb Site Starters: Viewer Application<br> <br> DEFAULT_EXTENT_XMIN = default map extent minimum X value.<br> DEFAULT_EXTENT_YMIN = default map extent minimum Y value.<br> DEFAULT_EXTENT_XMAX = default map extent maximum X value.<br> DEFAULT_EXTENT_YMAX = default map extent maximum Y value.<br> DEFAULT_PRINT_TITLE = default map title for the Print page.<br> --><br><APPSETTINGS><br> <ADD value="BlueViewer" key="DEFAULT_MAPSERVICE" /><br> <ADD value="localhost" key="DEFAULT_MAPSERVER" /><br> <ADD value="5300" key="DEFAULT_MAPPORT" /><br> <ADD value="-132.0" key="DEFAULT_EXTENT_XMIN" /><br> <ADD value="25.0" key="DEFAULT_EXTENT_YMIN" /><br> <ADD value="-57.0" key="DEFAULT_EXTENT_XMAX" /><br> <ADD value="50.0" key="DEFAULT_EXTENT_YMAX" /><br> <ADD value="United States Map" key="DEFAULT_PRINT_TITLE" /><br></APPSETTINGS><br>Print.aspx 文件<br> Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender<br> Dim imageURL As String<br> Dim legendURL As String<br> If Session("VALID_USER") = True Then<br> Dim sServer As String = ConfigurationSettings.AppSettings("DEFAULT_MAPSERVER")<br> Dim iPort As Integer = CInt(ConfigurationSettings.AppSettings("DEFAULT_MAPPORT"))<br> Dim sService As String = ConfigurationSettings.AppSettings("DEFAULT_MAPSERVICE")<br> Dim iWidth As Integer = CInt(Request.QueryString("WIDTH"))<br> Dim iHeight As Integer = CInt(Request.QueryString("HEIGHT"))<br> Dim conArcIMS As New ESRI.ArcIMS.Server.ServerConnection(sServer, iPort)<br> Dim axlRequest As New ESRI.ArcIMS.Server.Xml.AxlRequests<br> Dim axlResponse As New System.Xml.XmlDocument<br> conArcIMS.ServiceName = sService<br> Dim sAXLText As String<br> sAXLText = "<ARCXML 1.1?? version="">"<br> sAXLText = sAXLText ; "<REQUEST><GET_IMAGE><PROPERTIES>"<br> sAXLText = sAXLText ; "<IMAGESIZE ??? & iHeight ? height="" iWidth width="" />"<br> sAXLText = sAXLText ; "<ENVELOPE ??? & ? Request.QueryString(?YMAX?) maxy="" Request.QueryString(?XMAX?) maxx="" Request.QueryString(?YMIN?) miny="" Request.QueryString(?XMIN?) minx="" />"<br> sAXLText = sAXLText ; "<LEGEND title="" font="" display="" 14?? titlefontsize="" Verdana?? Legend?? Map true?? autoextend="" />"<br> sAXLText = sAXLText ; "</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>"<br> axlResponse.LoadXml(conArcIMS.Send(sAXLText))<br><br> 前面我知道是什么意思;后面的使用与打印的我不是很清楚 希望能指点一二<br> If axlResponse.GetElementsByTagName("OUTPUT").Count = 1 Then<br> Dim nodeOutput As System.Xml.XmlNodeList = axlResponse.GetElementsByTagName("OUTPUT")<br> imageURL = nodeOutput(0).Attributes("url").Value<br> End If<br> If axlResponse.GetElementsByTagName("LEGEND").Count = 1 Then<br> Dim nodeOutput As System.Xml.XmlNodeList = axlResponse.GetElementsByTagName("LEGEND")<br> legendURL = nodeOutput(0).Attributes("url").Value<br> End If<br> imgMap.Src = imageURL<br> imgLegend.Src = legendURL<br> txtTitle.Value = ConfigurationSettings.AppSettings("DEFAULT_PRINT_TITLE")<br> Else<br> Response.Write("Error: Page Inaccessible.")<br> End If<br> End Sub<br>Legend.aspx页面代码<br>Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender<br> Dim legendURL As String<br> If Session("VALID_USER") = True Then<br> Dim sServer As String = ConfigurationSettings.AppSettings("DEFAULT_MAPSERVER")<br> Dim iPort As Integer = CInt(ConfigurationSettings.AppSettings("DEFAULT_MAPPORT"))<br> Dim sService As String = ConfigurationSettings.AppSettings("DEFAULT_MAPSERVICE")<br> Dim iWidth As Integer = CInt(Request.QueryString("WIDTH"))<br> Dim iHeight As Integer = CInt(Request.QueryString("HEIGHT"))<br> Dim conArcIMS As New ESRI.ArcIMS.Server.ServerConnection(sServer, iPort)<br> Dim axlRequest As New ESRI.ArcIMS.Server.Xml.AxlRequests<br> Dim axlResponse As New System.Xml.XmlDocument<br> conArcIMS.ServiceName = sService<br> Dim sAXLText As String<br> sAXLText = "<ARCXML 1.1?? version="">"<br> sAXLText = sAXLText ; "<REQUEST><GET_IMAGE><PROPERTIES>"<br> sAXLText = sAXLText ; "<IMAGESIZE ??? & iHeight ? height="" iWidth width="" />"<br> sAXLText = sAXLText ; "<ENVELOPE ??? & ? Request.QueryString(?YMAX?) maxy="" Request.QueryString(?XMAX?) maxx="" Request.QueryString(?YMIN?) miny="" Request.QueryString(?XMIN?) minx="" />"<br> sAXLText = sAXLText ; "<LEGEND font="" display="" Verdana?? true?? autoextend="" />"<br> sAXLText = sAXLText ; "</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>"<br> <br> 前面的与其他的相同 显示图例我不是很清楚,希望高手能指点一二<br> axlResponse.LoadXml(conArcIMS.Send(sAXLText))<br> If axlResponse.GetElementsByTagName("LEGEND").Count = 1 Then<br> Dim nodeOutput As System.Xml.XmlNodeList = axlResponse.GetElementsByTagName("LEGEND")<br> legendURL = nodeOutput(0).Attributes("url").Value<br> End If<br> imgLegend.ImageUrl = legendURL<br> Else<br> Response.Write("Error: Page Inaccessible.")<br> End If<br> End Sub </P>
[此贴子已经被作者于2006-4-22 22:59:43编辑过]
|
|
1楼#
发布于:2006-04-23 22:46
<P>这么长估计没人会看,这么简单的blueviewer还看不懂?我也是刚学arcims,我觉得arcims基本上一星期就可以入门了,学不学得好主要看对arcxml的学习了,当然如果tcp/ip soap 或者ajax学的比较好的话,会很有用</P>
<P>建议你自己在看看,我也是看了半天没懂,在看半天就豁然明白了,当然也可以看我写的文章</P> |
|
|
2楼#
发布于:2006-05-12 15:22
<P>你的文章在哪里?可否给发一个?<a href="mailtmawzh@tom.com" target="_blank" >mawzh@tom.com</A> 或<a href="mailtmawz@zaas.org" target="_blank" >mawz@zaas.org</A></P>
<P>谢谢!</P> |
|
3楼#
发布于:2006-05-24 17:29
图例已在前面的代码中一起返回,后面这段代码只是把图例的具体存放路径给读出来以便在特定的位置显示.
|
|