乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C#打造一個(gè)開源webgis(四)地圖客戶端(中)

       鴻楓nh 2018-09-13

      應(yīng)用場(chǎng)景

      做過(guò)開發(fā)的會(huì)遇到過(guò)這樣一個(gè)情景:

      1、寫了很多代碼做了一個(gè)系統(tǒng);

      2、后來(lái)又要做一個(gè)類似系統(tǒng),也有了設(shè)計(jì)模式概念,就把第一個(gè)系統(tǒng)的代碼抽調(diào)出來(lái),封裝成公用模塊或類庫(kù),供第二個(gè)系統(tǒng)使用;

      3、又有幾個(gè)類似的系統(tǒng)要做,為了減少工作效率,提煉出自己的一個(gè)框架。

      說(shuō)起這個(gè),就繞回到第一節(jié)提到過(guò)地圖系統(tǒng)架構(gòu)問(wèn)題,在這里主要就是地圖服務(wù)api的概念??梢韵胂笠幌拢緛?lái)做的GIS系統(tǒng)只支持桌面方式,突然說(shuō)要做出WebGiS,是不是要重新開發(fā)?沒(méi)必要,我們只需做一個(gè)共有的地圖服務(wù)接口供調(diào)用,無(wú)論是給桌面程序還是瀏覽器,都可以獲得一致的效果,這也就是從B/S和C/S轉(zhuǎn)向B/S/S和C/S/S概念,中間的S就是Application Server,我們把服務(wù)api部署在這里,基于此,我們又可以做一個(gè)DEMO。

      DEMO

      1、在此,借用一下WCF,創(chuàng)建控制臺(tái)程序,構(gòu)建解決方案如圖,由于只是簡(jiǎn)單演示,具體細(xì)節(jié)先不做深究:


      IDomain.cs、DomainService.cs、clentaccesspolicy.xml是為了實(shí)現(xiàn)跨域,Site是數(shù)據(jù)庫(kù)里的基站信息model,ISiteService和SiteService為模擬的地圖查詢服務(wù),具體代碼為:
      IDomain.cs
      1. [ServiceContract]
      2. public interface IDomain
      3. {
      4. [OperationContract]
      5. [WebGet(UriTemplate = "ClientAccessPolicy.xml")]
      6. Message ProvidePolicyFile();
      7. }
      ISiteService.cs
      1. [ServiceContract]
      2. public interface ISiteService
      3. {
      4. [OperationContract]
      5. List<Site> GetSites();
      6. }
      Site.cs
      1. [DataContract]
      2. public class Site
      3. {
      4. [DataMember]
      5. public string GID { get; set; }
      6. [DataMember]
      7. public string SiteName { get; set; }
      8. [DataMember]
      9. public string Geom { get; set; }
      10. }

      DomainService.cs
      1. public class DomainService : IDomain
      2. {
      3. public System.ServiceModel.Channels.Message ProvidePolicyFile()
      4. {
      5. MemoryStream ms = new MemoryStream();
      6. using (FileStream fs = File.OpenRead(@"clientaccesspolicy.xml"))
      7. {
      8. int length = (int)fs.Length;
      9. byte[] data = new byte[length];
      10. fs.Position = 0;
      11. fs.Read(data, 0, length);
      12. ms = new MemoryStream(data);
      13. }
      14. XmlReader reader = XmlReader.Create(ms);
      15. Message result = Message.CreateMessage(MessageVersion.None, "", reader);
      16. return result;
      17. }
      18. }

      SiteService.cs
      1. public class SiteService:ISiteService
      2. {
      3. private DataSet ds = new DataSet();
      4. private DataTable dt = new DataTable();
      5. public List<Site> GetSites()
      6. {
      7. List<Site> source = new List<Site>();
      8. try
      9. {
      10. // PostgeSQL-style connection string
      11. string connstring = String.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};", "localhost", "5432", "postgres", "sa", "postgis20");
      12. // Making connection with Npgsql provider
      13. NpgsqlConnection conn = new NpgsqlConnection(connstring);
      14. conn.Open();
      15. // quite complex sql statement
      16. // data adapter making request from our connection
      17. //string sql = "SELECT * from cellcover_region";
      18. string sql = "SELECT a.* FROM public.cellcover_region as a, site_font_point as b where b.gid=1 and ST_Within(b.geom,a.geom)";
      19. NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
      20. ds.Reset();
      21. // filling DataSet with result from NpgsqlDataAdapter
      22. da.Fill(ds);
      23. // since it C# DataSet can handle multiple tables, we will select first
      24. dt = ds.Tables[0];
      25. int count = dt.Rows.Count;
      26. for (int i = 0; i < count; i++)
      27. {
      28. DataRow dr = dt.Rows[i];
      29. Site site = new Site
      30. {
      31. GID = dr[0].ToString(),
      32. SiteName = dr[1].ToString(),
      33. Geom = dr[2].ToString()
      34. };
      35. source.Add(site);
      36. }
      37. conn.Close();
      38. }
      39. catch (Exception ex)
      40. {
      41. throw ex;
      42. }
      43. return source;
      44. }
      45. }

      Program.cs
      1. static void Main(string[] args)
      2. {
      3. ServiceHost host = new ServiceHost(typeof(SiteService));
      4. ServiceHost crossDomainserviceHost = new ServiceHost(typeof(DomainService));
      5. host.Opened += delegate
      6. {
      7. Console.WriteLine("服務(wù)已經(jīng)啟動(dòng),按任意鍵終止...");
      8. };
      9. crossDomainserviceHost.Opened += delegate
      10. {
      11. Console.WriteLine("跨域服務(wù)已經(jīng)啟動(dòng),按任意鍵終止...");
      12. };
      13. crossDomainserviceHost.Open();
      14. host.Open();
      15. Console.ReadKey();
      16. host.Close();
      17. host.Abort();
      18. crossDomainserviceHost.Close();
      19. crossDomainserviceHost.Abort();
      20. }


      編譯運(yùn)行,效果如圖,表示服務(wù)正常啟動(dòng):


      下面兩點(diǎn)在后續(xù)節(jié)中再做詳細(xì)補(bǔ)充:
      2、把上節(jié)做的silverlight客戶端,添加該WCF服務(wù),在交互過(guò)程中(如點(diǎn)擊圖元)調(diào)用服務(wù)方法,完成數(shù)據(jù)展現(xiàn)
      3、wpf做地圖客戶端,添加該WCF服務(wù),在交互過(guò)程中調(diào)用服務(wù),完成地圖展現(xiàn)

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多