C#打造一个开源webgis(四)地图客户端(中)
应用场景
做过开发的会遇到过这样一个情景:
1、写了很多代码做了一个系统;
2、后来又要做一个类似系统,也有了设计模式概念,就把第一个系统的代码抽调出来,封装成公用模块或类库,供第二个系统使用;
3、又有几个类似的系统要做,为了减少工作效率,提炼出自己的一个框架。
说起这个,就绕回到第一节提到过地图系统架构问题,在这里主要就是地图服务api的概念。可以想象一下,本来做的GIS系统只支持桌面方式,突然说要做出WebGiS,是不是要重新开发?没必要,我们只需做一个共有的地图服务接口供调用,无论是给桌面程序还是浏览器,都可以获得一致的效果,这也就是从B/S和C/S转向B/S/S和C/S/S概念,中间的S就是Application Server,我们把服务api部署在这里,基于此,我们又可以做一个DEMO。
DEMO
[ServiceContract]public interface IDomain{[OperationContract][WebGet(UriTemplate = "ClientAccessPolicy.xml")]Message ProvidePolicyFile();}
[ServiceContract]public interface ISiteService{[OperationContract]List<Site> GetSites();}
Site.cs
[DataContract]public class Site{[DataMember]public string GID { get; set; }[DataMember]public string SiteName { get; set; }[DataMember]public string Geom { get; set; }}
DomainService.cs
public class DomainService : IDomain{public System.ServiceModel.Channels.Message ProvidePolicyFile(){MemoryStream ms = new MemoryStream();using (FileStream fs = File.OpenRead(@"clientaccesspolicy.xml")){int length = (int)fs.Length;byte[] data = new byte[length];fs.Position = 0;fs.Read(data, 0, length);ms = new MemoryStream(data);}XmlReader reader = XmlReader.Create(ms);Message result = Message.CreateMessage(MessageVersion.None, "", reader);return result;}}
SiteService.cs
public class SiteService:ISiteService{private DataSet ds = new DataSet();private DataTable dt = new DataTable();public List<Site> GetSites(){List<Site> source = new List<Site>();try{// PostgeSQL-style connection string string connstring = String.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};", "localhost", "5432", "postgres", "sa", "postgis20");// Making connection with Npgsql provider NpgsqlConnection conn = new NpgsqlConnection(connstring);conn.Open();// quite complex sql statement // data adapter making request from our connection//string sql = "SELECT * from cellcover_region";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)";NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn); ds.Reset();// filling DataSet with result from NpgsqlDataAdapter da.Fill(ds);// since it C# DataSet can handle multiple tables, we will select first dt = ds.Tables[0]; int count = dt.Rows.Count;for (int i = 0; i < count; i++){DataRow dr = dt.Rows[i];Site site = new Site{GID = dr[0].ToString(),SiteName = dr[1].ToString(),Geom = dr[2].ToString()};source.Add(site);}conn.Close();}catch (Exception ex){throw ex;}return source;}}
Program.cs
static void Main(string[] args){ServiceHost host = new ServiceHost(typeof(SiteService));ServiceHost crossDomainserviceHost = new ServiceHost(typeof(DomainService));host.Opened += delegate{Console.WriteLine("服务已经启动,按任意键终止...");};crossDomainserviceHost.Opened += delegate{Console.WriteLine("跨域服务已经启动,按任意键终止...");};crossDomainserviceHost.Open();host.Open();Console.ReadKey();host.Close();host.Abort();crossDomainserviceHost.Close();crossDomainserviceHost.Abort();}
编译运行,效果如图,表示服务正常启动:
C#打造一个开源webgis(四)地图客户端(中)相关推荐
- 使用go的ssh包快速打造一个本地命令行ssh客户端
2019独角兽企业重金招聘Python工程师标准>>> 热身运动? 在开始之前,先来个热身运动.虽然标题党写着快速打造一个ssh客户端,但是和跑步一样,在运动前还是需要先热身一下,不 ...
- 开源地图服务器 网站,开源WebGIS:地图发布与地图服务
开源WebGIS:地图发布与地图服务 语音 编辑 锁定 讨论 上传视频 上传视频 本词条缺少信息栏.概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! <开源WebGIS:地图发布与 ...
- OpenHub——一个开源的GitHub Android客户端,快速简洁
OpenHub 一个开源的GitHub Android客户端,快速简洁,支持GitHub主要功能,支持主题.主颜色.语言切换,SO COOL的语法高亮. 特点 App 两种登录方式,(Basic Au ...
- python写一个crm系统_用Python打造一个CRM系统(四)
在上一篇中在本地进行初始化,并让项目顺利运行.在本篇中将实现一个线索管理模块,支持线索的增删改查. 新建线索应用模块 进入项目目录,使用django命令创建线索应用模块,命令如下: $ python ...
- WebGIS入门--如何做一个简单的校园地图服务网站
目录 OpenLayer库的配置 在HTML中调用 在JavaScript文件中调用 OpenLayer基础操作 显示地图(天地图API) 百度地图API与天地图API 坐标系转换之百度地图 坐标系转 ...
- 从零打造一个Web地图引擎
说到地图,大家一定很熟悉,平时应该都使用过百度地图.高德地图.腾讯地图等,如果涉及到地图相关的开发需求,也有很多选择,比如前面的几个地图都会提供一套js API,此外也有一些开源地图框架可以使用,比如 ...
- 【灯哥开源四足机器人】推荐一个开源四足机器狗项目,8自有度,两个舵机控制一个腿,apache开源协议的,已经迭代了好多个版本了,设计的非常好。有官方淘宝店,没有3D打印机的可以购买散装零件自己组装
目录 前言 1,关于[灯哥开源四足机器人] 2,使用py-apple 3,总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/detail ...
- 用Javascript开发《三国志曹操传》-开源讲座(四)-用地图块拼成大地图
小时候我们玩过拼图游戏,是用自己的手去拼的.今天我们来研究研究用javascript来拼图.同样是拼图,但用js拼图要比用手拼图麻烦多了,因此以后我要把它优化成引擎. 一.前言 以上是一段导语,话不扯 ...
- python项目源码 日程管理软件_分享:一个开源的基于时间管理四象限的待办管理工具...
在完成这篇文章里要分享的一个开源小工具 todolist 之前,在网上找了不少日程管理,待办管理的小工具:开源的.收费的.有广告.需要注册的那也是不少: 根据自己平时的工作习惯:以及对时间管理的学习理 ...
- 服务器端配置正方教务系统,手把手带你打造一个教务系统客户端(附源码)
本篇博客主要和大家分享编写一个学校教务系统的客户端版本,主要是关于登录以及数据获取方面,结尾还会附上本人以前编写的客户端源代码,有兴趣的可以自行下载玩耍~ 阅读本文大概需要5分钟. 前言 好久没有更新 ...
最新文章
- 学python需要学数据库吗-python可以使用什么数据库
- <力扣>-----利用哈希表来判断是否存在重复元素
- 经典C语言程序100例之四二
- [Windows]查看运行进程的参数【wmic】
- CSS一些实用的技巧
- C++静态类型成员变量的初始化顺序(单例模式)
- js异步请求php数据,原生JS发送异步数据请求实例详解
- linux中磁盘的iused,Linux 磁盘与文件系统管理
- easyui 年份下拉框的构建
- [翻译] REST API必须是超文本驱动的
- ZCuPb10Sn10铸造锡青铜板ZCuPb10Sn10力学性能
- 收文和发文管理流程分析
- 【2018.12.28】百度网盘永久保存2T容量办法
- DataFrame-删除行列
- Jackson Json 快速入门
- 昨天国际电子商情网站贴出了一篇文章《再论企业核心竞争力:为“黑芯”联发科喊冤》,引来争论无数
- 金蝶云星空和钉钉接口打通对接实战
- Mac电脑的一键切换输入法神器,自动切换输入法!
- 古希腊神话故事:狄俄尼索斯
- *继承IObjectSafety接口,实现vb activeX控件安全性(IE不提示安全问题)