Up ban tin GPS len Google earth

Màu nền
Font chữ
Font size
Chiều cao dòng

CHƯƠNG 5    (here)

  HỆ THỐNG SERVER TRUNG TÂM

Hệ thống server trung tâm sẽ thực hiện hai nhiệm vụ chính : nhiệm vụ đầu tiên là quản lý các kết nối đến từ các xe, với mỗi xe tương ứng với một mã xe, cụ thể yêu cầu của hãng Taxi Sông Nhuệ đó là kết nối 150 xe với trung tâm, với mỗi xe được phân biệt bởi mã xe, cách đánh mã xe của hãng dựa vào biển số của mỗi xe. Ví dụ : xe taxi mang biển 29X-1133 sẽ tương ứng với mã xe : X1133… Nhiệm vụ thứ hai là xử lý dữ liệu của 150 xe gửi về trung tâm, sau đó ứng với mỗi xe sẽ hiển thị lên bản đồ Google Earth tương ứng với một Icon có tên là mã xe của xe đó.

Hiện nay, giá của một thiết bị định vị GPS trong đồ án mà em thực hiện vào khoảng 2 triệu đồng (số lượng là 1 thiết bị), nhưng khi triển khai cho hãng Taxi Sông Nhuệ với số lượng 150 xe thì giá thành sẽ giảm, khoảng 1.5triệu/1thiết bị, như vậy tổng chi phí thực hiện cho dự án của Taxi Sông Nhuệ vào khoảng 1.5triệux150 = 225triệu. Hãng taxi Sông Nhuệ đang sử dụng phương thức định vị bằng Cell tổ ong của mạng GSM với sai số rất lớn khoảng 50m đến 100m, và mỗi xe sẽ liên lạc với trung tâm bằng bộ đàm dùng tần số VHF, theo em được biết chi phí cho một thiết bị định vị của hãng vào khoảng 10 triệu đến 15 triệu. Như vậy ta có thể thấy lại một lần nữa bài toán về kinh tế của thiết bị định vị mà em nghiên cứu tối ưu hơn rất nhiều.

Giải pháp cho Server trung tâm, trong đồ án của mình, em sử dụng phần mềm C# của hãng Microsoft để lập trình. Em sẽ tách chương trình server trung tâm thành hai mảng ứng với hai nhiệm vụ riêng biệt : mảng lập trình mạng TCP/IP và xử lý dữ liệu của các xe gửi về rồi hiển thị tọa độ vị trí lên bản đồ Google Earth.

5.1. QUẢN LÝ CÁC KẾT NỐI VỚI THIẾT BỊ ĐỊNH VỊ     

            Server trung tâm là chương trình chạy trên máy tính cho phép truyền nhận các gói TCP với các module SIM548C sử dụng dịch vụ GPRS. Ngoài ra, GPRS TCP Server còn có chức năng tổ chức kiểm soát các module, làm chủ các kết nối và xây dựng các ứng dụng trên lớp TCP/IP.

            Quản lí các kết nối và các trạng thái kết nối: các kết nối từ các module SIM548C đến Server trung tâm đều được chấp thuận. Tuy nhiên kết nối đó sẽ bị hủy nếu module không đăng nhập, hoặc không truyền nhận dữ liệu sau một quãng thời gian.

         Server trung tâmphải lắng nghe bằng lớp System.Net.Sockets.TcpListener. Mỗi khi một kết nối được thiết lập, giữa Server trung tâm với module SIM548C đều có thể giao tiếp bằng lớp System.Net.Sockets.TcpListener.

// Server trung tâm lắng nghe các kết nối từ các module SIM548C trên cổng 8080

// sử dụng các lớp hỗ trợ sẵn trong việc lập trình mạng

using System.Net.Sockets;

using System.Threading;

//khởi tạo một lớp TcpListener, TcpClient

TcpListener myTcpListener;

TcpClient myClient;

//chương trình lắng nghe ở cổng 8080               

String hostname = Dns.GetHostName();

IPHostEntry hostEntry = Dns.GetHostEntry(hostname);

IPAddress ipAddr=hostEntry.AddressList[0];//địa chỉ Ip của Server trung tâm

myTcpListener= new TcpListener(ipAddr,Convert.ToInt32("8080"));

myTcpListener.Start(); //bắt đầu lắng nghe

// khi một kết nối được thiết lập, server trung tâm lắng nghe gửi và nhận dữ liệu với các module SIM548C

 myClient = myTcpListener.AcceptTcpClient();  //chấp nhận kết nối

Giải pháp cho Server trung tâm :

· Khi có một yêu cầu thực hiện kết nối, kiểm tra địa chỉ IP, nếu là địa chỉ IP lạ thì hủy kết nối.

