《广州市白云区慢性病地理信息系》项目研发阶段性总结
作者:曾国喜
本次任务完成时间:2018年3月13日~2018年4月13日
语言:C#.NET MVC GIS(SuperMap Desktop超图的地图绘制软件)
数据库:sql
完成模块功能(我的部分):前台:区域定位、查询搜索、路径查询、周边查询、工具箱
后台:用户管理、角色管理、日志管理、数据管理
一、目录
1、软件概述
1.1、目的和意义
随着网络的迅速发展,网络社会的现代化,更方便管理社会,为了地区病例分布、活动状况、以及医院分布等数据统计,于是运用到了网络系统,对数据精确分类、病资料查询等方面进行系统化,这更有利于人们对病人和病原的了解。
1.2、功能概述
在满足用户需求的前提下,对病人数据进行分析,从而得到系统需要实现的具体功能。前台主要模块:区域定位、查询搜索、路径查询、周边分析、工具箱、
后台主要模块:用户管理、角色管理、日志管理、数据管理(导入导出数据和基础数据)
2、运行环境
3.1、硬件
CPU:Intel Core i5系列
内存:4GB
硬盘:120GB可用空间
输入:键盘、鼠标
输出:显示器
3.2、支持软件
(1)、Microsoft Windows8及其以上版本(操作系统名称及版本号);
(2)、Visual Studio 2015(语言编译系统的名称及版本号);
(3)、Microsoft SQL Server 2014(数据库管理系统的名称及版本号);
3、使用说明
3.1、软件部署
前台需要supermap_iserver_8.1.1a_win32_zip
4、总体设计
4.1系统模块总体设计:
1、前台:
(1)区域定位。对广州白云区的镇级、街道等进行划分,当点击其中一项时跳转到对应区域。
(2)查询搜索。主要对某个点进行定位查询,其中包括公司、病例号等。
(3)路径查询。主要包括病人活动路径和病原活动路径进行查询,分别以栅格、节点线段显示。
(4)周边查询。加强版的查询,它是以一个点为中心的N半径圆进行所在区域内点的查询。
(5)工具箱。主要包括测距、测面积、圆形查询、自定义查询、预警、图层(主)、清除。
2、后台:
(1)用户管理。主要对用户的新增删除修改。
(2)角色管理。主要对角色的新增删除修改、以及权限的管理。
(3)日志管理。主要包括查询和管理员操作后台进行数据记录。
(4)数据管理。主要分为基础数据和数据导出导入,基础数据即对基础数据的操作。
3、对上述各项功能进行集中、分块,按照结构化程序设计的要求,得到如下所示的系统功能模块图如图1所示。
图1
4.2、数据库总体设计(后台)
4.2.1表目录
表名 |
说明 |
类型 |
User |
用户 |
基础表 |
ActivityPath |
活动路径 |
业务表 |
DrugSuspiciousCan |
预防病原 |
业务表 |
EpidemicSituation |
疫情 |
业务表 |
Gene |
基因 |
基础表 |
Jurisdiction |
管辖权 |
业务表 |
JurisdictionDetail |
管辖明细 |
业务表 |
Log |
日志 |
基础表 |
Party |
用户信息 |
业务表 |
Patient |
病人属性 |
基础表 |
Property |
基础 |
业务表 |
PropertyDetail |
病人信息 |
业务表 |
RegistrationForm |
登记表 |
业务表 |
表3
4.2.2基础表
(1)用户表(user)
主要包含如下字段信息:UserID、PartyID 、JdtionID、UserName、UserPW、FoundTime、useBit
列名 |
数据类型 |
主键/外键 |
说明 |
UserID |
Int |
主键 |
用户ID |
PartyID |
Int |
外键 |
用户信息ID |
JdtionID |
Int |
外键 |
|
UserName |
Nvarchr |
|
用户名 |
UserPW |
Nvarchr |
|
密码 |
FoundTime |
Date |
|
创建时间 |
useBit |
Bit |
|
是否使用 |
表4
(2)基因表(Gene)
主要包含如下字段信息:GeneID、PatientID、SampleNumber、ClinicNumber、SnpSite、MutationGene、ChromosomeLocation
列名 |
数据类型 |
主键/外键 |
说明 |
GeneID |
Int |
主键 |
基因ID |
PatientID |
Int |
外键 |
病人ID |
SampleNumber |
Nvarchr |
|
样本数 |
ClinicNumber |
Nvarchr |
|
诊所号码 |
SnpSite |
Nvarchr |
|
SNP位点 |
MutationGene |
Nvarchr |
|
突变基因 |
ChromosomeLocation |
Nvarchr |
|
染色体定位 |
表5
(3)日志表(Log)
主要包含如下字段信息:LogID、UserID、OperateAction、OperateTime
列名 |
数据类型 |
主键/外键 |
说明 |
LogID |
Int |
主键 |
日志ID |
UserID |
Int |
外键 |
用户ID |
OperateAction |
Nvarchr |
|
操作详情 |
OperateTime |
Nvarchr |
|
操作时间 |
表6
(4)病人表(Patient)
主要包含如下字段信息:PatientID、SexID、CrowdClassifyID、CardNumber、PatientName、PIN、DateOfBirth、Age、WorkUnit、PatientAttribute、NowDetailedAddress、CurrentAddress、Ethnic、Career、H_RegistrationAddress、NationalStandard、TheStandard、PatientSource、
列名 |
数据类型 |
主键/外键 |
说明 |
PatientID |
Int |
主键 |
病人ID |
SexID |
Int |
外键 |
性别ID |
CrowdClassifyID |
Int |
外键 |
人群分类ID |
CardNumber |
Nvarchr |
|
卡号 |
PatientName |
Nvarchr |
|
病人姓名 |
PIN |
Nvarchr |
|
PIN |
DateOfBirth |
Date |
|
生日 |
Age |
Int |
|
年龄 |
WorkUnit |
Nvarchr |
|
工作单位 |
PatientAttribute |
Nvarchr |
|
病人阶段 |
NowDetailedAddress |
Nvarchr |
|
现住地址 |
CurrentAddress |
Nvarchr |
|
中点 |
Ethnic |
Nvarchr |
|
民族 |
Career |
Nvarchr |
|
职业 |
H_RegistrationAddress |
Nvarchr |
|
X轴 |
NationalStandard |
Nvarchr |
|
Y轴 |
TheStandard |
Nvarchr |
|
标准 |
PatientSource |
Nvarchr |
|
病人来源 |
表7
4.2.3业务表
(5)活动路径表(ActivityPath)
主要包含如下字段信息:ActivityPathID、PatientID、SmX、SmY、ActivityTime、ActivityAddress。
列名 |
数据类型 |
主键/外键 |
说明 |
ActivityPathID |
Int |
主键 |
活动路径ID |
PatientID |
Int |
外键 |
病人ID |
SmX |
Float |
|
X轴 |
SmY |
Float |
|
Y轴 |
ActivityTime |
Date |
|
活动时间 |
ActivityAddress |
Nvarchar |
|
活动地址 |
表8
(6)预防病原表(DrugSuspiciousCan)
主要包含如下字段信息:QuestionableID、PatientID、TP_Number、DSTR_Isoniazid、DSTR_Rifampicin、DrugFastDiagnosis。
列名 |
数据类型 |
主键/外键 |
说明 |
QuestionableID |
Int |
主键 |
预防病原ID |
PatientID |
Int |
外键 |
病人ID |
TP_Number |
Nvarchar |
|
Tp_数 |
DSTR_Isoniazid |
Nvarchar |
|
DSTR _异烟肼 |
DSTR_Rifampicin |
Nvarchar |
|
DSTR _利福平 |
DrugFastDiagnosis |
Nvarchar |
|
药物快速诊断 |
表9
(7)疫情表(EpidemicSituation)
主要包含如下字段信息:OutbreakID、PatientID、CaseClassificationID、DateOfOnset、DiagnosisTime、DiseaseName、ReviewStatus、RevisedFinalTime、Remarks。
列名 |
数据类型 |
主键/外键 |
说明 |
OutbreakID |
Int |
主键 |
疫情ID |
PatientID |
Int |
外键 |
病人ID |
CaseClassificationID |
Int |
外键 |
病例类型 |
DateOfOnset |
Date |
|
发病日期 |
DiagnosisTime |
Datetime |
|
诊断时间 |
DiseaseName |
Nvarchar |
|
病名 |
ReviewStatus |
Nvarchar |
|
审查状况 |
RevisedFinalTime |
Datetime |
|
修正后的最后期限 |
Remarks |
Nvarchar |
|
备注 |
表10
(8)管辖权表(Jurisdiction)
主要包含如下字段信息:JdtionID、PositionTypeID、DepartmentTypeID、RoleTypeID、
列名 |
数据类型 |
主键/外键 |
说明 |
JdtionID |
Int |
主键 |
管辖权ID |
PositionTypeID |
Int |
外键 |
位置类型ID |
DepartmentTypeID |
Int |
外键 |
部门类型ID |
RoleTypeID |
Int |
外键 |
角色类型ID |
表11
(9)管辖明细表(JurisdictionDetail)
主要包含如下字段信息:JdtionDetailID、JdtionID、DFR_JdtionID、ResourceBit、
列名 |
数据类型 |
主键/外键 |
说明 |
JdtionDetailID |
Int |
主键 |
管辖明细ID |
JdtionID |
Int |
外键 |
管辖权ID |
DFR_JdtionID |
Int |
外键 |
DFR_ID |
ResourceBit |
Bit |
|
资源 |
表12
(10)用户信息表(Party)
主要包含如下字段信息:PartyID、SexID、DFR_ PartyName、PIN、Address、PhoneNumber、Postbox、Remark
列名 |
数据类型 |
主键/外键 |
说明 |
PartyID |
Int |
主键 |
用户信息ID |
SexID |
Int |
外键 |
性别ID |
PartyName |
Nvarchar |
|
用户名 |
PIN |
Nvarchar |
|
PIN |
Address |
Nvarchar |
|
地址 |
PhoneNumber |
Nvarchar |
|
电话号码 |
Postbox |
Nvarchar |
|
邮箱 |
Remark |
Nvarchar |
|
备注 |
表13
(11)病人属性表(Property)
主要包含如下字段信息:PropertyID、PropertyName、PropertyDetailed、
列名 |
数据类型 |
主键/外键 |
说明 |
PropertyID |
Int |
主键 |
病人属性ID |
PropertyName |
Nvarchar |
|
属性名 |
PropertyDetailed |
Nvarchar |
|
详细财产 |
表14
(12)病人信息表(PropertyDetail)
主要包含如下字段信息:PropertyDetailID、PropertyID、PropertyDetailName、PropertyDetailDescribe、
列名 |
数据类型 |
主键/外键 |
说明 |
PropertyDetailID |
Int |
主键 |
病人信息ID |
PropertyID |
Int |
外键 |
病人ID |
PropertyDetailName |
Nvarchar |
|
属性明细名称 |
PropertyDetailDescribe |
Nvarchar |
|
属性细节描述 |
表15
(13)登记表(RegistrationForm)
主要包含如下字段信息:RegistrationID、PatientID、R_CategoryID、T_CategoryID、RegistrationNumber、TD_Symptoms、TD_FirstVisit、TD_Diagnosis、ThePatientType、Diagnosis、IsWhetherSevere、DrugResistance、RegistrationDate、CurrentSupervisionUnit、StopReason、StopTime、MedicalStatus
列名 |
数据类型 |
主键/外键 |
说明 |
RegistrationID |
Int |
主键 |
登记ID |
PatientID |
Int |
外键 |
病人ID |
R_CategoryID |
Int |
外键 |
R_分类ID |
T_CategoryID |
Int |
外键 |
T_分类ID |
RegistrationNumber |
Nvarchar |
|
注册号 |
TD_Symptoms |
Date |
|
TD_症状时间 |
TD_FirstVisit |
Date |
|
TD_首次时间 |
TD_Diagnosis |
Data |
|
TD_诊断时间 |
ThePatientType |
Nvarchar |
|
病人类型 |
Diagnosis |
Nvarchar |
|
诊断 |
IsWhetherSevere |
Bit |
|
是否严重 |
DrugResistance |
Nvarchar |
|
耐药性 |
RegistrationDate |
Data |
|
注册日期 |
CurrentSupervisionUnit |
Nvarchar |
|
监测单元 |
StopReason |
Nvarchar |
|
停止原因 |
StopTime |
Data |
|
停止时间 |
MedicalStatus |
Nvarchar |
|
医疗状况 |
表16
5、详细设计
5.1总模板
5.1.1 业务流程图
无
5.1.2 操作说明
前台
1、查询搜索:在里面定击下拉框分病例门诊号查询、卡片号查询、项目登记号查询,可进行模糊查询。
(1)查询出的点,可进行单击(弹出当前点信息);
2、周边查询:以任意点为中心画圆,并且查询出圆内的医院、社康、药店、病例…。
(1)可对查出的点进行点击,同样会显示对应点信息,且还可以以对应点作为中心点再次查询。
3、工具箱:主要分为测距、侧面积、圆查询、自定义查询、方框查询、图层、预警、清除功能。
(1)测距:(测量所选两点距离)
(2)测面积:(测量所选面积)
(3)圆形查询和自定义查询(显示区域内医院信息)
(4)图层:包括白云区医院图层、社康分布图层、药店分布图层、病例分布散点图层、病例热力分布图层和病原基因分布图层。
后台
1、日志:记录了管理员在后台的各种操作,还可以查询对应用户或在某时间区间内的数据。
2、Excel模板导入导出
(1)导出
(2)导入
3、基础属性
(1)对基础字典进行添加数据类和修改它的名称,且还可以新增、删除、修改里面的属性值。
1、Excel到版本的切换
2、路径的引用(显示地图用切图)
6、项目总结
GIS项目,就是以地图为基础,通过点、线、面集合,进行交互编织成一个二维地图。主要核心图层(把数据汇集于某一图层通过查询把数据以点、线、面形式显示在当前图层)。
在正开始做时我几乎崩溃了(同学们也是),还记得前一周开始讲课,一周都围绕SuperMap iDeskeop 8C制作地图讲课,而GIS项目用了不到一节课讲,牢骚就不发了,言归正传。做这GIS项目遇到问题多不多久不说了。首先,在做时你要了解什么是新建矢量图层和画面控制,矢量图层是画面控制里的属性值,而画面控制要调用则要写入map = new SuperMap.Map("map", {controls:[ new SuperMap.Control.ScaleLine(),n] 在N位置里才生效(注意多个画面控制器写入有先后循序,及覆盖问题),还有个比较易忽略的矢量图层也需要些入map.addLayers([])里(方便显示控制,要不就要设置矢量是否显示),地图进行设定缩放的级别层数,对瓦片发布地图无效,同样对设置地图打开初始大小属性等级对应出错(这是由于瓦片切割层数大于15的缩放级别,即切了大于15的级别切片,对于切片其实没必要切太多层,主要围绕最大层,因为最大层显示我们需要的数据),对于我为什么用切片作为地图显示,那是因正常发布的地图在项目中加载慢且有时卡死,所有我就用了瓦片作为显示发布的地图作为数据交互(正常情况只以发布地图作为显示和数据交互),正常发布的地图是数据集形成的地图,发布瓦片则是对数据集形成的地图进行切割,最终形成一层层的图(瓦片地图和(点)数据集有时位置对应不够精确,最好用地图数据进行查询,不要在后台进行查询)。还有个清除图层,清除往往需要清除矢量图层和画面控制器(要不会出现鼠标效果残留,会印象下面操作)。
其次就是监听器事件,在创建画面控制器时会注册监听器事件,就是当次画面控制器调用时,会执行监听器事件,而监听器事件里往往有细分为鼠标点击事件、图标移动事件…这样更有利于代码的扩展。还有个是向服务端传递参数,然后服务端返回对象。总之,就是一级一级调用到地层方法再放回。还有就是关于图片路径书写,对于src等, 往往写法src="~/Content/CCSS/img/152.jpg"而对URl写法 url('../../Content/Im ages/theme_img/152.png'),如果把../../替换成~/有很大几率读取不到图片路径。
后台的导入导出Excel数据,由于之前教学引用旧版Excel引用,只读取.xls 格式的Excel, 要读取新版.xlsx则需要引用新版的Excel引用,它能兼容旧版的。对于导入导出Excel还要注意下控制器这边的头部标题和创建sheet1各个行要对应且类型也要和数据库对应。
对于本次项目,可以说是瞎打正着,因为百度上少有人写这些问题(不是说上网搜索不重要,相反它是我们现阶段不能离开的),而我则只有多问多看,还有就是做笔记很重要。