日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

GIS开发随笔(3)——ArcXML和NET_Link方法

發(fā)布時間:2025/5/22 asp.net 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GIS开发随笔(3)——ArcXML和NET_Link方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在ArcIMS中似乎有兩種連接方法,一種是在.Net工程用引用StudioAT.MapNet.DLL文件,還有一種是在.Net工程中引用ArcIMS在完全安裝后(非默認(rèn)安裝)的ESRI.ArcIMS.Server.DLL文件。這兩種方法都能產(chǎn)生一個ArcXML文檔發(fā)送給圖形服務(wù),后者的方法在Flyingis的博客中有介紹,文章地址為:http://www.cnblogs.com/flyingis/archive/2006/07/30/463510.html
????? 我個人看了這兩處的代碼并對比后,有些被ArcInfo這些產(chǎn)品提供的東西弄糊涂了,為什么ArcIMS生成ArcXML有兩種解決方法呢,都有什么作用呢,那一種更好用更適合呢?
????? 下面將這兩處的代碼對比如下(其中Flyingis所說的方法在我這里并沒有運(yùn)行成功,不知道還需要注意什么地方的設(shè)置或編碼):
1、在.Net工程中引用StudioAT.MapNet.DLL文件,下面的代碼為頁面上的MapNet控件的點(diǎn)擊事件(MapNet控件為可視化控件,也是通過添加StudioAT.MapNet.DLL文件獲得的,至于如何添加.Net以外的控件,我這里就不多說了。)
?1using?System;
?2using?System.Collections;
?3using?System.ComponentModel;
?4using?System.Data;
?5using?System.Drawing;
?6using?System.Web;
?7using?System.Web.SessionState;
?8using?System.Web.UI;
?9using?System.Web.UI.WebControls;
10using?System.Web.UI.HtmlControls;
11using?System.Xml;
12using?StudioAT.IMS;
13using?StudioAT;
14
15……
16
17/**////?<summary>
18///?單擊地圖時顯示相關(guān)的屬性信息和坐標(biāo)信息
19///?</summary>
20///?<param?name="rct">點(diǎn)的大小范圍信息</param>

21private?void?MapNet1_Click(StudioAT.IRect?rct)
22????????{
23????????????IMapNet?myMapNet?=?this.MapNet1;
24????????????XmlElement?myXmlEle?=?null;
25????????????XmlDocument?myXmlDoc?=?(XmlDocument)ArcXML.BuildRequest(ArcXML.enuRequest.GET_FEATURES,?ref?myXmlEle);
26????????????myXmlEle.SetAttribute(ArcXML.AttributeOutputmode,"newxml");
27????????????myXmlEle.SetAttribute(ArcXML.AttributeGeometry,?"true");
28????????????myXmlEle.SetAttribute(ArcXML.AttributeEnvelope,?"true");
29????????????myXmlEle.SetAttribute(ArcXML.AttributeCompact,?"true");
30????????????XmlElement?xmlELayer?=?myXmlDoc.CreateElement(ArcXML.NodeLayer);
31????????????xmlELayer.SetAttribute(ArcXML.AttributeId,?this.DDL_Layer.SelectedValue);
32????????????myXmlEle.AppendChild(xmlELayer);
33????????????XmlElement?xmlESQ?=?myXmlDoc.CreateElement(ArcXML.NodeSpatialquery);
34????????????xmlELayer.SetAttribute(ArcXML.AttributeId,?this.DDL_Layer.SelectedValue);
35????????????myXmlEle.AppendChild(xmlESQ);
36????????????XmlElement?xmlESF?=?myXmlDoc.CreateElement(ArcXML.NodeSpatialfilter);
37????????????xmlESF.SetAttribute(ArcXML.AttributeRelation,?"area_intersection");
38????????????xmlESQ.AppendChild(xmlESF);
39????????????XmlElement?xmlEEnv?=?(XmlElement)ArcXML.CreateExtent(ref?myXmlDoc,rct);
40????????????xmlESF.AppendChild(xmlEEnv);
41????????????string?strResponse?=?myMapNet.RequestArcXML(myXmlDoc.InnerXml,?ArcXML.enuCustomService.Query);
42????????????myXmlDoc?=?new?XmlDocument();
43????????????myXmlDoc.LoadXml(strResponse);
44????????????if(myXmlDoc.GetElementsByTagName("FIELD").Count?>?2)
45????????????{
46????????????????this.TB_BZ.Text?=?myXmlDoc.InnerXml;
47????????????}

48????????}

49
50…… 上面的代碼是當(dāng)在地圖中點(diǎn)擊一點(diǎn),顯示地圖中該點(diǎn)的屬性。
2、在.Net工程中引用ESRI.ArcIMS.Server.DLL文件,在一個頁面Button控件的單擊事件被觸發(fā)后,將獲得的ArcXML給一個TextBox控件的Text屬性。采用了Flyingis所說的方法,但未成功。將Flyingis所寫的代碼同時粘貼出來做個對比。
????? 首先,需要將.NET Link的程序集引用到開發(fā)環(huán)境中,我使用的是Visual Studio 2005,需要說明的是ArcIMS 9/9.1 的.NET Link在VS2003和VS2005中都能工作的很好,兼容性不錯。這樣ESRI.ArcIMS.Server.dll就加入了項(xiàng)目中。
??
???? ?第二步,建立到ArcIMS應(yīng)用服務(wù)器的連接。