· Nếu địa chỉ IP phù hợp, cho phép thực hiện kết nối, bật timer và chờ “login”.Nếu “time-out” thì hủy kết nối nhằm tiết kiệm tài nguyên. Thời gian “time-out” khoảng dưới 1 phút, vì kết nối mà không truyền nhận dữ liệu để “login” thì hệ thống mạng GPRS cũng sẽ tự động hủy kết nối. Nếu sau một số lần login không thành công, kết nối cũng sẽ bị hủy.

· Login thành công thì cho phép truyền nhận dữ liệu, nhưng nếu sau một khoảng thời gian không nhận được dữ liệu từ kết nối trên, kết nối cũng sẽ bị hủy nhằm tiết kiệm tài nguyên. Qua thực tế kiểm nghiệm các mạng GPRS hiện hành, mặc dù kết nối đã bị hủy bởi hệ thống mạng, nhưng phía module và Server trung tâm vẫn không nhận biết được trạng thái đường truyền đã bị hủy. Hơn nữa kết nối cũng sẽ tự động bị hủy bởi hệ thống mạng sau một thời gian không có dữ liệu truyền nhận trên kết nối đó. Thời gian “time-out” cho phép trong giai đoạn này khoảng vài giờ đồng hồ, tuy nhiên tốt nhất là nên hủy kết nối sau khoảng thời gian ngắn hơn, khoảng vài phút. Thao tác này giúp giảm bớt rủi ro của các liên kết truyền nhận dữ liệu trong quá trình vận hành hệ thống.

· Xây dựng protocol: tùy theo mục đích sử dụng của dữ liệu, ta có thể xây dựng một protocol phù hợp. Đây là protocol được sử dụng trong quá trình thử nghiệm ứng dụng GPRS:

_ login,UserID,password: dùng cho thao tác login.

_ data,UserID,nội dung dữ liệu: dùng cho quá trình truyền nhận dữ liệu.

Kết hợp hai phương thức truyền nhận dữ liệu bằng GPRS và SMS.

Ứng dụng GPRS trong truyền nhận dữ liệu mang lại nhiều ưu thế hơn so với SMS:

· Chi phí duy trì hệ thống thấp hơn rất nhiều lần so với SMS.

· Tốc độ nhanh, dung lượng thông tin cho phép truyền tải lớn.

· Độ tin cậy cao.

· Chủ động được trạng thái đường truyền.

· Tương thích với nhiều mô hình ứng dụng, từ đơn giản đến phức tạp.

Tuy nhiên trong thực tế, hạn chế của GPRS là vùng phủ sóng. Các mạng cung cấp dịch vụ GPRS tại Việt Nam chỉ mới phủ sóng GPRS ở các khu vực trung tâm hoặc thành phố. Sự kết hợp giữa hai phương thức này có khả năng mang lại một giải pháp hoàn thiện cho ứng dụng.SMS có thể được sử dụng để cập nhật địa chỉ IP của server trong trường hợp Server trung tâm không có được một địa chỉ IP tĩnh.

Ngoài ra, trong trường hợp vị trí hiện tại của module không được hỗ trợ sóng GPRS, có thể tạm thời thay thế đường truyền dữ liệu GPRS bằng dịch vụ SMS. Giải pháp này vừa tiết kiệm chi phí duy trì hệ thống, vừa đáp ứng được phần nào nhu cầu cải thiện chất lượng đường truyền qua dịch vụ SMS.

5.2.  XỬ LÝ DỮ LIỆU NHẬN ĐƯỢC TỪ MODULE SIM548C - HIỂN THỊ TỌA ĐỘ VỊ TRÍ CỦA XE LÊN BẢN ĐỒ GOOGLE EARTH

5.2.1. Giới thiệu bản đồ số Google Earth

  - Bản đồ Google Earth là bản đồ số được xây dựng và phát triển bởi hãng phần mềm nổi tiếng Google.

 - Google Earth là phiên bản được dùng miễn phí. Có thể xem trực tuyến trên Internet hoặc cũng có thể được tải về từ trên mạng. Phiên bản mới nhất được cập nhật vào tháng 5 – 2009.

 - Trên Google Earth ta có thể thấy được tất cả các vị trí trên trái đất khi biết tọa độ của vị trí đấy. Trên bản đồ ta có thể thấy được tên các quốc gia, tên thủ đô, các tỉnh thành phố, tên phố….

 - Google Earth có xây dựng sẵn một số thư viện để ta có thể tạo các Icon, các đường thẳng  màu …hiển thị lên bản đồ( do được hỗ trợ bởi thư viện GEPlugin).

Hình 5.1. Bản đồ số Google Earth

5.2.2. Xử lý dữ liệu và hiển thị tọa độ vị trí lên bản đồ Google Earth

5.2.2.1. Xử lý dữ liệu GPS

            Dữ liệu GPS được gửi từ các thiết bị di động như đã nói ở chương trước, nó có dạng vido*kinhdo

            Sử dụng phần mềm C # để tách thành kinh độ, vĩ độ riêng biệt, sau đó dùng thuật toán để đưa về định dạng tọa độ kinh độ, vĩ độ của bản đồ Google Earth.

            Ở đây em sẽ đưa ra một đoạn code để ta cùng phân tích :

   int receiv = 0;   // khởi tạo biến nhận

   receiv = myClient.Client.Receive(data) //dữ liệu gửi về trung tâm sẽ được lưu vào            

    receivdata = Encoding.UTF8.GetString(data, 0, receiv).TrimEnd(); // chuyển đổi

                                                                                                           // sang mã UTF8

      string[] datacut = receivdata.Split('*'); // datacut[0] =kinh độ , datacut[1] = vĩ độ.

// Giải thuật biến đổi kinh độ (ví dụ 1234.567 )nhận được thành kinh độ của bản đồ

Double dLat = Convert.ToDouble(datacut[0]) // chuyển kinh độ sang dạng số thực

dLat = dLat / 100;             //vd dLat = 12.34567

string[] lat = dLat.ToString().Split('.');//lat[0] =12 ,lat[1] = 34567

Double dlat1 = dLat - Convert.ToDouble(lat[0]); //dlat1 = 0.34567

dlat1 = dlat1 * 100; //dlat1 = 34.567  

La2 = (dlat1 * 10000000) / 60;

string[] lat3 = La2.ToString().Split('.');

La3 = Convert.ToDouble(lat3[0]);

La3 = La3 / 10000000;

La = Convert.ToDouble(lat[0]) + La3; // Kinh độ của bản đồ Google Earth

// Giải thuật biến đổi vĩ độ (ví dụ 12345.67 )nhận được thành kinh độ của bản đồ

   Double dLat = Convert.ToDouble(datacut[0]) // chuyển vĩ độ sang dạng số thực

   dLat = dLat / 100;             //vd dLat = 123.4567

   string[] lon = dLon.ToString().Split('.');//lat[0] =độ ,lat[1] = 4567

  Double dlon1 = dLon - Convert.ToDouble(lon[0]); //dlat1 = 0. 4567

  dlon1 = dlon1 * 100; //dlat1 = 45.67

  Lo2 = (dlon1 * 10000000) / 60;

   string[] lon3 = Lo2.ToString().Split('.');

   Lo3 = Convert.ToDouble(lon3[0]);

   Lo3 = Lo3 / 10000000;

   Lo = Convert.ToDouble(lon[0]) + Lo3; // Vĩ độ của bản đồ Google Earth

5.2.2.2. Hiển thị tọa độ vị trí lên bản đồ Google Earth

            Sau khi tách và biến đổi thành dạng kinh độ, vi độ của bản đồ Google Earth. Tiếp theo em sẽ dùng các thư viện (thư viện GEPlugin) được hỗ trợ sẵn của Google Earth để thực hiện việc hiển thị Icon trên bản đồ tương ứng với vị trí kinh độ vĩ độ đã biết.

   var ge= null ;

   ge = pluginInstance;  // tạo một lớp bản đồ trong thư viện GEPlugin

   function MakePlacemark(a,b)  // chương trình tạo Icon với a là kinh độ, b là vĩ độ

   {       

             // lớp hàm lấy tên đường phố, tên các nước hiển thị bản đồ 

            ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, 1000);

            ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, 1000);

            ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, 1000);

            ge.getOptions().setStatusBarVisibility(1000);   

            var lookAt = ge.createLookAt("");

            lookAt.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);

            lookAt.setLatitude(a);

            lookAt.setLongitude(b);           

            lookAt.setRange(2500);                                           

            ge.getOptions().setFlyToSpeed(5);        

            lookAt.setTilt(80);

            ge.getView().setAbstractView(lookAt);                

             // khởi tạo kiểu Icon

            var placemark = ge.createPlacemark("");           

            var icon = ge.createIcon("");          

            icon.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');

            var style = ge.createStyle("");

            style.getIconStyle().setIcon(icon);

            placemark.setStyleSelector(style);         

           // khởi tạo Icon

           var point = ge.createPoint("");

           point.setLatitude(lookAt.getLatitude());

           point.setLongitude(lookAt.getLongitude());

           point.setAltitude(1);

           point.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);

           placemark.setGeometry(point);       

           return placemark;      

     }

Bạn đang đọc truyện trên: Truyen2U.Pro