概述
本示例用来演示dorado与GoogleMap的集成。本文档与示例中心上的相比有所简化。本示例链接如下:
准备工作
新建一工程googlemap,并且配置好数据源和数据库,具体步骤参考3.1.2节。
开发步骤
添加Dataset
步骤1:添加一Common ViewModel,文件名为GoogleMap。
为GoogleMap的<<function>>添加如下代码:
var filterValue=""; function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.clearOverlays(); map.setCenter(new GLatLng(39.095962936305476, 104.765625), 3); map.addControl(new GMapTypeControl()); map.addControl(new GLargeMapControl()); // map.openInfoWindow(map.getCenter(), document.createTextNode("客户分布图")); // Creates a marker at the given point with the given number label function createMarker(point, number) { var marker = new GMarker(point); GEvent.addListener(marker, "click", function() { filterValue = number; showCompanys(marker, number); makeDoradoInfo(number); filterValue = ""; }); return marker; } // Add province markers to the map at locations var dataset = datasetMarker; dataset.disableControls(); try { dataset.moveFirst(); while (!dataset.isLast()) { var point = new GLatLng(dataset.getValue("xpoint"), dataset.getValue("ypoint")); map.addOverlay(createMarker(point, dataset.getValue("name"))); dataset.moveNext(); } } finally { dataset.enableControls(); } } } function unload() { GUnload(); } function makeDoradoInfo(number){ datasetCondition.setValue("province", number); } function showCompanys(marker, number){ if (number){ var innerHTML = ""; innerHTML += "<br><br><font color='red'>重点客户:</font>"; var i=0; var dataset = datasetInfo; dataset.disableControls(); try { dataset.moveFirst(); while (!dataset.isLast()) { i++; innerHTML += "<br><a href='javascript:showCompany(\""+dataset.getValue("companyId")+"\")'>"+dataset.getValue("name")+"</a>"; dataset.moveNext(); } } finally { dataset.enableControls(); } innerHTML = "《"+number+"》共有客户 <b>"+i+" 家</b>"+innerHTML; marker.openInfoWindowHtml(innerHTML); } } function showCompany(companyId){ openPage("company.jsp?companyId="+companyId); subwindow1.show(false,true); } function hideCovering() { // hide the covering var frameCovering = document.getElementById("frameCovering"); frameCovering.style.display = "none"; } function openPage(path) { // show the covering var frameCovering = document.getElementById("frameCovering"); frameCovering.style.display = ""; var frameSample = document.getElementById("frameSample"); setTimeout("document.getElementById(\"frameSample\").contentWindow.location.href = unescape(\"" + escape(path) + "\")", 0); }
为GoogleMap的onLoad事件添加如下代码:
load();
为GoogleMap的unLoad事件添加如下代码:
unload();
步骤2:添加一FormDataset,属性设置如下:
属性 | 值 |
---|---|
id | datasetCondition |
insertOnEmpty | true |
为datasetCondition添加7个字段,如下所示:
label | name |
---|---|
编号 | companyId |
名称 | name |
地址 | address |
传真 | fax |
电话 | phone |
网址 | web |
省份 | province |
步骤3:添加一AutoSqlDataset,选择MIS_COMPANY表格,选择所有字段,属性设置如下:
属性 | 值 |
---|---|
id | datasetCompany |
keyFields | companyId |
originTable | mis_company |
pageSize | 5 |
readOnly | true |
为datasetCompany添加一Dummy Field,name设置为select。
为datasetCompany添加BaseMatchRule,如下所示:
dataType | escapeEnabled | operator | originField | table | value |
---|---|---|---|---|---|
string | true | like | companyId | mis_company | :companyId |
string | true | like | name | mis_company | :name |
string | true | like | address | mis_company | :address |
string | true | = | fax | mis_company | :fax |
string | true | = | phone | mis_company | :phone |
string | true | like | web | mis_company | :web |
string | true | like | province | mis_company | :province |
步骤4:选中刚刚添加的datasetCompany,按键盘上的Ctrl+C,即复制该Dataset。选中Datasets节点,按Ctrl+V节点,即添加一新的Dataset,修改该Dataset的id为datasetInfo,pageSize为20。
为datasetInfo的onFilterRecord事件添加如下代码:
if (filterValue!="") return (record.getString("province")==filterValue); else return true;
步骤5:添加一Custom Dataset,id设置为datasetMarker。为datasetMarker添加如下字段:
dataType | name |
---|---|
double | xpoint |
double | ypoint |
string | name |
为datasetMarker添加一DatasetListener,代码如下:
import com.bstek.dorado.data.AbstractDatasetListener; import com.bstek.dorado.data.Dataset; /** * CompanyQuery_datasetMarkerListener */ public class GoogleMap_datasetMarkerListener extends AbstractDatasetListener { public void afterLoadData(Dataset dataset) throws Exception { // 上海 dataset.insertRecord(); dataset.setDouble("xpoint", 31.02544756511612); dataset.setDouble("ypoint", 121.45546875); dataset.setString("name", "上海"); // 北京 dataset.insertRecord(); dataset.setDouble("xpoint", 39.50404070558415); dataset.setDouble("ypoint", 115.77216796875); dataset.setString("name", "北京"); // 浙江 dataset.insertRecord(); dataset.setDouble("xpoint", 29.20365531807151); dataset.setDouble("ypoint", 120.359375); dataset.setString("name", "浙江"); // 河北 dataset.insertRecord(); dataset.setDouble("xpoint", 38.37268853598097); dataset.setDouble("ypoint", 114.33203125); dataset.setString("name", "河北"); // 南京 dataset.insertRecord(); dataset.setDouble("xpoint", 32.00298618122413); dataset.setDouble("ypoint", 119.41064453125); dataset.setString("name", "南京"); // 山东 dataset.insertRecord(); dataset.setDouble("xpoint", 36.813476231041935); dataset.setDouble("ypoint", 118.8505859375); dataset.setString("name", "山东"); // 山西 dataset.insertRecord(); dataset.setDouble("xpoint", 36.74498466889473); dataset.setDouble("ypoint", 111.8408203125); dataset.setString("name", "山西"); // 陕西 dataset.insertRecord(); dataset.setDouble("xpoint", 34.77071473849608); dataset.setDouble("ypoint", 108.40185546875); dataset.setString("name", "陕西"); // 广东 dataset.insertRecord(); dataset.setDouble("xpoint", 22.926294766395592); dataset.setDouble("ypoint", 113.1923828125); dataset.setString("name", "广东"); // 云南 dataset.insertRecord(); dataset.setDouble("xpoint", 24.287026865376436); dataset.setDouble("ypoint", 99.755859375); dataset.setString("name", "云南"); // 湖南 dataset.insertRecord(); dataset.setDouble("xpoint", 28.632746799225852); dataset.setDouble("ypoint", 115.20625); dataset.setString("name", "湖南"); // 四川 dataset.insertRecord(); dataset.setDouble("xpoint", 31.27083595165); dataset.setDouble("ypoint", 100.8994140625); dataset.setString("name", "四川"); // 重庆 dataset.insertRecord(); dataset.setDouble("xpoint", 30.003449456820605); dataset.setDouble("ypoint", 105.5107421875); dataset.setString("name", "重庆"); // 新疆 dataset.insertRecord(); dataset.setDouble("xpoint", 41.244772343082076); dataset.setDouble("ypoint", 87.626953125); dataset.setString("name", "新疆"); // 辽宁 dataset.insertRecord(); dataset.setDouble("xpoint", 40.94671366508002); dataset.setDouble("ypoint", 123.5537109375); dataset.setString("name", "辽宁"); // 江苏 dataset.insertRecord(); dataset.setDouble("xpoint", 34.50298618122413); dataset.setDouble("ypoint", 118.01064453125); dataset.setString("name", "江苏"); // 湖北 dataset.insertRecord(); dataset.setDouble("xpoint", 30.60365531807151); dataset.setDouble("ypoint", 114.359375); dataset.setString("name", "湖北"); // 天津 dataset.insertRecord(); dataset.setDouble("xpoint", 38.85682013474361); dataset.setDouble("ypoint", 117.076171875); dataset.setString("name", "天津"); } }
添加查询条件部分
步骤1:添加一AutoFrom,属性设置如下:
属性 | 值 |
---|---|
dataset | datasetCondition |
id | formQuery |
width | 300 |
选中formQuery,点击自动生成字段按钮,并且设置FormGroup的columnCount为1。
步骤2:添加一QueryCommand,属性设置如下:
属性 | 值 |
---|---|
async | true |
conditionDataset | datasetCondition |
id | commandQuery |
queryDataset | datasetCompany |
步骤3:添加一Button,属性设置如下:
属性 | 值 |
---|---|
command | commandQuery |
id | buttonQuery |
value | 查询 |
为formQuery添加一Custom Element,属性设置如下:
属性 | 值 |
---|---|
controlId | buttonQuery |
name | elementButtonQuery |
showLabel | false |
colSpan | 2 |
controlAlign | center |
添加查询列表部分
步骤1:添加一DataTable,属性设置如下:
属性 | 值 |
---|---|
dataset | datasetCompany |
fixedColumn | 2 |
height | 100% |
id | tableCompany |
width | 100% |
为tableCompany的onRecordDblClick事件添加如下代码:
buttonEdit.click();
选中tableCompany,点击字段生成按钮。
步骤2:添加一UpdateCommand,id设置为commandDelete。为commandDelete的DatasetInfos节点添加一DatasetInfo,属性设置如下:
属性 | 值 |
---|---|
dataset | datasetCompany |
submitScope | selected |
步骤3:添加一PagePolit,属性设置如下:
属性 | 值 |
---|---|
dataset | datasetCompany |
id | pagepilotCompany |
步骤4:添加一Button,属性设置如下:
属性 | 值 |
---|---|
id | buttonAdd |
value | 新增 |
为buttonAdd的onClick事件添加如下代码:
showCompany("");
步骤5:添加一Button,属性设置如下:
属性 | 值 |
---|---|
id | buttonEdit |
value | 修改 |
为buttonEdit的onClick事件添加如下代码:
showCompany(datasetCompany.getValue("companyId"));
步骤6:添加一Button,属性设置如下:
属性 | 值 |
---|---|
id | buttonDelete |
value | 删除 |
command | commandDelete |
添加公司详细信息部分
步骤1:添加一Common ViewModel,文件名为Commpany。
步骤2:添加一AutoSqlDataset,选择MIS_COMPANY表格,选择所有字段,属性设置如下:
属性 | 值 |
---|---|
id | datasetCompany |
keyFields | companyId |
originTable | mis_company |
pageSize | 1 |
为datasetCompany添加一BaseMatchRule,属性设置如下:
属性 | 值 |
---|---|
dataType | string |
escapeEnabled | false |
level | 1 |
operator | like |
originField | companyId |
table | MIS_COMPANY |
value | :companyId |
添加一Parameter,属性设置如下:
属性 | 值 |
---|---|
dataType | string |
name | companyId |
value | ${Request.companyId} |
步骤3:添加一AutoForm,属性设置如下:
属性 | 值 |
---|---|
dataset | datasetCompany |
id | formCompany |
选中formCompany,点击字段生成按钮。
创建Jsp页面
为GoogleMap生成Jsp页面,文件名为google-map.jsp,代码如下:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ page errorPage="/dorado/exception.d" %> <%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %> <html> <head> <title></title> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAJNaKrkNRuQehZUwYjhNgIxQA99y78qKclH0fyofjC85RdXomiRTTxOZdb8sV8sBi-afzHpQFNdGI1w"> </script> </head> <body style="overflow: hidden"> <d:View config="GoogleMap"> <d:Layout type="border"> <d:Pane position="center"> <div id="map" style="width: 100%; height: 100%" border="1"></div> <d:SubWindow id="subwindow1" title="公司详细信息" width="700px" height="100%" draggable="true" resizable="true" status="hidden" showMinimizeButton="true" showMaximizeButton="true" showCloseButton="true"> <div style="width: 100%; height: 100%; position: relative"> <iframe id="frameSample" name="sample" frameborder="0" style="width: 100%; height: 100%" onload="hideCovering()"></iframe> <div id="frameCovering" style="left: 0; top: 0; width: 100%; height: 100%; position: absolute; background-color: white; padding: 12; display: none"> <table> <tr> <td><img src="../../images/loading.gif"></td> <td><b>Loading ... ...</b></td> </tr> </table> </div> </div> </d:SubWindow> </d:Pane> <d:Pane position="right"> <d:Layout type="border"> <d:Pane position="top"> <p class="hint" style="width: 300;"> 选择左边的省份并输入查询条件搜索您要的数据。 </p> <d:AutoForm id="formQuery" /> </d:Pane> <d:Pane position="center"> <d:SubWindow id="subwindow2" title="查询列表" width="100%" height="100%" draggable="true" resizable="true" status="normal" showMinimizeButton="false" showMaximizeButton="true" showCloseButton="false"> <d:Layout type="border"> <d:Pane position="center"> <d:Layout type="border"> <d:Pane position="top" align="right"> <d:Button id="buttonAdd" /> <d:Button id="buttonEdit" /> <d:Button id="buttonDelete" /> </d:Pane> <d:Pane position="center"> <d:DataTable id="tableCompany" /> </d:Pane> </d:Layout> </d:Pane> <d:Pane position="bottom" align="right"> <d:PagePilot id="pagepilotCompany" /> </d:Pane> </d:Layout> </d:SubWindow> </d:Pane> </d:Layout> </d:Pane> </d:Layout> </d:View> </body> </html>
为Company生成Jsp页面,文件名为company.jsp,代码如下:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %> <html> <head> <title></title> </head> <body> <d:View config="Company"> <d:AutoForm id="formCompany" /> </d:View> </body> </html>
查看运行效果
启动浏览器后,浏览google-map.jsp,效果如下:
知识点
本示例知识点主要在于Google Maps的API的使用。关于Google Maps,请查看如下链接: