1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Web cho ứng dụng GIS và xây dựng ứng dụng minh họa khai thác dịch vụ - 9 pps

18 209 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 761,63 KB

Nội dung

Chương Cài đặt chương trình client 7.1.1.2.8 Màn hình minh họa thực request WMS – GetMap Hình 7.8.Màn hình minh họa thực request WMS – GetMap 134 Chương Cài đặt chương trình client 7.1.2 Gởi request cho server Sau xây dựng xong chuỗi request Xml, ta cần phải gởi chuỗi request lên cho server Trong NET, ta thực việc gởi request lên cho server theo cách là: đồng bất đồng 7.1.2.1 Thực việc gởi request phương pháp đồng Đối với phương pháp đồng bộ, sau thực request client phải chờ nhận xong response từ server, thực tiếp tác vụ khác Do đó, lúc nhận response từ server client khơng thể làm việc khác Để gởi request phương pháp đồng bộ, ta sử dụng lớp HttpWebRequest HttpWebResponse 7.1.2.1.1 Gởi request phương pháp dồng với giao thức HTTP GET Trong trường hợp chuỗi URL chứa thêm thơng tin khác Ví dụ gởi request đến server có chuỗi URL string sURL = “http://localhost/OpenGISServer/VNesOpenGISServer.aspx?SERVIC E=WFS& VERSION=1.0.0&REQUEST=GetFeature&TypeName=buudien,quan,duong” Chuỗi URL có thêm tham số SERVICE, VERSION, REQUEST, TypeName Tạo đối tượng HttpWebRequest gởi chuỗi URL System.Net.HttpWebRequest httpRequest = System.Net.HttpWebRequest)System.Net.WebRequest.Create(sURL); 135 Chương Cài đặt chương trình client Nhận kết trả dạng stream System.Net.WebResponse httpResponse = httpRequest.GetResponse(); System.IO.Stream stream = httpResponse.GetResponseStream(); Sau nhận dòng liệu này, ta lấy liệu dịng liệu dạng chuỗi lưu dòng liệu xuống file StreamReader reader = new StreamReader(stream); Chuyển kết sang chuỗi string response = reader.ReadToEnd(); Lưu dòng liệu xuống file FileStream file = new FileStream("c:\\xml.xml",FileMode.Create,FileAccess.Write); int ch; do{ ch = stream.ReadByte(); if (ch!= -1) file.WriteByte((byte)ch); }while (ch != -1); file.Close(); 7.1.2.1.2 Gởi request phương pháp đồng với giao thức HTTP POST Trong trường hợp nội dung cần gởi lên server lưu phần body request Ví dụ gởi request dạng POST lên server Server có địa sAddress=http://localhost/OpenGISServer/VNesOpenGISServer.aspx Nội dung cần gởi lên server lưu chuỗi sPostContent Khi việc gởi request nhận response thực sau: 136 Chương Cài đặt chương trình client • Tạo đối tượng HttpWebRequest ghi nội dung chuỗi sPostContent vào phần body request System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Creat e(sAddress); System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding(); byte[] byte1=encoding.GetBytes(sPostContent); //Chọn loại ContentType liệu cần gởi lên myHttpWebRequest.ContentType="application/x-www-formurlencoded"; // Xác định chiều dài chuỗi cần gởi lên myHttpWebRequest.ContentLength=sPostContent.Text Length; myHttpWebRequest.Method = "POST"; Stream newStream = myHttpWebRequest.GetRequestStream(); newStream.Write(byte1,0,byte1.Length); newStream.Close(); System.Net.WebResponse httpResponse = myHttpWebRequest.GetResponse(); System.IO.Stream stream = httpResponse.GetResponseStream(); StreamReader reader = new StreamReader(stream); //Chuyển kết sang chuỗi string response = reader.ReadToEnd(); stream.Close(); httpResponse.Close(); //Lấy kết trả System.Net.WebResponse httpResponse = httpRequest.GetResponse(); System.IO.Stream stream = httpResponse.GetResponseStream(); 137 Chương Cài đặt chương trình client 7.1.2.2 Gởi request phương pháp không đồng Khi gởi request phương pháp khơng đồng bộ, ta tiếp tục thực tác vụ khác lúc nhận kết trả tác vụ nhận kết từ server thực tiểu trình khác 7.1.2.2.1 Gởi request phương pháp khơng đồng với giao thức HTTP GET Ví dụ minh họa việc gởi request đến server phương pháp không đồng với giao thức HTTP GET Chương trình chương trình dạng console, có chức nhận chuỗi URI từ dịng lệnh, yêu cầu tài nguyên từ địa đó, in liệu hình sau nhận xong liệu từ server Chương trình định nghĩa lớp lớp RequestState, có tác dụng chuyển liệu qua lại các lời gọi không đồng lớp ClientGetAsync dùng để tạo request phương pháp khơng đồng • Lớp RequestState lưu trạng thái request suốt trình gọi hàm để phục vụ request Nó chứa đối tượng WebRequest đối tượng Stream, đối tượng WebRequest chứa request đến tài nguyên server đối tượng Stream chứa dòng liệu nhận từ response server, đối tuợng StreamBuilder chứa toàn chuỗi response Một đối tượng RequestState dùng làm tham số state hàm AsyncCallback đăng kí với hàmWebRequest.BeginGetResponse • Lớp ClientGetAsync chứa hàm thuộc tính đây: o Thuộc tính allDone chứa đối tượng lớp ManualResetEvent, dùng để báo hiệu request hoàn thành o Hàm Main() đọc thơng tin từ dịng lệnh tạo request đến tài nguyên internet Nó tạo đối tuợng WebRequest wreq đối tượng RequestState rs, gọi hàm BeginGetResponse để bắt đầu 138 Chương Cài đặt chương trình client trình thực request Sau gọi hàm allDone.WaitOne() chương trình không kết thúc chưa nhận xong response Sau đọc response, hàm xuất nội dung response hình chương trình kết thúc o Hàm RespCallBack() dùng để cài đặt hàm callback khơng đồng đến tài ngun internet Nó tạo đối tượng WebResponse dùng để chứa response từ server, lấy dòng liệu từ response bắt đầu q trình đọc liệu từ dịng liệu cách không đồng o Hàm ReadCallBack() dùng để cài đặt hàm callback không đồng bộ, hàm callback có tác dụng đọc liệu từ dịng liệu chuỗi response Nó chuyển liệu nhận tài ngun internet gán cho thuộc tính ResponseData đối tượng RequestState, sau lại bắt đầu tiếp thao tác đọc liệu không đồng dòng liệu response từ server khơng cịn liệu trả Sau tồn liệu đọc xong, hàm ReadCallBack() đóng dịng liệu response lại gọi hàm allDone.Set() để toàn liệu từ server trả ghi vào ResponseData Chú ý: Một điều đáng lưu ý tất dòng liệu client mạng bên ngồi phải đóng lại Nếu ta khơng đóng dịng liệu request response, chương trình ta khơng cịn kết nối đến server khơng thể thực tiếp request using System; using System.Net; using System.Threading; using System.Text; using System.IO; // Lớp RequestState dùng để chuyển liệu qua lại lời gọi hàm 139 Chương Cài đặt chương trình client public class RequestState { const int BufferSize = 1024; public StringBuilder RequestData; public byte[] BufferRead; public WebRequest Request; public Stream ResponseStream; //Tạo giải mã tương ứng với loại mã hóa public Decoder StreamDecode = Encoding.UTF8.GetDecoder(); public RequestState() { BufferRead = new byte[BufferSize]; RequestData = new StringBuilder(String.Empty); Request = null; ResponseStream = null; } } // Lớp ClientGetAsync thực request không đồng class ClientGetAsync { public static ManualResetEvent allDone = new ManualResetEvent(false); const int BUFFER_SIZE = 1024; public static void Main(string[] args) { if (args.Length < 1) { showusage(); return; } // Lấy chuỗi URI từ dòng lệnh Uri httpSite = new Uri(args[0]); 140 Chương Cài đặt chương trình client // Tạo đối tượng dùng để gởi request WebRequest wreq = WebRequest.Create(httpSite); // Tạo đối tượng state RequestState rs = new RequestState(); // Gán request vào state chuyển đến hàm khác rs.Request = wreq; // Thực request không đồng IAsyncResult r = (IAsyncResult) wreq.BeginGetResponse(new AsyncCallback(RespCallback), rs); // Chờ lớp ManualResetEvent //thiết lập cho ứng dụng không dừng lại //cho đến hàm callback gọi allDone.WaitOne(); Console.WriteLine(rs.RequestData.ToString()); } public static void showusage() { Console.WriteLine("Nhận chuỗi URL"); Console.WriteLine("\r\nDùng cho:"); Console.WriteLine(" ClientGetAsync URL"); Console.WriteLine(" Ví dụ:"); Console.WriteLine(" ClientGetAsync http://www.contoso.com/"); } private static void RespCallback(IAsyncResult ar) { //Lấy đối tượng RequestState từ kết trả //của lời gọi request không đồng RequestState rs = (RequestState) ar.AsyncState; //Lấy đối tượng WebRequest từ đối tượng RequestState WebRequest req = rs.Request; 141 Chương Cài đặt chương trình client //Gọi hàm EndGetResponse, hàm tạo đối //tượng WebResponse từ request gởi WebResponse resp = req.EndGetResponse(ar); //Bắt đầu đọc liệu từ dòng liệu trả Stream ResponseStream=resp.GetResponseStream(); // Lưu dòng liệu trả RequestState để đọc //dịng liệu cách khơng đồng rs.ResponseStream = ResponseStream; //Gởi tham số rs.BufferReader cho hàm BeginRead //Đọc liệu vào rs.BufferRead IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack),rs); } private static void ReadCallBack(IAsyncResult asyncResult) { // Lấy đối tượng RequestState từ đối tượng AsyncResult RequestState rs = RequestState)asyncResult.AsyncState; // Lấy ResponseStream khởi tạo hàm RespCallback Stream responseStream = rs.ResponseStream; // Đọc rs.BufferRead để kiểm tra xem có cịn //dữ liệu khơng int read = responseStream.EndRead( asyncResult); if (read > 0) { // Tạo mảng Char để chuyển sang Unicode Char[] charBuffer = new Char[BUFFER_SIZE]; //Chuyển từ dòng liệu kiểu byte sang mảng Char sau sang String // Biến len chứa số kí tự chuyển sang Unicode 142 Chương Cài đặt chương trình client int len = rs.StreamDecode.GetChars( rs.BufferRead, 0,read, charBuffer, 0); String str = new String(charBuffer, 0, len); // Gắn phần liệu vừa đọc vào đối //tượng RequestData nằm RequestState rs.RequestData.Append( Encoding.ASCII.GetString(rs.BufferRead, 0, read)); // Tiếp tục đọc liệu đến hàm responseStream.EndRead trả -1 IAsyncResult ar = responseStream.BeginRead( rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs); } else { if(rs.RequestData.Length>0) { //Hiển thị liệu hình string strContent; strContent = rs.RequestData.ToString(); } // Đóng dịng liệu trả responseStream.Close(); //Thiết lập ManualResetEvent tiểu đóng lại } return; } } 143 trình Chương Cài đặt chương trình client 7.2 Cài đặt chương trình OpenGisClientApplication 7.2.1 Tính Theo trình bày chương trình OpenGISClientDemo có chức minh họa cách thực request WMS WFS ứng dụng GIS cụ thể Chương trình OpenGISClientApplication ứng dụng GIS, ứng dụng sử dụng request WMS để truy vấn thông tin địa lý server hỗ trợ WMS Ứng dụng giúp người dùng hiển thị đồ server cung cấp, cho phép thực chức phóng to, thu nhỏ, di chuyển… hỗ trợ lấy thông tin điểm đồ server có hỗ trợ request GetFeatureInfo 144 Chương Cài đặt chương trình client 7.2.2 Màn hình giao diện Hình 7.9.Màn hình giao diện chương trình OpenGISClientApplication 145 Chương Cài đặt chương trình client Có thể lấy thơng tin điểm đồ: Hình 7.10.Màn hình lấy thơng tin điểm đồ 146 Chương8 Tổng kết Chương Tổng kết 8.1 Kết đạt Sau sáu tháng tiến hành nghiên cứu triển khai đề tài luận văn “Tìm hiểu dịch vụ web cho ứng dụng GIS xây dựng ứng dụng minh họa khai thác dịch vụ” chúng em gặp khơng khó khăn song đạt kết định theo mục tiêu đề ban đầu đề tài Cụ thể, kết nghiên cứu thành công tiến hành triển khai dịch vụ web theo hai chuẩn WMS WFS OGC đưa Chương trình OpenGISServer hỗ trợ đầy đủ giao tác hai dịch vụ này, điều mà server hỗ trợ GIS thực hoàn chỉnh Đồng thời xây dựng thành công hai ứng dụng minh họa khai thác dịch vụ WMS WFS Trong đó, chương trình OpenGISClientDemo minh họa đầy đủ giao tác hai dịch vụ Cịn chương trình OpenGISClientApplication phát triển môi trường WinForm thực chức hiển thị đồ truy xuất thong tin đồ nhằm minh họa cho việc khai thác dịch vụ WMS Do thời gian hạn chế nên việc xây dựng ứng dụng minh họa chưa phong phú có quy mô lớn Song đáp ứng mục tiêu đặt ban đầu đề tài 8.2 Hướng phát triển Trong tương lai, chúng em dự kiến hoàn thiện chương trình OpenGISServer để hỗ trợ dịch vụ nhiều nguồn liệu khác nhau, đồng thời tận dụng khả khai thác dịch vụ khác để chương trình ngày mở rộng quy mô Đồng thời, phát triển thêm số sản phẩm GIS mang ý nghĩa thực tiễn hơn, sản phẩm khai thác dịch vụ OpenGISServer hỗ trợ Chẳng hạn sản phẩm tra cứu thông tin đồ trực tuyến, từ điển địa lý,… 147 PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS PHỤ LỤC - MySQL với phần mở rộng hỗ trợ cho OpenGIS MySQL cài đặt kiểu liệu địa lý theo đặc tả tổ chức OGC Các kiểu liệu cài đặt MySQL thành lớp tổ chức sau: • Geometry (Lớp trừu tượng) o Point (Lớp cụ thể) o Curve (Lớp trừu tượng) • LineString (Lớp cụ thể) o o o LinearRing Surface (Lớp trừu tượng) • o Line Polygon (Lớp cụ thể) GeometryCollection (Lớp cụ thể) • MultiPoint (Lớp cụ thể) • MultiCurve (Lớp trừu tượng) o • MultiLineString (Lớp cụ thể) MultiSurface (Lớp trừu tượng) o MultiPolygon (Lớp cụ thể) Ta tạo đối tượng cho lớp trừu tượng mà tạo đối tượng cho lớp cụ thể Mô tả cụ thể lớp Lớp Geometry Lớp khơng có đối tượng thể cụ thể, thuộc tính lớp áp dụng cho đối tượng lớp kế thừa từ lớp 148 PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS Các thuộc tính Geometry: • Loại (type): Mỗi đối tượng thuộc loại cấu trúc phân cấp • SRID (Spatial Reference Identifier): Giá trị xác định hệ tọa độ không gian dùng việc định nghĩa điểm đối tượng Trong MySQL giá trị số nguyên • Các điểm (coordinates) đối tượng hệ tọa độ SRID nói trên, số byte Một đối tượng không rỗng có cặp điểm (X,Y) Các đối tượng rỗng không chứa điểm Hệ thống điểm có liên quan với SRID Chẳng hạn hệ thống điểm khác khoảng cách đối tượng khác mà điểm đối tượng giống • Interior, boundary exterior: Mỗi đối tượng chiếm vị trí khơng gian, thuộc tính exterior đối tượng dùng để vùng không gian không bị chiếm giữ đối tượng Thuộc tính interior vùng khơng gian bị chiếm giữ đối tượng boundary phần giao interior exterior MBR (Minimum Bounding Rectangle): đối tượng bao bên đối tượng này, tạo thành điểm cực đại cực tiểu đối tượng ((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY)) • Thuộc tính simple non-simple • Thuộc tính close not-close: cho biết điểm đối tượng có tạo thành vịng khép kín khơng • Thuộc tính empty not-empty: Một đối tượng có thuộc tính empty đối tượng khơng chứa điểm Một đối tượng empty không định nghĩa thuộc tính exterior, interior boundary 149 PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS • Dimention: Thuộc tính dimention đối tượng có giá trị -1, 0, 1, o -1: Đối tượng đối tượng rỗng o 0: Đối tượng khơng có chiều dài khơng có diện tích o 1: Đối tượng có chiều dài khác diện tích o 2: Đối tượng có diện tích khác o Đối tượng Point có dimension o Đối tượng LineString có dimension o Đối tượng Polygon có dimension o Các đối tượng MultiPoint, MultiLineString, MultiPolygon có dimension với dimension thành phần Lớp Point Point đối tượng dùng để địa điểm đơn giản hệ thống tọa độ Ví dụ Point: Trong đồ giới với nhiều thành phố Point dùng biếu diễn thành phố Trong đồ thành phố Point biểu diễn trạm xe bt Các thuộc tính lớp Point • Giá trị hồnh độ điểm X • Giá trị tung độ điểm Y Lớp Curve Thường dùng để mô tả mảng điểm Lớp lớp trừu tượng, lớp Curve định nghĩa loại quan hệ khác điểm Các thuộc tính Curve 150 PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS • Mỗi Curve chứa mảng điểm • Curve đối tượng chiều • Một Curve thuộc loại simple khơng qua điểm lần • Một Curve closed điểm đầu trùng với điểm cuối • Một Curve vừa simple vừa closed Linearing Lớp LineString LineString Curve với mối quan hệ tuyến tính điểm Ví dụ LineString: Trong đồ giới, LineString dùng để biểu diễn sông Trong đồ thành phố, LineString dùng để biểu diển đường Thuộc tính LineString • Mỗi LineString gồm nhiều đoạn, đoạn cặp điểm • Một LineString đoạn thẳng chứa điểm • Một LineString Linearing vừa closed, vừa simple Lớp Surface Surface lớp trừu tượng, lớp chiều Lớp cài đặt cụ thể lớp Polygon Lớp Polygon Trong đồ Polygon dùng để mô tả khu rừng, quận … Boundary Polygon gồm tập Linearing Lớp GeometryCollection 151 ... đạt Sau sáu tháng tiến hành nghiên cứu triển khai đề tài luận văn “Tìm hiểu dịch vụ web cho ứng dụng GIS xây dựng ứng dụng minh họa khai thác dịch vụ? ?? chúng em gặp khơng khó khăn song đạt kết... xây dựng thành công hai ứng dụng minh họa khai thác dịch vụ WMS WFS Trong đó, chương trình OpenGISClientDemo minh họa đầy đủ giao tác hai dịch vụ Cịn chương trình OpenGISClientApplication phát... truy xuất thong tin đồ nhằm minh họa cho việc khai thác dịch vụ WMS Do thời gian hạn chế nên việc xây dựng ứng dụng minh họa chưa phong phú có quy mơ lớn Song đáp ứng mục tiêu đặt ban đầu đề

Ngày đăng: 30/07/2014, 17:20

TỪ KHÓA LIÊN QUAN