作者:唐国铭
开发工具与关键技术:SuperMap iDesktop9D、iServer、Visual Studio 2015、Sql、.Net、C#
完成模块功能:区域定位、查询搜索、周边分析、最佳路径分析、图层显示器
一、功能实现
区域定位主要是对此地区街道的定位功能。
(1)区域定位:见图1,是区域定位模块实现界面。
图1 区域定位模块
点击左边区域定位下的街道,自动定位到此街道
图2 街道定位
(2)查询搜索
查询搜索包括地址查询、公司企业查询、病例门诊号查询、卡片编号、项目登记号功能模块
见图3
图3查询搜索
地址查询:输入详细地址点击查询,会自动定位到此地点并把地址信息弹出来,
图4地址查询
公司企业:在输入框中可以精确的输入公司企业的名称进行查询,也可以输入公司企业的关键字进行模糊查询,模糊查询的的结果会一一列举出来。在列举出来的公司,找到你要的公司企业并单击,结果会在地图上进行定位出来。
图5公司企业查询
病例门诊号查询、卡片编号查询、项目登记号差爱心:在输入框中,可以精确的输入患者的门诊号、卡片编号、项目登记号进行查询,也可以输入病例门诊号、卡片编号、项目登记号的关键字进行模糊查询,模糊的结果会在右边的侧边栏里显示,单击侧边栏中的任意结果 ,如果这病例门诊号、卡片编号或项目登记号没有被注销,则可以在地图上定位出位置。
图6病例门诊号查询
(3)周边分析
周边分析包括定随意定一个点的分析查询,还有以某一医院、社康、药店、病例进行的周边查询
(其中原理一致)
在地图上选择一个中心点,这里默认半径为500,最大给了2000,查询目标默认查询药店和社康,查询目标最多只能选择6个,点击查询在此范围内所选的查询目标会显示出来,点击icon图标可查看详细信息
图7.1周边分析:以某一点的查询
图7.21周边分析:以某一医院、社康、药店、病例的查询
(4)最佳路径分析
在此之前先到SuperMap iDesktop9D里构建好二位网格,再进行拓扑处理测试好后进行编码,
操作:在地图上选取多个点,点击提交,可规划最佳路径
图8最佳路径分析
(5)图层管理器
包括医院、社康、药店、病例等图层
鼠标移动到右侧方块图标,显示图层,点击打钩显示图层信息
图9图层显示器
二、经典代码
简单创建图层信息
//1) 先声明参数新建点矢量图层
//新建点矢量图层
var BingLi1 = new SuperMap.Layer.Vector("病例分布散点图", { visibility: false });
//2) 往map中添加图层参数
function addLayer() {
// 向Map中添加图层
map.addLayers([
layer,vectorLayer_WG,DingWei,markerLayers,vectorLayer,
BingLi1, YaoDian, SheKang, YiYuan, QuanLayer, markerLayer
]);
//显示地图
map.setCenter(new SuperMap.LonLat(113.82245, 22.70002),1);
map.setBaseLayer(layer);
}
// 3) 创建要素选择控件并激活
//要素选择控件,该控件实现在指定的的图层上通过鼠标单击和悬浮选择矢量要素。
selectFeature = new SuperMap.Control.SelectFeature([BingLi1, YiYuan, SheKang, YaoDian, QuanLayer, DingWei],
{ onSelect: onFeatureSelect, onUnselect: onUnFeatureSelect, repeat: true });
//map上添加控件vectorLayergetMousePositionPx
map.addControl(selectFeature);
//激活控件
selectFeature.activate();
//4) 查询方法查询出信息并添加到图层
//病例分布散点图层管理
function BingLiSQL() {
$.post("SelectPatientInfo", function (data) {
processCompletedingBingli(data);
})
}
//病例
function processCompletedingBingli(queryEventArgs) {
var i, feature, features = [];
for (i = 0; i < queryEventArgs.length; i++) {
var x = queryEventArgs[i].SmX;
var y = queryEventArgs[i].SmY;
var geometry = new SuperMap.Geometry.Point(x, y);
feature = new SuperMap.Feature.Vector(geometry);
feature.XCoordinate = x;
feature.YCoordinate = y;
feature.Address = queryEventArgs[i].Address;
feature.PatientName = queryEventArgs[i].PatientName;
feature.ProjectNumber = queryEventArgs[i].ProjectNumber;
feature.MenNumber = queryEventArgs[i].MenNumber;
feature.Sex = queryEventArgs[i].SonID;
feature.Ages = queryEventArgs[i].Ages;
feature.SheKangID = queryEventArgs[i].SheKangID;
feature.style = BingliStyle;
feature.int = 4;
features.push(feature);
}
BingLi1.addFeatures(features);
}
//5) 当图层要素被点击时调用此方法并显示弹框内容
function onFeatureSelect(feature) {
var contentHTML = "";
if(feature.int == 4){
//设置在气泡中显示的内容
contentHTML += "<div> <span>项目登记号:" + feature.ProjectNumber + "</span></div>";
contentHTML += "<div> <span>门诊号:" + feature.MenNumber + "</span></div>";
contentHTML += "<div> <span>姓名:" + feature.PatientName + "</span></div>";
contentHTML += "<div> <span>性别:" + Sex + "</span></div>";
contentHTML += "<div> <span>年龄:" + feature.Ages + "</span></div>";
contentHTML += "<div>家庭地址:" + feature.Address + "<br>"
+ "<div>隶属社康:" + SheKangName + "</div><br>"
+ "<div style='text-align:center;'><button value=" + T + " style='height:30px;width:75px;font-size:8px;'type='button' class='btn btn-primary'onclick=''>活动路径</button>"
+ "<button value=" + T + " style='height:30px;width:75px;font-size:8px;'type='button' class='btn btn-primary'onclick='Checkboxs(this)'>"
+ "周边查询</button><div/></div>";
}
//初始化一个弹出窗口,当某个地图要素被选中时会弹出此窗口,用来显示选中地图要素的属性信息
popup = new SuperMap.Popup.FramedCloud("chicken",
feature.geometry.getBounds().getCenterLonLat(),
null,
contentHTML,
null,
true,
null,
true);
feature.popup = popup;
map.addPopup(popup);
}
四、开发总结
由于老师给到的资源中没有街道的面数据集,我就自己创建了一个面数据集,然后进行划线切割,往此切割后的数据集里添加一个属性字段NAME,把街道名称填上去,这样就完成了前备工作,接着就是编写查询。刚开始的时候因为没有原有的街道面数据集,我就把他做成了点的定位,后来发觉不符合要求和后面的查询搜索功能有重复性,只好自己准备数据集,,然后就是这个切割有时候真的很费时,因为学的不多,就进行练习,所以很多都不懂,都是通过查找各种辅助资料逐渐了解做的。不过通过这次练习,锻炼了自学能力。