//var map;
var selectedFeature;
var offlineRest=true;
Proj4js.Proj["CRS:84"]=Proj4js["EPSG:4326"];
Proj4js.Proj["CRS:84"];
/* epsg variables */
//var epsg900913 = new OpenLayers.Projection("EPSG:900913");
var epsg3857= new OpenLayers.Projection("EPSG:3857");
var wgs84 = new OpenLayers.Projection("EPSG:4326");
var crs84 = new OpenLayers.Projection("EPSG:4326");
crs84.proj.srsCode="CRS:84";
crs84.proj.srsCodeInput="CRS:84";
crs84.projCode="CRS:84";
crs84.swapXY=true;
var tw97 = new OpenLayers.Projection("EPSG:3826");
var tw67 = new OpenLayers.Projection("EPSG:3828");
//OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:3857", OpenLayers.Layer.SphericalMercator.projectForward);
//OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:4326", OpenLayers.Layer.SphericalMercator.projectInverse);
Proj4js.reportError = function (msg) {
alert(msg);
}
//IE halt @ OpenLayers.Renderer.VML.LABEL_SHIFT.e undefined
//OpenLayers.Renderer.VML.LABEL_SHIFT.e=1;//Doesn't know
var epsgws84_bounds=new OpenLayers.Bounds(117.0305,21.6294,125.7583,26.6151) ;
var bounds = new OpenLayers.Bounds(116.517197643768,20.6442266131947,124.718539835259,26.4492775120834);
var epsg3857_bounds = new OpenLayers.Bounds(116.517197643768,20.6442266131947,124.718539835259,26.4492775120834);
var geojson_format = new OpenLayers.Format.GeoJSON({
'internalProjection': epsg3857, //wgs84,
'externalProjection': wgs84
});
var featurecollection={"type":"FeatureCollection","features":[]};
//var ajaxJson= new AjaxJson();
var gJsonParser= new GJSonParser();
OpenLayers.Projection.transform = function(point, source, dest) {
if (source && dest) {
if (!(source instanceof OpenLayers.Projection)) {
//console.log('new src');
source = new OpenLayers.Projection(source);
}
if (!(dest instanceof OpenLayers.Projection)) {
//console.log('new des');
dest = new OpenLayers.Projection(dest);
}
// debugger;
if (source.proj && dest.proj) {
//console.log(source.proj,'-->', dest.proj);
point = Proj4js.transform(source.proj, dest.proj, point);
} else {
var sourceCode = source.getCode();
var destCode = dest.getCode();
var transforms = OpenLayers.Projection.transforms;
if (transforms[sourceCode] && transforms[sourceCode][destCode]) {
transforms[sourceCode][destCode](point);
}
}
}
return point;
};
function onPopupClose(evt) {
selectControl.unselect(selectedFeature);
}
//var handlePopup;
function onFeatureSelect(feature) {
/*
//selectedFeature = feature;
if(handlePopup){
e.feature.layer.map.removePopup(handlePopup);
handlePopup.destroy();
handlePopup = null;
}
handlePopup=new OpenLayers.Popup.FramedCloud(
"chicken",
feature.geometry.getBounds().getCenterLonLat(),
null,
feature.attributes.descript+'
'+'修改',
null,
true
);
feature.layer.map.addPopup(handlePopup);
*/
}
function onFeatureUnselect(feature) {
//map.removePopup(feature.popup);
//feature.popup.destroy();
//feature.popup = null;
}
//not use
//not use^
function onFeatureOver(e)
{e.feature.renderIntent = "select"; e.feature.layer.drawFeature(e.feature);
}
function onFeatureOut(e)
{ e.feature.renderIntent = "default"; e.feature.layer.drawFeature(e.feature);}
var cqlformat = new OpenLayers.Format.CQL();
var setCQL=function(layer,cql){
if(cql!=null)
if(cql.length>3500)
{
alert('資料過多,如無法正常顯示,請減少資料量') ;
}
//var nq=cqlformat.read(cql);
delete layer.params.CQL_FILTER;
layer.mergeNewParams({'CQL_FILTER':cql});
//layer.redraw();
//debugger;
//layer.params.CQL_FILTER=nq;
// console.log(cql);
};
var setAVALUES=function(layer,cql){
if(cql!=null)
if(cql.length>3500)
{
alert('資料過多,如無法正常顯示,請減少資料量') ;
}
//var nq=cqlformat.read(cql);
delete layer.params.AVALUES;
layer.mergeNewParams({'AVALUES':'1=0;'+cql+',2=2;'+cql});
//layer.redraw();
//debugger;
//layer.params.CQL_FILTER=nq;
// console.log(cql);
};
function init(maptag,config) {
var styleHighLight = new OpenLayers.Style(
{
"strokeWidth": 3, "labelOutlineColor": "#FFCCCC",
"labelOutlineWidth": 5 ,
"pointRadius": 8, "fillColor": "#006666",
"fillOpacity": 0.6, "strokeColor": "#006060",
"labelYOffset": -15,
"fontSize": "12px",
"pointerEvents": "visiblePainted",
"label": "${descript}",
"labelAlign": "left"
// "label" : '${key}'
});
var styleHighLightYellow = new OpenLayers.Style(
{
"strokeWidth": 3,
"pointRadius": 8, "fillColor": "#B0B0B0",
"fillOpacity": 0.6, "strokeColor": "#A0A0A0"
});
//styles
var styleJustGreen = new OpenLayers.Style(
{
"strokeWidth": 1,
"pointRadius": 6, "fillColor": "#006600",
"fillOpacity": 1, "strokeColor": "#303030"
//"label" : '${location}',
});
var styleYellow = new OpenLayers.Style(
{
"strokeWidth": 1,
"pointRadius": 6, "fillColor": "#DDDD00",
"fillOpacity": 0.5, "strokeColor": "#D00000"
//"label" : '${location}',
});
var styleJustGreenS1 = new OpenLayers.Style(
{
"strokeWidth": 5,
"pointRadius": 4, "fillColor": "#66AA66",
"fillOpacity": 0.7, "strokeColor": "#3030AA",
"labelYOffset": 0,
"labelAlign": "left",
"labelOutlineColor": "white",
"labelOutlineWidth": 0,
"fontSize": "12px",
"pointerEvents": "visiblePainted",
//"fontWeight": "bold",
"label" : "${number}" ,
"labelOutlineColor": "#FFCCCC",
"labelOutlineWidth": 5
});
// styles^
//var baselayer=createLayer('TGOS地型', {id:"tgos",baselayer:true,content:"http://gis.sinica.edu.tw/tgos/wmts",layerType:"tgos", layerid:"ROADMAP_W",projection:"EPSG:3857"});
//{layerType:'google'});
//var baselayer=createLayer('basemap0', {baselayer:true,layerType:'vector',projection:epsg3857,maxExtent:epsg3857_bounds
//});
//TTTHHIIISS
var baselayer=createLayer('basemap0', { layerType:"wmts" ,projection:"EPSG:3857",
baselayer:false,layerType:"wmts",content:"http://maps.nlsc.gov.tw/S_Maps/wmts", layerid:"EMAP",projection:"EPSG:3857"
});
//var baselayer=createLayer('basemap1', { layerType:"google" ,projection:"EPSG:3857"
// baselayer:false,layerType:"wmts",content:"http://maps.nlsc.gov.tw/S_Maps/wmts", layerid:"EMAP",projection:"EPSG:3857"
//});
var map;
var dwc;
if(typeof(maptag)=='undefined'||maptag=='') maptag='map';
map = new OpenLayers.Map(maptag, {
"projection": epsg3857,
"displayProjection" : wgs84,
allOverlays: true,
"layers": [baselayer],
//maxExtent:epsgws84_bounds,
eventListeners:
{
'featureover': onFeatureOver,
'featureout': onFeatureOut
},
controls:[new OpenLayers.Control.Navigation(), new OpenLayers.Control.Zoom(),new OpenLayers.Control.MousePosition(),new OpenLayers.Control.ScaleLine()
//,new OpenLayers.Control.LayerSwitcher()
],
//bounds:bounds,
center: new OpenLayers.LonLat(121.51, 24.95) //(121.506784, 23.03276)
// Google.v3 uses web mercator as projection, so we have to
// transform our coordinates
.transform(wgs84, epsg3857),
zoom:13
});
baselayer.setVisibility(true);
/*
map.events.register("zoomend", map, function(ev)
{
var zLv=this.getZoom();
if(zLv<=10){
parent.document.getElementById("L0panel").style.display='';
parent.document.getElementById("L1panel").style.display='none';
parent.document.getElementById("L2panel").style.display='none';
//show lv0
}
else if(zLv<=14){
//show lv1
parent.document.getElementById("L0panel").style.display='none';
parent.document.getElementById("L1panel").style.display='';
parent.document.getElementById("L2panel").style.display='none';
}
else
{
parent.document.getElementById("L0panel").style.display='none';
parent.document.getElementById("L1panel").style.display='none';
parent.document.getElementById("L2panel").style.display='';
//show lv2
}
});
*/
var tempLayer;
var queryHandle=new AProto();
//!! BUG ---@ PROJECTION
var facQuery = TPCFeatureInfoCtrl({ projection: "EPSG:3826", map: map, filterDgn: true}, function (e) {
var ctlloc_facquery=new CtlLocate(map,{layer:'highlight'});
if(typeof(e)!='undefined')
{
if(typeof( e.event)!='undefined')
{
if(e.event.features.length>0)
{
//however we require 4326, return X;
var paramsOfLocate={projection:e.event.object.projection,clearAll:true,
drawAs:'wkt',wkt:e.event.features[0].geometry.toString()};
/* skip
if(queryHandle.getConfig().locate||false)
{
paramOfLocate['zoomToRange']=true;
}*/
ctlloc_facquery.action(paramsOfLocate);
queryHandle.callAction(e.event.features[0].attributes);
}
}
return;
//debugger;
//var ctlLocate=null;
var dataParams=[];
for(var aFeatureKey in e.features)
{
var aFeature= e.features[aFeatureKey];
var labelName=fscMapping.hasOwnProperty(aFeature.attributes.tid)?fscMapping[aFeature.attributes.tid]:'其他設備';
//aPnlItem
var oidLabel=aFeature.attributes.hasOwnProperty('oid')?aFeature.attributes.oid:'0';
// attribFrm.items.get('tabpnl').add( aPnlItem );
var dataParam={};
if(useProxy)
{
dataParam["dmmsuser"]="";
dataParam["url"]=restUrl+'/json';
}
dataParam["distId"]=aFeature.attributes.did;
dataParam["clsId"]=aFeature.attributes.tid;
dataParam["oId"]=aFeature.attributes.oid;
dataParams.push(dataParam);
/*
ajaxJson.ajaxGet(
{
oid: aFeature.attributes.oid,
ret: aPnlItem,
url:((useProxy?OpenLayers.ProxyHost.split('?')[0]:restUrl+'/dmmsfeatureinfos.json') ),//'/geodmms/rest/dmmsfeatureinfos.json'),
header:{'Authorization': "Basic " + btoa('geodmms'+ ":" + 'geodmms')},
data:dataParam,
'success': function(request) {
//console.log(request);
var subPnl;
// lastJson= request.response;
var vjson=eval('('+request.response+')');
var vValueArray;
//alert('request.status is '+request.status);
//alert('vjson is '+vjson);
var vkeyCount=0;
for(var vkey in vjson[0])
{
vValueArray={items:[]};
var vName=(vjson[0][vkey].length>0)? vjson[0][vkey]:[];
var vValue;
if(vjson.length>1)
{
if(typeof(vjson[1][vkey])=='undefined'){vValue=[];}
else
vValue=(vjson[1][vkey].length>0)? vjson[1][vkey]:[]
}
else
vValue=[];
// var vValue=(vjson[0][vkey].length>1)? vjson[1][vkey]:'';
for(var idx=0;idx
"+vjson[0].name+"
"; //$("properties.panel-collapse") } var queryMethod= offlineRest? restUrl+ params.fcid+'-'+ params.gid+'.json' : 'tpctyphoon.json'; //$("#propertiesA")[0].innerHTML=""+params.name+"
"; $("#propertiesA")[0].innerHTML='名稱 | ' +(typeof(params.info)=="undefined" ?'': '資訊 | ') +'
---|---|
'+params.name+' | ' +(typeof(params.info)=="undefined" ?'': ''+params.info+' | ') +'
無資料
"; } }); }; dwc['queryOne']=function(callQuery,newconfig) { queryHandle.setAction(callQuery||showquery, newconfig); //dwc.setToggleFac('FCID=' + newconfig.fcid); dwc.toggle('facquery'); //dwc.setToggleFac(""); } var ctlLocate = new CtlLocate(map, { layer: 'highlight' }); var createQueryFrm = function (layoutOfQuery, option) { if (typeof (option) == "undefined") option = {}; if (typeof (option.qconfig) == "undefined") option["qconfig"] = { catelog: 'default' }; var qData; var featureQueryHandler = new twdQuery(option.qconfig, function (e) { qData = e.body; });//handler? var dummy = []; var idx; for (idx = 0; idx < layoutOfQuery.column.length; idx++) dummy.push("0"); /* { querybyDgnUfid: true, DGNID: e.event.features[idx].data.DGNID, UFID: e.event.features[idx].data.UFID } */ if (option.querybyDgnUfid) { featureQueryHandler.queryAPI( { p0: layoutOfQuery.group, p1: layoutOfQuery.name, cnd: [option.DGNID, option.UFID] }); } else if (typeof (option.qs) != "undefined") { featureQueryHandler.queryAPI( { p0: layoutOfQuery.group, p1: layoutOfQuery.name, cnd: option.qs }); } else { featureQueryHandler.queryAPI( { p0: layoutOfQuery.group, p1: layoutOfQuery.name, cnd: (dummy.length == 0 ? "0" : dummy.join(",")) }); } var qSchema = featureQueryHandler.getResult().head; //qData = featureQueryHandler.getResult().body; //var fields = featureQueryHandler.getResult().head.ColumnKey; //.ColumnInfo[0] //{key: "DGNID", name: "圖號", hide: false, dtype: "string", index: "DGNID"} // jqgrid-format var evtItem = qSchema.LinkInfo;//:[{"key":"LONLAT","action":"LocateByLL","cols":["LON","LAT"]}] var fields = []; var columns = []; var lstbuttons = []; var gridFunc = {}; gridFunc["GETVALUE"] = function (vGrid, cols) { //var vGrid = this.up().up(); var idx; var result = []; var vSel = vGrid.getSelectionModel().getSelection(); if (vSel.length > 0) { for (idx = 0; idx < cols.length; idx++) { var tmpcol = vSel[0].getData()[cols[idx]]; result.push(tmpcol); } //cols } return result; } //funcHub["ctlLocate"] = ctlLocate; //pub gridFunc["LocateByLL"] = function (ll) { if (ll.length > 1) { ctlLocate.action({ clearAll: true, point: { x: ll[0], y: ll[1] }, zoomLevel: 19, projection: wgs84, drawAs: 'point', hide: 'N', zoomToCenter: true }); } } gridFunc["LocateBy97"] = function (l97) { if (l97.length > 1) { ctlLocate.action({ clearAll: true, point: { x: l97[0], y: l97[1] }, zoomLevel: 19, projection: tw97, drawAs: 'point', hide: 'N', zoomToCenter: true }); } } gridFunc["LocateBy67"] = function (l67) { if (l67.length > 1) { ctlLocate.action({ clearAll: true, point: { x: l67[0], y: l67[1] }, zoomLevel: 19, projection: tw67, drawAs: 'point', hide: 'N', zoomToCenter: true }); } } // var CTLFunLinkInfo = function (aEvtItem, gridFunc) { this.action = function () { var vGrid = this.up().up(); var dtCol = gridFunc.GETVALUE(vGrid, aEvtItem.cols); gridFunc[aEvtItem.action](dtCol); } } var idxE; for (idxE = 0; idxE < evtItem.length; idxE++) { var ctBtnClick = new CTLFunLinkInfo(evtItem[idxE], gridFunc); lstbuttons.push({ xtype: 'button', text: evtItem[idxE].key, handler: ctBtnClick.action }); } for (idx = 0; idx < qSchema.ColumnInfo.length; idx++) { fields.push({ name: qSchema.ColumnInfo[idx].key, type: qSchema.ColumnInfo[idx].dtype });//dateFormat if (qSchema.ColumnInfo[idx].name == "X(97)" || qSchema.ColumnInfo[idx].name == "Y(97)" || qSchema.ColumnInfo[idx].name == "值") continue; columns.push({ text: qSchema.ColumnInfo[idx].name, hide: qSchema.ColumnInfo[idx].hide, //flex: 1, 導致欄位被壓縮 sortable: true, asText: qSchema.ColumnInfo[idx].dtype,// == "string" ? "asText" : "asText" dataIndex: qSchema.ColumnInfo[idx].key }); } var qStore = Ext.create('Ext.data.ArrayStore', { //storeId: 'simpsonsStore', fields: fields, data: qData.vList /* proxy: { type: 'memory', reader: { type: 'json', root: 'items' } }*/ }); //{group: "HYDRANT", name: "q", displayname: "消防栓", column: Array[2]} var colQuery = []; var idxCol; //{cname: "圖號", ctype: "num", require: true, code: Array[0]} //code 未寫(qVal,nVal) for (idxCol = 0; idxCol < layoutOfQuery.column.length; idxCol++) { var colType; if (layoutOfQuery.column[idxCol].ctype == "num") colType = 'numberfield'; else if (layoutOfQuery.column[idxCol].ctype == "geom") colType = 'button'; else colType = 'textfield'; //colType = layoutOfQuery.column[idxCol].ctype == "num" ? 'numberfield' : 'textfield'; if (layoutOfQuery.column[idxCol].code.length == 0) { if (layoutOfQuery.column[idxCol].ctype == 'geom') {//is geom colQuery.push({ xtype: colType, text: layoutOfQuery.column[idxCol].cname, scale: 'large', // value:'userwkt', valueFun: function () { var tempPP = drawControl.getWkt(); var pts = []; if (typeof (tempPP.features) == "undefined") return ""; if (tempPP.features.length > 0) { for (var idxOfPP = 0; idxOfPP < tempPP.features[0].points.length; idxOfPP++) { pts.push(parseInt(tempPP.features[0].points[idxOfPP].x)); pts.push(parseInt(tempPP.features[0].points[idxOfPP].y)); } } return pts.join(","); }, handler: function () { var custFun = function (setv) { userwkt = setv; }; gridFunc['DRAWPOLYGON'](layoutOfQuery.name); } }); } else { colQuery.push({ xtype: colType, fieldLabel: layoutOfQuery.column[idxCol].cname, allowBlank: !layoutOfQuery.column[idxCol].require }); } } else {//NValue /* var lstStore = Ext.create('Ext.data.Store', { fields: ['name','value'], data: layoutOfQuery.column[idxCol].code });*/ colQuery.push({ xtype: 'combobox', store: { xtype: 'store', fields: ['name', 'value'], data: layoutOfQuery.column[idxCol].code }, fieldLabel: layoutOfQuery.column[idxCol].cname, queryMode: 'local', displayField: 'name', valueField: 'value' // allowBlank: !layoutOfQuery.column[idxCol].require }); //http://localhost:1240/FMQuery/LANDMARK.0/q/0?catelog=theme //debugger; } } var extQuerypanel1; //------------->SelectLayout if (option.SelectLayout || 'default' == 'onlyResult') { extQuerypanel1 = extQuerypanel1 = Ext.create('Ext.window.Window', { id: "extQuerypanel1", title: '查詢', width: 400, height: 300, closable: true, //layout:'fit', //'anchor', layout: { type: 'vbox', align: 'stretch' }, //items:[{xtype:'button',text:'test'},{xtype:'button',text:'test'},{xtype:'button',text:'test'} ], //bbar:tbl1, items: [ { xtype: 'gridpanel', store: qStore, columns: columns, flex: 1, bbar: lstbuttons //[{ xtype: 'button', text: '定位' }, { xtype: 'button', text: '查詢' }] } ] }); extQuerypanel1.showAt(Ext.getBody().getViewSize().width - 400, 10); } else { extQuerypanel1 = Ext.create('Ext.window.Window', { id: "extQuerypanel1", title: '查詢', width: 550, height: 400, closable: true, //layout:'fit', //'anchor', layout: { type: 'vbox', align: 'stretch' }, //items:[{xtype:'button',text:'test'},{xtype:'button',text:'test'},{xtype:'button',text:'test'} ], //bbar:tbl1, items: [{ flex: 1, name: 'queryCnd', xtype: 'panel', title: layoutOfQuery.displayname, collapsible: true, items: colQuery, /* //layeroutOfQuery COND items: [{ xtype: 'textfield', name: 'dgnid', fieldLabel: '圖號' }, { xtype: 'textfield', name: 'ufid', fieldLabel: '流水號' }],*/ bbar: [{ xtype: 'button', text: '送出', handler: function () { var allitem = this.up().up().items.items; var idxOfI; var result = []; for (idxOfI = 0; idxOfI < allitem.length; idxOfI++) { var tval = allitem[idxOfI].value; var tvaltype = allitem[idxOfI].valueFun; if (typeof (tvaltype) == "function") { tval = tvaltype(); } if (typeof (tval) == "undefined") tval = "null"; //if (tval == "userwkt") tval = userwkt; result.push(tval); } featureQueryHandler.queryAPI( { p0: layoutOfQuery.group, p1: layoutOfQuery.name, cnd: result.join(',') }, qStore, function (e) { qStore.loadData(e.body.vList); // debugger; }); } }, { xtype: 'button', text: '取消', handler: function () { this.up().up().up().close(); } }] }, { xtype: 'gridpanel', store: qStore, columns: columns, flex: 2, /* columns: [{ header: 'Name', dataIndex: 'name' }, { header: 'Email', dataIndex: 'email', flex: 1 }, { header: 'Phone', dataIndex: 'phone' }],*/ bbar: lstbuttons //[{ xtype: 'button', text: '定位' }, { xtype: 'button', text: '查詢' }] } ] }); extQuerypanel1.showAt(80, 10); } } //dwc['qf'] = createQueryFrm; var fpControl = new OpenLayers.Control.FeaturePopups({ boxSelectionOptions: {}, layers: [ [ // Uses: Templates for hover & select and safe selection markLayer, {templates: { // hover: single & list hover: '${.popup}' //hoverList: '編號:${.number}