using?ESRI.ArcIMS.Server
……
ServerConnection?connection?
=?new?ServerConnection();
connection.Host
= "localhost";
connection.AppServerPort?
=?5300;
connection.Scheme?
=?Scheme.TCP;
???? ?如果需要建立一個HTTP連接,端口為80,可以將以上語句改為

connection.Scheme?=?Scheme.HTTP;?
connection.Host?
=?"http://www.yourdomain.com";
connection.URIPort?
=?80;
????? 第三步,發(fā)送一個ArcXML請求。在.NET Link中發(fā)送ArcXML請求,其實(shí)質(zhì)就是對ArcXML文件的一種拼裝。
??
//?獲取默認(rèn)的地圖服務(wù)
connection.ServiceName?=?"ServerSample";
//?建立一個?XML?String,即?axl
string?sAXLText;
//?在?sAXLText?中寫入定制的?axl?文件
sAXLText?=?"<?xml?version=\"1.0\"?encoding=\"UTF-8\"?><ARCXML?version=\"1.1\">";
sAXLText?
=?sAXLText?+?"<REQUEST><GET_IMAGE><PROPERTIES>";
sAXLText?
=?sAXLText?+?"<IMAGESIZE?width=\"300\"?height=\"250\"/>";
sAXLText?
=?sAXLText?+?"<ENVELOPE?minx=\"-132.0\"?miny=\"25.0\"?maxx=\"-57.0\"?maxy=\"50.0\"?/>";
sAXLText?
=?sAXLText?+?"<LEGEND?display=\"false\"?/>";
sAXLText?
=?sAXLText?+?"</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>";
string?response?=?conArcIMS.Send(sAXLText);
????? 最后,需要處理ArcXML響應(yīng)。

System.Xml.XmlDocument?axlResponse?=?new?System.Xml.XmlDocument();
axlResponse.LoadXml(response);?
if?(axlResponse.GetElementsByTagName("OUTPUT").Count?==?1)
{?
????
//?從?ArcIMS?應(yīng)用服務(wù)器響應(yīng)中獲取?"OUTPUT"?XmlNode?節(jié)點(diǎn)的集合,并且節(jié)點(diǎn)只有一個
????System.Xml.XmlNodeList?nodeOutput?=?axlResponse.GetElementsByTagName("OUTPUT");
????
//?獲取這個節(jié)點(diǎn)的?url?屬性值
????imageURL?=?nodeOutput[0].Attributes["url"].Value;
}

????? 最后獲得的imageURL就是之前客戶端用戶發(fā)送請求需要服務(wù)器返回的圖片地址,用戶每次對地圖操作后看到的結(jié)果,其本質(zhì)就是一張張圖片。
????? 上面是Flyingis在《ArcIMS 連接器--.NET Link 使用方法》所提到的代碼。下面是我的代碼:
?1using?System;
?2using?System.Collections;
?3using?System.ComponentModel;
?4using?System.Data;
?5using?System.Drawing;
?6using?System.Web;
?7using?System.Web.SessionState;
?8using?System.Web.UI;
?9using?System.Web.UI.WebControls;
10using?System.Web.UI.HtmlControls;
11using?System.Xml;
12using?ESRI.ArcIMS.Server;
13
14……
15
16private?void?Btn_SS_Click(object?sender,?System.EventArgs?e)
17????????{
18????????????ServerConnection?mySerCon?=?new?ServerConnection();
19????????????mySerCon.Scheme?=?Scheme.HTTP;
20????????????mySerCon.Host?=?"http://localhost";
21????????????mySerCon.URIPort = 80;
22????????????mySerCon.ServiceName?=?"DemoMap";
23????????????string?SendArcXMLText?=?"<?xml?version=\"1.0\"?encoding=\"UTF-8\"?><ARCXML?version=\"1.1\"><REQUEST><GET_FEATURES?outputmode=\"newxml\"?geometry=\"true\"?envelope=\"true\"?compact=\"true\"><LAYER?id=\"18\"?/><SPATIALQUERY><SPATIALFILTER?relation=\"area_intersection\"><ENVELOPE?minx=\"87.6087292191028\"?miny=\"43.7877048007505\"?maxx=\"87.6092644218237\"?maxy=\"43.7882400034714\"?/></SPATIALFILTER></SPATIALQUERY></GET_FEATURES></REQUEST></ARCXML>";
24????????????string?InceptArcXMLText?=?mySerCon.Send(SendArcXMLText);
25????????????this.TB_BZ.Text?=?InceptArcXMLText;
26????????????XmlDocument?InceptXmlDoc=?new?XmlDocument();
27????????????InceptXmlDoc.LoadXml(InceptArcXMLText);
28????????????if?(InceptXmlDoc.GetElementsByTagName("OUTPUT").Count?==?1)
29????????????{
30????????????????XmlNodeList?NodeOutPut?=?InceptXmlDoc.GetElementsByTagName("OUTPUT");
31????????????????this.MapNet1.ImageUrl?=?NodeOutPut[0].Attributes["url"].Value;
32????????????}

33????????}

34
35…… ????? 上面是我使用情況的代碼但是在運(yùn)行觸發(fā)事件后,第24行報錯,錯誤提示為:“無效的 URI: 無法分析主機(jī)名。”。錯誤圖片如下:

應(yīng)該是在“mySerCon.Host?=?"http://localhost";”里有什么錯誤了,但不太清楚如何改為正確的URL。不知道是否有人清楚呢?盼望回答

轉(zhuǎn)載于:https://www.cnblogs.com/lijigang/archive/2007/01/23/628088.html

總結(jié)

以上是生活随笔為你收集整理的GIS开发随笔(3)——ArcXML和NET_Link方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。