{"version":3,"sources":["HelpComponent.js","GlobalSetting.js","LayerInfo/OverLayLayer.js","LayerInfo/BaseLayer.js","LayerInfo/ModelSetLayer.js","LayerInfo/CustomLayer.js","LayerInfo/NoiseLayer.js","LayerInfo/TerrainLayer.js","LayerList.js","LayerInfo/LidarLayer.js","LayerInfo/Acute3DLayer.js","LayerInfo/VisualizedDataGridOverlay.js","LayerInfo/PipelineLayer.js","LayerInfo/ModelLayer.js","LayerInfo/ProjectorLayer.js","LayerInfo/I3SLayer.js","LayerInfo/3DTilesLayer.js","LayerOption.js","IoTSensorThings.js","GoogleSearch.js","Surveying.js","Analysis.js","MenuSide.js","serviceWorker.js","index.js"],"names":["HelpComponent","this","props","onHelpClick","videoSrc","className","style","width","height","zIndex","left","open","onClick","closeModal","bind","title","src","frameborder","allow","allowfullscreen","React","Component","AboutUs","state","isBubbleUIOpen","bubbleUI","element","BBparameterBD","bubbleboxBD","window","ov","UI","BubbleUI","document","getElementById","appendContent","main","OView","UIContext","addUI","Pos","Geo3DPoint","V","Up","Camera","gotoCamera","setState","removeUI","margin","e","aboutUs","id","textAlign","fontSize","href","target","ContourLineSetting","handleClick","displayColorPicker","handleClose","handleChange","color","setContourLine","contourLine","interval","hex","rgb","hexColor","r","g","b","a","helpMode","drawTerrainSetting","GLCOLOR","Number","event","valueAsNumber","mode","styles","reactCSS","borderRadius","background","swatch","padding","boxShadow","display","cursor","popover","position","right","cover","top","bottom","ReactDOM","render","unmountComponentAtNode","class","alignSelf","type","checked","setContourLineOpen","for","placeholder","value","onChange","IntervalChange","LightSetting","lightRendering","lightScattering","modelShadow","almanac","realTime","realTimeIntervalId","date","Date","now","lightZenith","lightAzimuth","realTimeInterva","enableLight","enableVolumetricLightScattering","enableShadow","LightProperty","lightProperty","clearInterval","alertify","success","setInterval","isAutoUpdateByDate","isAbs","toDate","azimuthAngle","zenithAngle","enableDrawLightDirectionSketchMap","isRealTime","siderRangeCSS","input","inputProps","disabled","DatetimeChange","locale","lang","isRealTimeOpen","setLightRenderingOpen","setLightScatteringOpen","setModelShadowOpen","setAlmanacOpen","min","max","defaultValue","step","onMouseEnter","lightMouseEnter","onMouseLeave","lightMouseLeave","setLightAzimuth","setLightZenith","TerrainDrawSetting","fillMode","terrainElevation","throughSurface","waterRipple","waterLevel","noElevation","getTerrainOverlay","show","showWater","waterQuality","fillModeChange","setTerrainElevationOpen","setThroughSurfaceOpen","setWaterRippleOpen","waterLevelChange","GlobalSettingSidebar","sidebarSwitch","setglobalSettingOpen","sideMenuCSS","overflow","transform","isglobalSettingOpen","overflowY","OverlayOption","sidebarChange","deleteLayerList","gotoLayer","opacity","layer","layerType","layerName","defaultOpacity","Layer","TITLE","TYPE","toFixed","OverlayLayer","List","Data","wmtsLayerChecked","layerThis","WMTSLayerList","LAYER_GROUP_2DWMTS","WMTS_LAYERS","WMTS_GROUP","map","layers","getWMTSLayerInfo","URL","url","identifier","push","ID","CHECKED","prevProps","prevState","snapshot","layerList","currentTime","i","undefined","TIMELINE","changeSetting","deleteList","len","length","layername","LAYERNAME","removeTerrainOverlay","error","index","current","format","SELECTEDINTERVAL","hasOwnProperty","data","setting","LOCAL_SERVER","drawColor","DRAWCOLOR","fillColor","FILLCOLOR","conditions","CONDITIONS","extraSettings","EXTRASETTINGS","cond","SQL","join","DrawColor","FillColor","setConditionOverlayLayer","list","setOpenLayer","LayerEPSG","EPSG","deleteLayer","setTimeLineSwitch","LayerLength","forEach","l","setTimeLineContent","time","formData","Object","keys","keyName","encodeURIComponent","fetch","FETCHURL","method","body","headers","Headers","then","res","json","catch","console","log","addTerrainWMTSOverlay","pgmapserver","epsg","urlTemplate","data-tooltip","name","htmlFor","BaseLayer","baseLayerChecked","UserSetting","setBaseLayer","TERRAIN_SERVER","URLTemplate","BASE_LAYERS","key","defaultChecked","ModelSetOption","isSettingOpen","isHaveModel","drawMode","scale","isNoiceOpen","setEntityColor","ModelSetLayer","layerHandel","layerMode","setDrawMode","GROUP","group","layerLocation","POS","x","y","z","UP","goto","setOverlayName","updateScreen","removeEntityColorFunction","changeNoiceInfo","timeLine","attr","infoBoxAttr","BuildNoice","ATTR","layerId","building_id","setinfoBox","getColAndAttrs","attrs","setEntityColorFunction","Attrs","noice","LayerList_2D","data-tooltip-position","data-tooltip-type","settingOpen","coverChange","NoiceToggleOpen","isChecked","modelSetLayer","modelSetLayerChecked","removeLayer","time1","parse","time2","Math","abs","parseInt","dt_s","TIMElINEINTERVAL","range","divTime","d","area","assign","LEGEND","getNoiseData","addModelSetLayer","callback","setUseLight","setOnClickEntity","pos","setinfoBoxOpen","LOCATION","setLegendBoxContent","CustomOption","customLayer","entities","entity","update","_layer","_Entities","_Opacity","CustomLayer","geojsonData","dtData","customLayerChecked","getDtData","drawEntity","val","legend","dt","_entity","removeAllEntity","GEOMETRY","features","f","properties","polygon","GeoPolygonSet","FromGeoJSON","geometry","addPolygonPrismEntity","geo","getColor","drawBorder","borderColor","setTooltip","polyline","GeoPolyline","Buffer","addGroundPolylineEntity","size","addCustomLayer","GEOJSONURL","NoiseLayer","LAYER_GROUP_NOISEMAP","LAYER","border","ISOPEN","NAME","PARAM","param","setLegendBoxSwitch","TerrainLayer","terrainLayerChecked","reloadTerrain","TERRAIN_LAYERS","TerrainSiderBar","siderValue","intervalID","componentThis","terrainAlpha","LayerList","layerHandelr","LayerListSidebar","setlayerListOpen","islayerListOpen","LidarOption","LidarLayer","AltitudeMin","AltitudeMax","gap","setColorSet","ColorLegendOpen","isColorLegendOpen","isEDLOpen","isAltitudeOpen","EDL","AltitudeType","getAltitude","enableEDL","edlStrength","enableAltitude","ColorLegend","round","EDLOpen","setEDLLevel","AltitudeOpen","typeChange","Acute3DOption","Acute3DLayer","VisualizedDataGridOption","VisualizedDataGridOverlay","PipelineOption","isEntityFlowOpen","PipelineLayer","setDrawAllFlow","setFlowUseTexture","setFlowTextureMaxDensity","setFlowColorWeight","SettingType","layerClass","EntityFlowtoggleOpen","BIMAttrsOption","openAttrsList","isOtherEnable","onChangeAttrs","Name","isTrue","enable","DeleteBIMAttrs","splice","overflowX","isAttrsEnable","deleteAttrsOption","ModelOption","attrsList","BIMAttrsChange","BIMAttrsList","ATTRS","ModelLayer","isBIMModel","BIMAttrsAddChange","AddBIMAttrs","enableOtherAttr","clearEntityColor","ProjectorOption","VideoPOS","VideoV","VideoUP","ProjectorLayer","I3SOption","ThreeDTilesOption","LayerOptionSidebar","setlayerOptionOpen","islayerOptionOpen","Layer_2D","LayerList_3D","Layer_3D","LayerList_Noise","Layer_Noise","Layer2DLength","Layer3DLength","LayerNoiseLength","SensorThingRenderChart","sensor","sensorInterval","sensorOpen","SensorList","sensorResources","Layername","Url","api","IsOpen","sensorLodingNum","canvas","createElement","ctx","getContext","globalCompositeOperation","BOUND_X_MIN","BOUND_X_MAX","BOUND_Y_MIN","BOUND_Y_MAX","draw","mx","my","radgrad","createRadialGradient","addColorStop","fillStyle","beginPath","arc","PI","fill","Sensor","xhr","XMLHttpRequest","overrideMimeType","onload","iotValue","JSON","responseText","iotEntity","iotThingLocations","location","coordinates","iotObservationsResult","canvasBuffer","getImageData","visualizedDataGridBuffer","Float32Array","CANVAS_WIDTH","SensorThingRenderChartLayer","source","boundary","GeoBoundary","useStepLayeredColorMap","addTerrainVisualizedDataGridOverlay","send","doLoadIot","SensorThingBarChart","sensorHandle","sensorOnClick","sensorClose","IntervalID","Interval","findLayer","Handle","iotCustomEntity","iotMap","Map","requestAnimationFrame","anime","nowLife","updateHeight","t","hand","iotAreaDescription","set","addBarEntity","tooltip","side","layerHandle","sensorList","isBarChart","sensorListClick","SENSORDATA","img","resources","barChart","renderChart","chartTypeChange","TerrainProfileModal","modalIsOpen","terrainHeight","terrainX","openModal","terrainProfileOutput","addEventListener","removeEventListener","abortInput","c3","generate","bindto","hide","columns","axis","tick","values","label","text","grid","terrainBaseX","stringify","SUCCESS","PROFILE","inputSurfacePolyline","active","terrainProfileStart","ViewshedAnalysis","viewshedRange","posX","posY","posZ","viewshedRangeChange","posXChange","posYChange","posZChange","posClick","startAnalysis","clearAnalysis","analysis","ClearViewshedAnalysis","_analysis","posThis","inputCircle","GeoPoint","center","absHeight","addPointEntity","radius","ViewshedCenter","ViewshedRange","ViewshedColor","viewshedAnalysis","distance","SliceSpace","setSliceSpace","editSliceSpace","removeSliceSpace","isSliceSpace","LegendBox","startX","startY","onMove","onStop","drag","querySelector","preventDefault","clientX","offsetLeft","clientY","offsetTop","legendBoxContent","COLOR","VALUE","legendrag","StatusBar","camera","FPSintervalId","TerrainintervalId","MouseintervalId","fps","terrainNod","cameraPOS","FPS","getTerrainNod","cancelAnimationFrame","getFPS","getTerrainNodeProgress","ToolBar","errorHandler","onChangeCallback","selectedInterval","isSideMenu","globalSetting","layerOption","OtherList","googleSearch","IoTSensorThings","isCard","surveying","isinfoBoxOpen","COL","showLegend","legendList","showTimeLine","TimeLineContent","timelineInterval","isPlay","setOtherListOpen","setgoogleSearchOpen","setIoTSensorThingsOpen","setSurveyingOpen","setAnalysisOpen","querySelectorAll","item","setAttribute","timerID","next","getTime","content","needTimeLine","includes","layerListOpen","CardOpen","openLayer","layer2D","MODE","CLASS","ISBIM","BIMATTRS","VideoPath","HFov","VFov","Far","Near","ImgW","ImgH","setLegendList","DeleteList","closeTimeline","layerOptionOpen","Layer_2D_Length","infoBoxOpen","GlobalSetting","LayerOption","setTimeLineInterval","ticksNumber","onUpdateCallback","formatTick","ms","InfoBox","infoBoxSwitch","infoBoxStyle","transition","maxWidth","en_zh","NO","roofElevat","floors","noise","colspan","col","Boolean","hostname","match","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.de2ef1ba.chunk.js","sourcesContent":["import React from 'react';\r\n\r\nclass HelpComponent extends React.Component{\r\n closeModal(){\r\n this.props.onHelpClick(\"None\"); \r\n }\r\n render(){\r\n const videoSrc = this.props.videoSrc;\r\n return(\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default HelpComponent;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport reactCSS from 'reactcss';\r\nimport { SketchPicker } from 'react-color';\r\nimport Datetime from 'react-datetime';\r\nimport HelpComponent from './HelpComponent';\r\n\r\nclass AboutUs extends React.Component{\r\n constructor(){\r\n super();\r\n this.state ={\r\n isBubbleUIOpen : false,\r\n bubbleUI : {},\r\n element : {}\r\n };\r\n }\r\n aboutUs(){\r\n let isBubbleUIOpen = !this.state.isBubbleUIOpen;\r\n let UIthis = this;\r\n if(isBubbleUIOpen){\r\n let BBparameterBD = {};\r\n BBparameterBD.width = 600;\r\n BBparameterBD.height = 450;\r\n BBparameterBD.x = 120.99569205920561\r\n BBparameterBD.y = 24.782582152953882\r\n BBparameterBD.z = 6.04001092910767;\r\n BBparameterBD.lockPointHorizontal = \"middle\";\r\n BBparameterBD.lockPointVertical = \"bottom\";\r\n BBparameterBD.haveButton = true;\r\n let bubbleboxBD = new window.ov.UI.BubbleUI(BBparameterBD); \r\n let element = document.getElementById(\"bubblebox_div\");\r\n if(element === null){\r\n element = this.state.element;\r\n }\r\n bubbleboxBD.appendContent(element);\r\n window.main.OView.UIContext.addUI(bubbleboxBD);\r\n let Pos = new window.Geo3DPoint(120.99569205920561, 24.78257,365.96);\r\n let V = new window.Geo3DPoint(0,0,-1);\r\n let Up = new window.Geo3DPoint(0,1,0);\r\n let Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n this.setState({isBubbleUIOpen:isBubbleUIOpen,bubbleUI:bubbleboxBD,element:element});\r\n }\r\n else{\r\n window.main.OView.UIContext.removeUI(this.state.bubbleUI);\r\n this.setState({isBubbleUIOpen:isBubbleUIOpen,bubbleUI:{}});\r\n }\r\n }\r\n render(){\r\n return(\r\n
\r\n
this.aboutUs()}>\r\n
\r\n

關於我們

\r\n
\r\n
\r\n
\r\n {\r\n this.state.isBubbleUIOpen?\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n 連絡電話:\r\n
\r\n
\r\n 03-5776085\r\n
\r\n
\r\n
\r\n
\r\n 連絡地址:\r\n
\r\n
\r\n 30076 新竹市東區研發六路7號\r\n
\r\n
\r\n
\r\n
\r\n 計畫入口網站:\r\n
\r\n \r\n
\r\n
\r\n
: null\r\n }\r\n
\r\n
\r\n ); \r\n }\r\n}\r\n\r\nclass ContourLineSetting extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n contourLine:false,\r\n interval:100,\r\n displayColorPicker: false,\r\n color: {\r\n r: '255',\r\n g: '255',\r\n b: '255',\r\n a: '1',\r\n },\r\n hexColor:\"#FFFFFF\",\r\n helpMode : \"None\"\r\n }\r\n } \r\n handleClick = () => {\r\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\r\n };\r\n \r\n handleClose = () => {\r\n this.setState({ displayColorPicker: false })\r\n };\r\n \r\n handleChange = (color) => {\r\n this.setContourLine(this.state.contourLine,this.state.interval,color.hex);\r\n this.setState({ color: color.rgb, hexColor:color.hex }) \r\n };\r\n setContourLine(contourLine,interval,color){\r\n const ContourLineThis = this;\r\n window.main.OView.drawTerrainSetting = {\r\n \"contourSetting\": {\r\n \"isopen\": contourLine,\r\n \"color\": new window.GLCOLOR(color),\r\n \"interval\": interval,\r\n \"alpha\": Number(ContourLineThis.state.color.a)\r\n }\r\n };\r\n }\r\n setContourLineOpen(){ \r\n this.setContourLine(!this.state.contourLine,this.state.interval,this.state.hexColor);\r\n this.setState({contourLine:!this.state.contourLine});\r\n }\r\n IntervalChange(event){\r\n this.setContourLine(this.state.contourLine,event.target.valueAsNumber,this.state.hexColor);\r\n this.setState({interval:event.target.valueAsNumber});\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode});\r\n }\r\n render(){\r\n const contourLine = this.state.contourLine;\r\n const styles = reactCSS({\r\n 'default': {\r\n color: {\r\n width: '125px',\r\n height: '14px',\r\n borderRadius: '2px',\r\n background: `rgba(${ this.state.color.r }, ${ this.state.color.g }, ${ this.state.color.b }, ${ this.state.color.a })`,\r\n },\r\n swatch: {\r\n padding: '5px',\r\n background: '#fff',\r\n borderRadius: '10px',\r\n boxShadow: '0 0 0 1px rgba(0,0,0,.1)',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n popover: {\r\n position: 'absolute',\r\n zIndex: '20000',\r\n right: '0px'\r\n },\r\n cover: {\r\n position: 'fixed',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n left: '0px',\r\n },\r\n },\r\n });\r\n switch(this.state.helpMode){\r\n case \"ContourLine\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"None\":\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help'));\r\n break;\r\n }\r\n return(\r\n
\r\n
\r\n
等高線設定
\r\n
\r\n
\r\n
\r\n
\r\n 開啟等高線:\r\n \r\n
\r\n
\r\n
\r\n
\r\n this.setContourLineOpen()}>\r\n \r\n
\r\n
\r\n
\r\n {\r\n contourLine?\r\n
\r\n
\r\n
\r\n
\r\n
間距:
\r\n
\r\n
\r\n
\r\n this.IntervalChange(e)}>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
顏色:
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n { \r\n this.state.displayColorPicker ?
\r\n
\r\n \r\n
: null \r\n }\r\n
\r\n
\r\n
\r\n
\r\n
: null\r\n } \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass LightSetting extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n lightRendering : false,\r\n lightScattering : false, \r\n modelShadow : false,\r\n almanac : false,\r\n realTime : true,\r\n realTimeIntervalId : {},\r\n date : new Date(Date.now()),\r\n lightZenith : 45,\r\n lightAzimuth : 45,\r\n helpMode : \"None\"\r\n };\r\n this.realTimeInterva = this.realTimeInterva.bind(this);\r\n }\r\n setLightRenderingOpen(){\r\n window.main.OView.enableLight = !this.state.lightRendering;\r\n this.setState({lightRendering:!this.state.lightRendering});\r\n }\r\n setLightScatteringOpen(){\r\n window.main.OView.enableVolumetricLightScattering = !this.state.lightScattering;\r\n this.setState({lightScattering:!this.state.lightScattering});\r\n }\r\n setModelShadowOpen(){\r\n window.main.OView.enableShadow = !this.state.modelShadow;\r\n this.setState({modelShadow : !this.state.modelShadow});\r\n }\r\n setAlmanacOpen(){\r\n let LightProperty = window.main.OView.lightProperty;\r\n let realTimeIntervalId = this.state.realTimeIntervalId;\r\n clearInterval(realTimeIntervalId); \r\n realTimeIntervalId = {};\r\n if(!this.state.almanac&&this.state.realTime){\r\n window.alertify.success(\"已將日照設定為現在時間\");\r\n let date = new Date();\r\n window.main.OView.date = date;\r\n realTimeIntervalId = setInterval(this.realTimeInterva, 5000);\r\n }\r\n LightProperty.isAutoUpdateByDate =!this.state.almanac;\r\n LightProperty.isAbs =!this.state.almanac;\r\n window.main.OView.lightProperty = LightProperty;\r\n this.setState({almanac : !this.state.almanac ,realTimeIntervalId:realTimeIntervalId});\r\n }\r\n DatetimeChange(event){\r\n if(this.state.realTime){\r\n this.setState({date:this.state.date});\r\n }\r\n else{\r\n window.main.OView.date = event.toDate();\r\n this.setState({date:event.toDate()});\r\n } \r\n }\r\n setLightAzimuth(event){\r\n let LightProperty = window.main.OView.lightProperty;\r\n LightProperty.azimuthAngle = event.target.valueAsNumber;\r\n window.main.OView.lightProperty = LightProperty;\r\n this.setState({lightAzimuth:event.target.valueAsNumber});\r\n }\r\n setLightZenith(event){\r\n let LightProperty = window.main.OView.lightProperty;\r\n LightProperty.zenithAngle = event.target.valueAsNumber;\r\n window.main.OView.lightProperty = LightProperty;\r\n this.setState({lightZenith:event.target.valueAsNumber});\r\n }\r\n lightMouseEnter(){\r\n let LightProperty = window.main.OView.lightProperty;\r\n window.main.OView.enableDrawLightDirectionSketchMap = true;\r\n if(LightProperty.azimuthAngle!==this.state.lightAzimuth || LightProperty.zenithAngle!==this.state.lightZenith)\r\n this.setState({lightAzimuth:LightProperty.azimuthAngle,lightZenith:LightProperty.zenithAngle});\r\n }\r\n lightMouseLeave(){\r\n window.main.OView.enableDrawLightDirectionSketchMap = false;\r\n }\r\n realTimeInterva(){\r\n let date = new Date();\r\n window.main.OView.date = date;\r\n this.setState({date:date});\r\n }\r\n isRealTimeOpen(){\r\n let realTime = !this.state.realTime;\r\n let realTimeIntervalId = this.state.realTimeIntervalId;\r\n if(this.state.realTime){ \r\n window.alertify.success(\"現在可以自行設定時間了\"); \r\n clearInterval(realTimeIntervalId);\r\n realTimeIntervalId = {};\r\n this.setState({realTime:realTime,realTimeIntervalId:realTimeIntervalId});\r\n }\r\n else{\r\n window.alertify.success(\"已將日照設定為現在時間\");\r\n let date = new Date();\r\n window.main.OView.date = date;\r\n realTimeIntervalId = setInterval(this.realTimeInterva, 5000);\r\n this.setState({realTime:realTime,realTimeIntervalId:realTimeIntervalId,date:date});\r\n }\r\n \r\n }\r\n onHelpClick(mode){ \r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const siderRangeCSS ={\r\n background: \"linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%)\"\r\n };\r\n let isRealTime ;\r\n if(this.state.realTime){\r\n isRealTime = \r\n
\r\n this.DatetimeChange(e)} locale=\"zh-tw\" lang=\"zh-tw\"/>\r\n
\r\n \r\n
\r\n
;\r\n }\r\n else{\r\n isRealTime = \r\n
\r\n this.DatetimeChange(e)} locale=\"zh-tw\" lang=\"zh-tw\"/>\r\n
\r\n \r\n
\r\n
;\r\n } \r\n switch(this.state.helpMode){\r\n case \"LightRenderingHelp\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break; \r\n case \"LightScatteringHelp\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n break;\r\n case \"ModelShadowHelp\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n break; \r\n case \"AlmanacHelp\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n break;\r\n case \"AzimuthHelp\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"None\":\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help'));\r\n break;\r\n }\r\n return(\r\n
\r\n
\r\n
日光設定
\r\n
\r\n
\r\n
\r\n
日光渲染:\r\n \r\n
\r\n
\r\n
\r\n
\r\n this.setLightRenderingOpen()}>\r\n \r\n
\r\n
\r\n
\r\n {\r\n this.state.lightRendering?\r\n
\r\n
\r\n
\r\n
\r\n
光線散射:\r\n \r\n
\r\n
\r\n
\r\n
\r\n this.setLightScatteringOpen()}>\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
建物陰影:\r\n \r\n
\r\n
\r\n
\r\n
\r\n this.setModelShadowOpen()}>\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
天文曆:\r\n \r\n
\r\n
\r\n
\r\n
\r\n this.setAlmanacOpen()}>\r\n \r\n
\r\n
\r\n
\r\n {\r\n this.state.almanac?\r\n isRealTime\r\n :\r\n
\r\n
\r\n
\r\n
方位角:\r\n \r\n
\r\n
\r\n
\r\n this.lightMouseEnter()} onMouseLeave={(e)=>this.lightMouseLeave()} onChange={(e)=>this.setLightAzimuth(e)}> \r\n
\r\n
\r\n
\r\n
\r\n
仰角:
\r\n
\r\n
\r\n this.lightMouseEnter()} onMouseLeave={(e)=>this.lightMouseLeave()} onChange={(e)=>this.setLightZenith(e)}> \r\n
\r\n
\r\n
\r\n }\r\n \r\n
\r\n
: null\r\n } \r\n
\r\n
\r\n
\r\n ); \r\n }\r\n}\r\n\r\nclass TerrainDrawSetting extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n fillMode : \"default\",\r\n terrainElevation : false,\r\n throughSurface : false,\r\n waterRipple : false,\r\n waterLevel : \"1\",\r\n helpMode : \"None\"\r\n }; \r\n }\r\n fillModeChange(event){\r\n const fillMode = event.target.value;\r\n switch(fillMode){\r\n case \"default\" :\r\n window.main.OView.drawTerrainSetting = {\r\n \"grid\": false,\r\n \"vertexWireframe\": false,\r\n \"slopeColorSetting\": { \"isopen\": false },\r\n \"aspectColorSetting\": { \"isopen\": false },\r\n \"heightColorSetting\": { \"isopen\": false },\r\n \"wireframeColor\": \"#ffffff\",\r\n \"surface\": true\r\n };\r\n break;\r\n case \"wreframe\" :\r\n window.main.OView.drawTerrainSetting = {\r\n \"grid\": false,\r\n \"vertexWireframe\": true,\r\n \"vertexWireframeWithBaselayer\": true,\r\n \"slopeColorSetting\": { \"isopen\": false },\r\n \"aspectColorSetting\": { \"isopen\": false },\r\n \"heightColorSetting\": { \"isopen\": false },\r\n \"wireframeColor\": \"#ffffff\",\r\n \"surface\": false\r\n };\r\n break;\r\n case \"grid\" :\r\n window.main.OView.drawTerrainSetting = {\r\n \"grid\": true,\r\n \"vertexWireframe\": false,\r\n \"slopeColorSetting\": { \"isopen\": false },\r\n \"aspectColorSetting\": { \"isopen\": false },\r\n \"heightColorSetting\": { \"isopen\": false },\r\n \"wireframeColor\": \"#ffffff\",\r\n \"surface\": true\r\n };\r\n break;\r\n case \"slope\" :\r\n window.main.OView.drawTerrainSetting = {\r\n \"grid\": false,\r\n \"vertexWireframe\": false,\r\n \"slopeColorSetting\": { \"isopen\": true },\r\n \"aspectColorSetting\": { \"isopen\": false },\r\n \"heightColorSetting\": { \"isopen\": false },\r\n \"wireframeColor\": \"#ffffff\",\r\n \"surface\": true\r\n };\r\n break;\r\n case \"aspect\" :\r\n window.main.OView.drawTerrainSetting = {\r\n \"grid\": false,\r\n \"vertexWireframe\": false,\r\n \"slopeColorSetting\": { \"isopen\": false },\r\n \"aspectColorSetting\": { \"isopen\": true },\r\n \"heightColorSetting\": { \"isopen\": false },\r\n \"wireframeColor\": \"#ffffff\",\r\n \"surface\": true\r\n };\r\n break;\r\n case \"height\" :\r\n window.main.OView.drawTerrainSetting = {\r\n \"grid\": false,\r\n \"vertexWireframe\": false,\r\n \"slopeColorSetting\": { \"isopen\": false },\r\n \"aspectColorSetting\": { \"isopen\": false },\r\n \"heightColorSetting\": { \"isopen\": true },\r\n \"wireframeColor\": \"#ffffff\",\r\n \"surface\": true\r\n };\r\n break;\r\n };\r\n this.setState({fillMode:fillMode});\r\n }\r\n setTerrainElevationOpen(){\r\n window.main.OView.drawTerrainSetting = { noElevation: this.state.terrainElevation }; \r\n this.setState({terrainElevation : !this.state.terrainElevation});\r\n }\r\n setThroughSurfaceOpen(){\r\n window.main.OView.throughSurface = !this.state.throughSurface;\r\n this.setState({throughSurface : !this.state.throughSurface});\r\n } \r\n setWaterRippleOpen(){\r\n window.main.OView.getTerrainOverlay('Water').show = !this.state.waterRipple;\r\n window.main.OView.drawTerrainSetting = { showWater: !this.state.waterRipple }; \r\n this.setState({waterRipple : !this.state.waterRipple});\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode});\r\n }\r\n waterLevelChange(event){\r\n const waterLevel = event.target.value;\r\n switch(waterLevel){\r\n case \"0\" : \r\n window.main.OView.drawTerrainSetting = { waterQuality: \"low\"};\r\n break;\r\n case \"1\" :\r\n window.main.OView.drawTerrainSetting = { waterQuality: \"normal\"};\r\n break;\r\n case \"2\" : \r\n window.main.OView.drawTerrainSetting = { waterQuality: \"high\"};\r\n break;\r\n case \"3\" :\r\n window.main.OView.drawTerrainSetting = { waterQuality: \"very high\"};\r\n break;\r\n }\r\n this.setState({waterLevel:waterLevel});\r\n }\r\n render(){\r\n switch(this.state.helpMode){\r\n case \"fillMod\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"ThroughSurface\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break; \r\n case \"WaterRipple\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"None\":\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help'));\r\n break;\r\n }\r\n return(\r\n
\r\n
\r\n
地形地表設定
\r\n
\r\n
\r\n
\r\n
\r\n 繪製模式:\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
地形高程:
\r\n
\r\n
\r\n
\r\n this.setTerrainElevationOpen()}>\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
穿越地表:\r\n \r\n
\r\n
\r\n
\r\n
\r\n this.setThroughSurfaceOpen()}>\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
水面波紋:\r\n \r\n
\r\n
\r\n
\r\n
\r\n this.setWaterRippleOpen()}>\r\n \r\n
\r\n
\r\n
\r\n {\r\n this.state.waterRipple ?\r\n
\r\n
\r\n
波紋等級:
\r\n
\r\n
\r\n \r\n
\r\n
: null\r\n } \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass GlobalSettingSidebar extends React.Component{\r\n constructor() {\r\n super();\r\n this.sidebarSwitch = this.sidebarSwitch.bind(this);\r\n }\r\n sidebarSwitch(){\r\n this.props.setglobalSettingOpen();\r\n }\r\n render(){\r\n const isglobalSettingOpen = this.props.isglobalSettingOpen; \r\n const sideMenuCSS ={\r\n overflow : 'inherit',\r\n transform : isglobalSettingOpen?'translate3d(0, 0, 0)':'translate3d(-120%, 0, 0)',\r\n width : '480px'\r\n };\r\n const titleCSS = {\r\n margin: '10px 10px 10px 10px' \r\n };\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n \r\n
\r\n 圖台設定\r\n
\r\n

\r\n
\r\n
\r\n this.sidebarSwitch(e)}> \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nexport default GlobalSettingSidebar;","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\nimport { format } from \"date-fns\";\r\n\r\nclass OverlayOption extends React.Component{\r\n constructor() {\r\n super();\r\n this.sidebarChange = this.sidebarChange.bind(this);\r\n this.deleteLayerList = this.deleteLayerList.bind(this);\r\n this.gotoLayer = this.gotoLayer.bind(this);\r\n this.state = {\r\n opacity : \"\",\r\n helpMode : \"None\"\r\n };\r\n } \r\n componentWillMount(){ \r\n if (this.props.layer.layerType == \"Overlay\") {\r\n const layerName = this.props.layer.layerName;\r\n const defaultOpacity = window.main.OView.getTerrainOverlay(layerName).opacity * 100;\r\n this.setState({opacity:defaultOpacity});\r\n }\r\n }\r\n sidebarChange(event){\r\n const layerName = this.props.layer.layerName;\r\n window.main.OView.getTerrainOverlay(layerName).opacity = event.target.value/100;\r\n const defaultOpacity = window.main.OView.getTerrainOverlay(layerName).opacity * 100;\r\n this.setState({opacity:defaultOpacity});\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n var Pos = new window.Geo3DPoint(121.2347878442796,23.427553934089445,465850.0013822634);\r\n var V = new window.Geo3DPoint(0,0,-1);\r\n var Up = new window.Geo3DPoint(0,1,0);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const Layer = this.props.layer;\r\n const siderRangeCSS ={\r\n background: \"linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%)\"\r\n };\r\n if(this.state.helpMode === \"Layer2DHelp\" ){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n } \r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
{Layer.layerName}\r\n \r\n
\r\n
\r\n {\r\n (Layer.layerType === \"Overlay\") ? \r\n \r\n : null\r\n }\r\n
\r\n {\r\n (Layer.layerType === \"Overlay\") ? \r\n
\r\n this.sidebarChange(e)} style={siderRangeCSS}>\r\n
: null\r\n } \r\n
\r\n
this.deleteLayerList(Layer)}>\r\n \r\n
\r\n
\r\n
this.gotoLayer()}>\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass OverlayLayer extends React.Component{\r\n constructor() {\r\n super(); \r\n this.state = {\r\n List:[],\r\n Data:{}\r\n };\r\n this.wmtsLayerChecked = this.wmtsLayerChecked.bind(this);\r\n }\r\n componentWillMount(){\r\n var layerThis = this;\r\n const WMTSLayerList = window.LAYER_GROUP_2DWMTS.WMTS_LAYERS;\r\n window.LAYER_GROUP_2DWMTS.WMTS_GROUP.map(\r\n (layers) =>\r\n window.ov.getWMTSLayerInfo(layers.URL,function(e){\r\n if(e.url&&e.identifier){\r\n WMTSLayerList.push({\r\n TITLE:e.title||e.identifier,\r\n TYPE:\"Overlay\",\r\n ID:e.identifier,\r\n URL:e.url,\r\n CHECKED:false\r\n });\r\n }\r\n layerThis.setState({List:WMTSLayerList});\r\n })\r\n )\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot){\r\n const layerList = this.state.List;\r\n if (prevProps.currentTime!==this.props.currentTime) {\r\n for (var i in layerList) {\r\n if (layerList[i].CHECKED && layerList[i].TYPE == \"ConditionOverlay\" && layerList[i].TIMELINE !== undefined) {\r\n this.changeSetting(layerList[i], i);\r\n }\r\n }\r\n }\r\n if(this.props.deleteList.layerType === \"Overlay\" || this.props.deleteList.layerType == \"ConditionOverlay\"){\r\n for (let i = 0, len = this.state.List.length; i < len; i++){\r\n if (layerList[i].TITLE === this.props.deleteList.layerName){\r\n if(layerList[i].CHECKED){\r\n layerList[i].CHECKED = !layerList[i].CHECKED;\r\n let layername = (layerList[i].TYPE === \"ConditionOverlay\") ? layerList[i].LAYERNAME : layerList[i].TITLE;\r\n window.main.OView.removeTerrainOverlay(layername);\r\n window.alertify.error(\"已關閉圖層:\"+layerList[i].TITLE); \r\n this.setState({List:layerList});\r\n return ;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n changeSetting(layer, index) {\r\n let layerThis = this;\r\n let Data = layerThis.state.Data;\r\n let current = format(layer.TIMELINE.SELECTEDINTERVAL[0],'yyyyMMddHH');\r\n if (layerThis.props.currentTime.length != 0)\r\n current = format(layerThis.props.currentTime[0],'yyyyMMddHH');\r\n if (!Data.hasOwnProperty(layer.ID)) {\r\n\r\n } else {\r\n if (!Data[layer.ID].hasOwnProperty(current)) {\r\n\r\n } else {\r\n let data = Data[layer.ID];\r\n let setting = {\r\n url: window.LOCAL_SERVER.URL,\r\n layerName: layer.ID,\r\n drawColor: layer.DRAWCOLOR,\r\n fillColor: layer.FILLCOLOR,\r\n conditions: layer.CONDITIONS,\r\n extraSettings: layer.EXTRASETTINGS\r\n };\r\n let cond = {};\r\n if (layer.ID == \"taipei_vd\") {\r\n cond = {\r\n \"#FF009900\" : [],\r\n \"#FFFF9900\" : [],\r\n \"#FFFF0000\" : [],\r\n \"#FFAAAAAA\" : [],\r\n }\r\n for (var id in data[current]) {\r\n data[current][id] > 35 ? cond[\"#FF009900\"].push(\"'\"+id+\"'\") :\r\n data[current][id] > 15 ? cond[\"#FFFF9900\"].push(\"'\"+id+\"'\") :\r\n data[current][id] > 0 ? cond[\"#FFFF0000\"].push(\"'\"+id+\"'\") :\r\n cond[\"#FFAAAAAA\"].push(\"'\"+id+\"'\");\r\n }\r\n for (var color in cond) {\r\n setting.conditions.push({\r\n SQL: \"VD編號 IN (\"+cond[color].join(',')+\")\",\r\n DrawColor: color\r\n });\r\n }\r\n } else {\r\n cond = {\r\n \"#FFd82226\" : [],\r\n \"#FFe94529\" : [],\r\n \"#FFe36825\" : [],\r\n \"#FFf18624\" : [],\r\n \"#FFee9c26\" : [],\r\n \"#FFf4c723\" : [],\r\n \"#FFd4ca2a\" : [],\r\n \"#FFa2bd3c\" : [],\r\n \"#FF6cad47\" : [],\r\n \"#FF25a44b\" : [],\r\n \"#0025a44b\" : []\r\n };\r\n for (var id in data[current]) {\r\n data[current][id] > 140 ? cond[\"#FFd82226\"].push(id) :\r\n data[current][id] > 120 ? cond[\"#FFe94529\"].push(id) :\r\n data[current][id] > 110 ? cond[\"#FFe36825\"].push(id) :\r\n data[current][id] > 105 ? cond[\"#FFf18624\"].push(id) :\r\n data[current][id] > 90 ? cond[\"#FFee9c26\"].push(id) :\r\n data[current][id] > 80 ? cond[\"#FFf4c723\"].push(id) :\r\n data[current][id] > 60 ? cond[\"#FFd4ca2a\"].push(id) :\r\n data[current][id] > 50 ? cond[\"#FFa2bd3c\"].push(id) :\r\n data[current][id] > 30 ? cond[\"#FF6cad47\"].push(id) :\r\n data[current][id] > 0 ? cond[\"#FF25a44b\"].push(id) :\r\n cond[\"#0025a44b\"].push(id);\r\n }\r\n for (var color in cond) {\r\n setting.conditions.push({\r\n SQL: \"grid_ID IN (\"+cond[color].join(',')+\")\",\r\n FillColor: color\r\n });\r\n }\r\n }\r\n window.main.OView.setConditionOverlayLayer(setting, function (e) {\r\n if(e.success){\r\n let list = layerThis.state.List;\r\n if (!layer.CHECKED) {\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,null);\r\n list[index].CHECKED = !layer.CHECKED;\r\n list[index].LAYERNAME = e.layername;\r\n } else {\r\n list[index].LAYERNAME = e.layername;\r\n }\r\n layerThis.setState({List:list});\r\n } else if (!e.success) {\r\n if (!layer.CHECKED)\r\n window.alertify.error(\"開啟圖層失敗:\"+layer.TITLE);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n wmtsLayerChecked(layer,index){\r\n const list = this.state.List;\r\n const LayerEPSG = layer.EPSG || 3857;\r\n const layerThis = this; \r\n if(!layer.CHECKED){\r\n if(this.props.LayerLength<15){\r\n switch(layer.TYPE) {\r\n case \"ConditionOverlay\":\r\n list.forEach(function (l) {\r\n if (l.CHECKED && l.TYPE == \"ConditionOverlay\" && l.TITLE !== layer.TITLE)\r\n window.main.OView.removeTerrainOverlay(l.LAYERNAME);\r\n l.CHECKED = false;\r\n });\r\n if (layer.TIMELINE !== undefined)\r\n layerThis.props.setTimeLineContent(layer.TIMELINE);\r\n let Data = this.state.Data;\r\n let current = format(layer.TIMELINE.SELECTEDINTERVAL[0],'yyyyMMddHH');\r\n const data= { time: current };\r\n const formData = Object.keys(data).map(\r\n function (keyName) {\r\n return encodeURIComponent(keyName) + '=' + encodeURIComponent(data[keyName])\r\n }\r\n ).join('&');\r\n if (!Data.hasOwnProperty(layer.ID)) {\r\n fetch(layer.FETCHURL, {\r\n method: \"POST\",\r\n body: formData,\r\n headers: new Headers({\r\n \"Content-type\": \"application/x-www-form-urlencoded\"\r\n })\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n Data[layer.ID] = data;\r\n this.setState({Data});\r\n this.changeSetting(list[index], index);\r\n })\r\n .catch(e => {\r\n console.log(\"取得資料失敗\");\r\n })\r\n } else {\r\n this.changeSetting(list[index], index);\r\n }\r\n break;\r\n case \"Overlay\":\r\n window.main.OView.addTerrainWMTSOverlay({\r\n url: layer.URL,\r\n identifier: layer.ID,\r\n layername: layer.TITLE,\r\n pgmapserver: false,\r\n epsg: LayerEPSG,\r\n urlTemplate: \"{URL}\"\r\n }, function (e) {\r\n if(e){\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,null); \r\n list[index].CHECKED = !layer.CHECKED;\r\n layerThis.setState({List:list});\r\n }\r\n else if(!e){\r\n window.alertify.error(\"開啟圖層失敗:\"+layer.TITLE);\r\n }\r\n });\r\n break;\r\n defalt:\r\n break;\r\n }\r\n }\r\n else{\r\n window.alertify.error(\"為維持較好的使用效能,已達WMTS圖層開啟上限15張\");\r\n } \r\n }\r\n else{\r\n let layername = (layer.TYPE === \"ConditionOverlay\") ? list[index].LAYERNAME : layer.TITLE;\r\n window.main.OView.removeTerrainOverlay(layername);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n list[index].CHECKED = !layer.CHECKED; \r\n layerThis.setState({List:list});\r\n if (layer.TIMELINE !== undefined)\r\n layerThis.props.setTimeLineSwitch();\r\n }\r\n \r\n }\r\n render(){\r\n const List =this.state.List;\r\n return( \r\n
\r\n {\r\n List.map(\r\n (layers,index)=> \r\n
\r\n this.wmtsLayerChecked(layers,index)} checked={layers.CHECKED}>\r\n \r\n
\r\n )\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {OverlayLayer,OverlayOption} ;","import React from 'react';\r\n\r\nclass BaseLayer extends React.Component{\r\n constructor() {\r\n super();\r\n this.baseLayerChecked = this.baseLayerChecked.bind(this);\r\n this.state = {UserSetting:\"\"};\r\n }\r\n baseLayerChecked(layers){\r\n window.main.OView.setBaseLayer({\r\n url: layers.URL,\r\n identifier: layers.ID,\r\n urlTemplate: window.TERRAIN_SERVER.URLTemplate\r\n });\r\n }\r\n render(){\r\n return(\r\n
\r\n {\r\n window.BASE_LAYERS.map(\r\n (layers,index)=>\r\n index === 0 ?\r\n
\r\n this.baseLayerChecked(layers)}>\r\n \r\n
\r\n :\r\n
\r\n this.baseLayerChecked(layers)}>\r\n \r\n
\r\n )\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default BaseLayer;","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\nimport { format } from \"date-fns\";\r\n\r\nclass ModelSetOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n isHaveModel:false,\r\n drawMode : \"0\",\r\n scale : 1,\r\n cover : \"null\",\r\n helpMode : \"None\",\r\n isNoiceOpen : true\r\n };\r\n this.setEntityColor=this.setEntityColor.bind(this);\r\n }\r\n componentWillMount(){\r\n const layer = this.props.layer;\r\n var ModelSetLayer = this.props.layer.layerHandel;\r\n if(layer.layerMode!=null){\r\n if (layer.layerMode) {\r\n ModelSetLayer.setDrawMode(1, 3);\r\n this.setState({drawMode:\"0\",isHaveModel:true});\r\n } else{\r\n ModelSetLayer.setDrawMode(0, 0);\r\n this.setState({drawMode:\"1\",isHaveModel:false});\r\n } \r\n }\r\n if(this.state.isNoiceOpen){\r\n this.setEntityColor();\r\n }\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n GROUP:layer.group,\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n if(this.props.layer.layerLocation!=null){\r\n var Pos = new window.Geo3DPoint(this.props.layer.layerLocation.POS.x , this.props.layer.layerLocation.POS.y , this.props.layer.layerLocation.POS.z);\r\n var V = new window.Geo3DPoint(this.props.layer.layerLocation.V.x , this.props.layer.layerLocation.V.y , this.props.layer.layerLocation.V.z);\r\n var Up = new window.Geo3DPoint(this.props.layer.layerLocation.UP.x , this.props.layer.layerLocation.UP.y , this.props.layer.layerLocation.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n var ModelSetLayer = this.props.layer.layerHandel;\r\n ModelSetLayer.goto();\r\n }\r\n }\r\n settingOpen(){\r\n this.setState({ isSettingOpen: !this.state.isSettingOpen });\r\n }\r\n coverChange(event){\r\n var cover = event.target.value;\r\n var ModelSetLayer = this.props.layer.layerHandel;\r\n if(cover === \"null\"){\r\n ModelSetLayer.setOverlayName([]);\r\n window.main.OView.updateScreen();\r\n } \r\n else{\r\n ModelSetLayer.setOverlayName(cover);\r\n window.main.OView.updateScreen();\r\n } \r\n this.setState({cover : cover});\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n NoiceToggleOpen(){\r\n var ModelSetLayer = this.props.layer.layerHandel;\r\n if(this.state.isNoiceOpen){\r\n ModelSetLayer.removeEntityColorFunction(); \r\n }\r\n this.setState({isNoiceOpen:!this.state.isNoiceOpen});\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot){\r\n if(prevProps.currentTime!==this.props.currentTime || prevState.isNoiceOpen!==this.state.isNoiceOpen){\r\n this.setEntityColor();\r\n this.changeNoiceInfo();\r\n }\r\n }\r\n changeNoiceInfo(){\r\n const layerThis = this;\r\n if (layerThis.props.layer.timeLine !== undefined) {\r\n let attr = layerThis.props.infoBoxAttr;\r\n \r\n let time = format(layerThis.props.layer.timeLine.SELECTEDINTERVAL[0],'yyyyMMddHH');\r\n if (layerThis.props.currentTime.length != 0)\r\n time = format(layerThis.props.currentTime[0],'yyyyMMddHH');\r\n let data = window.BuildNoice;\r\n if (attr.ATTR.length != 0) {\r\n let layerId = layerThis.props.layer.id;\r\n if (data.hasOwnProperty(layerId)) {\r\n let building_id = attr.ATTR[1]+\"_\"+attr.ATTR[3];\r\n if (data[layerId][time].hasOwnProperty(building_id)) {\r\n attr.ATTR[4] = data[layerId][time][building_id];\r\n } else {\r\n attr.ATTR[4] = \"無資料\";\r\n }\r\n layerThis.props.setinfoBox(attr);\r\n } else {\r\n layerThis.props.layer.layerHandel.getColAndAttrs(attr.ATTR[0], function(attrs) {\r\n attr.ATTR[4] = \"無資料\";\r\n layerThis.props.setinfoBox(attrs);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n setEntityColor(){\r\n if (this.props.layer.timeLine !== undefined) {\r\n let ModelSetLayer = this.props.layer.layerHandel;\r\n let time = format(this.props.layer.timeLine.SELECTEDINTERVAL[0],'yyyyMMddHH');\r\n if (this.props.currentTime.length != 0)\r\n time = format(this.props.currentTime[0],'yyyyMMddHH');\r\n let data = window.BuildNoice;\r\n if (this.state.isNoiceOpen) {\r\n let layerId = this.props.layer.id;\r\n ModelSetLayer.setEntityColorFunction([\"NO\", \"floors\", \"noice\"], function (id, Attrs, color) {\r\n let building_id = Attrs[0] + \"_\" + Attrs[1];\r\n let noice = 0;\r\n if (data.hasOwnProperty(layerId)) {\r\n if (data[layerId][time].hasOwnProperty(building_id))\r\n noice = data[layerId][time][building_id];\r\n }\r\n\r\n if (noice < 30) {\r\n color[0] = 26; // R\r\n color[1] = 150; // G\r\n color[2] = 65; // B\r\n color[3] = 255; // A\r\n } else if (noice < 35 && noice >= 30) {\r\n color[0] = 73;\r\n color[1] = 188;\r\n color[2] = 62;\r\n color[3] = 255;\r\n } else if (noice < 40 && noice >= 35) {\r\n color[0] = 166;\r\n color[1] = 217;\r\n color[2] = 106;\r\n color[3] = 255;\r\n } else if (noice < 45 && noice >= 40) {\r\n color[0] = 207;\r\n color[1] = 229;\r\n color[2] = 106;\r\n color[3] = 255;\r\n } else if (noice < 50 && noice >= 45) {\r\n color[0] = 248;\r\n color[1] = 235;\r\n color[2] = 135;\r\n color[3] = 255;\r\n } else if (noice < 55 && noice >= 50) {\r\n color[0] = 255;\r\n color[1] = 206;\r\n color[2] = 89;\r\n color[3] = 255;\r\n } else if (noice < 60 && noice >= 55) {\r\n color[0] = 251;\r\n color[1] = 162;\r\n color[2] = 91;\r\n color[3] = 255;\r\n } else if (noice < 65 && noice >= 60) {\r\n color[0] = 251;\r\n color[1] = 121;\r\n color[2] = 20;\r\n color[3] = 255;\r\n } else if (noice < 70 && noice >= 65) {\r\n color[0] = 251;\r\n color[1] = 65;\r\n color[2] = 102;\r\n color[3] = 255;\r\n } else if (noice < 75 && noice >= 70) {\r\n color[0] = 234;\r\n color[1] = 23;\r\n color[2] = 47;\r\n color[3] = 255;\r\n } else if (noice < 80 && noice >= 75) {\r\n color[0] = 187;\r\n color[1] = 21;\r\n color[2] = 46;\r\n color[3] = 255;\r\n } else if (noice < 85 && noice >= 80) {\r\n color[0] = 143;\r\n color[1] = 21;\r\n color[2] = 46;\r\n color[3] = 255;\r\n } else if (noice >= 85) {\r\n color[0] = 88;\r\n color[1] = 21;\r\n color[2] = 46;\r\n color[3] = 255;\r\n } else {\r\n color[0] = 255; // R\r\n color[1] = 255; // G\r\n color[2] = 255; // B\r\n color[3] = 255; // A\r\n // 不符合的圖素白色\r\n } \r\n return true; // 回傳值為true則顯示,false則隱藏圖素\r\n });\r\n }\r\n }\r\n }\r\n render(){\r\n const LayerList_2D = this.props.LayerList_2D;\r\n const Layer = this.props.layer;\r\n if(this.state.helpMode === \"ModelSetHelp\" ){\r\n if(this.state.isHaveModel){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n\r\n }\r\n else{\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n }\r\n } \r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n {\r\n this.state.isSettingOpen?\r\n
\r\n
\r\n
\r\n
影像披覆:
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
噪音程度上色:
\r\n
\r\n
\r\n
\r\n this.NoiceToggleOpen()}>\r\n \r\n
\r\n
\r\n
\r\n
: null\r\n } \r\n
\r\n );\r\n }\r\n}\r\n\r\nclass ModelSetLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n modelSetLayer:{}\r\n }; \r\n this.modelSetLayerChecked = this.modelSetLayerChecked.bind(this); \r\n }\r\n componentDidMount(){\r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.modelSetLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,modelSetLayer:{}});\r\n } \r\n }\r\n }\r\n divTime(time){\r\n let time1 = Date.parse(time[0]);\r\n let time2 = Date.parse(time[1]);\r\n return Math.abs(parseInt((time2 - time1) / 1000 / 3600));\r\n }\r\n getNoiseData(){\r\n let layer = this.props.layer;\r\n let dt_s = format(layer.TIMELINE.TIMElINEINTERVAL[0],'yyyyMMddHH');\r\n let range = this.divTime(layer.TIMELINE.TIMElINEINTERVAL);\r\n // let range = 3;\r\n const d = {\r\n type: \"building\",\r\n area: layer.ID,\r\n dt_s: dt_s,\r\n range: range\r\n };\r\n const formData = Object.keys(d).map(function (keyName) {\r\n return encodeURIComponent(keyName) + '=' + encodeURIComponent(d[keyName])\r\n }).join('&');\r\n if (!window.BuildNoice.hasOwnProperty(layer.ID)) {\r\n if (layer.FETCHURL !== undefined) {\r\n fetch(layer.FETCHURL, {\r\n method: \"POST\",\r\n body: formData,\r\n headers: new Headers({\r\n \"Content-type\": \"application/x-www-form-urlencoded\"\r\n })\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n Object.assign(window.BuildNoice, data);\r\n })\r\n .catch(e => {\r\n console.log(e);\r\n console.log(\"取得資料失敗\");\r\n })\r\n }\r\n }\r\n }\r\n modelSetLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if(!isChecked){\r\n if (layer.LEGEND !== undefined) {\r\n this.getNoiseData();\r\n }\r\n window.main.OView.addModelSetLayer({\r\n url: window.LOCAL_SERVER.URL,\r\n identifier: layer.ID,\r\n urlTemplate: window.LOCAL_SERVER.URLTemplate,\r\n callback: function (e,modelSetLayer) {\r\n if(e){\r\n modelSetLayer.setUseLight(false);\r\n modelSetLayer.setOnClickEntity(function(id, pos) {\r\n modelSetLayer.getColAndAttrs(id, function(attrs) {\r\n let time = format(layer.TIMELINE.SELECTEDINTERVAL[0],'yyyyMMddHH');\r\n if (layerThis.props.currentTime.length != 0)\r\n time = format(layerThis.props.currentTime[0],'yyyyMMddHH');\r\n let data = window.BuildNoice;\r\n attrs.ATTR[4] = \"無資料\";\r\n if (data.hasOwnProperty(layer.ID)) {\r\n let building_id = attrs.ATTR[1]+\"_\"+attrs.ATTR[3];\r\n if (data[layer.ID][time].hasOwnProperty(building_id)) {\r\n attrs.ATTR[4] = data[layer.ID][time][building_id];\r\n }\r\n }\r\n layerThis.props.setinfoBoxOpen();\r\n layerThis.props.setinfoBox(attrs);\r\n });\r\n });\r\n if(layer.LOCATION!=null){\r\n var Pos = new window.Geo3DPoint(layer.LOCATION.POS.x , layer.LOCATION.POS.y , layer.LOCATION.POS.z);\r\n var V = new window.Geo3DPoint(layer.LOCATION.V.x , layer.LOCATION.V.y , layer.LOCATION.V.z);\r\n var Up = new window.Geo3DPoint(layer.LOCATION.UP.x , layer.LOCATION.UP.y , layer.LOCATION.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n modelSetLayer.goto();\r\n }\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,modelSetLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({ isChecked: isChecked, modelSetLayer: modelSetLayer });\r\n if (layer.LEGEND !== undefined)\r\n layerThis.props.setLegendBoxContent(layer.LEGEND);\r\n if (layer.TIMELINE !== undefined)\r\n layerThis.props.setTimeLineContent(layer.TIMELINE);\r\n }\r\n else if(!e){\r\n window.alertify.error(\"連結不到圖層::\"+layer.TITLE);\r\n }\r\n }\r\n }); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.modelSetLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,modelSetLayer:{}});\r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.modelSetLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {ModelSetLayer,ModelSetOption};","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\nimport { format } from \"date-fns\";\r\n\r\nclass CustomOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n opacity : \"\",\r\n };\r\n }\r\n componentWillMount(){\r\n const layer = this.props.layer;\r\n var CustomLayer = this.props.layer.layerHandel;\r\n this.setState({opacity: 100});\r\n }\r\n sidebarChange(event){\r\n const customLayer = this.props.layer.layerHandel;\r\n customLayer.entities.forEach(function(entity) {\r\n entity.update({opacity: event.target.value/100});\r\n });\r\n const defaultOpacity = customLayer._layer._Entities[0]._Opacity * 100;\r\n this.setState({opacity:defaultOpacity});\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n GROUP:layer.group,\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n if(this.props.layer.layerLocation!=null){\r\n var Pos = new window.Geo3DPoint(this.props.layer.layerLocation.POS.x , this.props.layer.layerLocation.POS.y , this.props.layer.layerLocation.POS.z);\r\n var V = new window.Geo3DPoint(this.props.layer.layerLocation.V.x , this.props.layer.layerLocation.V.y , this.props.layer.layerLocation.V.z);\r\n var Up = new window.Geo3DPoint(this.props.layer.layerLocation.UP.x , this.props.layer.layerLocation.UP.y , this.props.layer.layerLocation.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n var CustomLayer = this.props.layer.layerHandel;\r\n CustomLayer.goto();\r\n }\r\n }\r\n render(){\r\n const LayerList_2D = this.props.LayerList_2D;\r\n const Layer = this.props.layer;\r\n const siderRangeCSS ={\r\n background: \"linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%)\"\r\n };\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n \r\n this.sidebarChange(e)} style={siderRangeCSS}>\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass CustomLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n customLayer:{},\r\n geojsonData: {},\r\n dtData: {},\r\n }; \r\n this.customLayerChecked = this.customLayerChecked.bind(this); \r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot){\r\n if (prevState.customLayer !== this.state.customLayer && this.state.isChecked) {\r\n this.getDtData();\r\n }\r\n if (prevProps.layer.TITLE === this.props.layer.TITLE && prevProps.currentTime.length != 0) {\r\n if (prevState.isChecked && format(prevProps.currentTime[0], 'yyyyMMddHH') !== format(this.props.currentTime[0], 'yyyyMMddHH')) {\r\n if (this.state.isChecked) {\r\n this.drawEntity();\r\n }\r\n }\r\n }\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.customLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,customLayer:{}});\r\n } \r\n }\r\n }\r\n getColor(val){\r\n let legend = this.props.layer.LEGEND;\r\n for (var i = 0; i < legend[\"VALUE\"].length; i ++) {\r\n if (val == null && legend[\"VALUE\"][i] == \"無資料\") {\r\n return legend[\"COLOR\"][i];\r\n } else if (val < legend[\"VALUE\"][i] && i !== 0) {\r\n return legend[\"COLOR\"][i - 1];\r\n } else if (legend[\"VALUE\"][i] < val && i+1 == legend[\"VALUE\"].length) {\r\n return legend[\"COLOR\"][i];\r\n }\r\n }\r\n return legend[\"COLOR\"][0];\r\n }\r\n drawEntity(){\r\n let layer = this.props.layer;\r\n let layerHandel = this.state.customLayer;\r\n let data = this.state.dtData;\r\n let dt = format(layer.TIMELINE.SELECTEDINTERVAL[0],'yyyyMMddHH');\r\n if (this.props.currentTime.length != 0)\r\n dt = format(this.props.currentTime[0],'yyyyMMddHH');\r\n var opacity = 1;\r\n if (layerHandel.entities.length > 0) {\r\n opacity = layerHandel.entities[0]._entity._Opacity;\r\n }\r\n layerHandel.removeAllEntity();\r\n const layerThis = this; \r\n switch (layer.GEOMETRY) {\r\n case \"polygon\":\r\n layerThis.state.geojsonData.features.forEach(function (f) {\r\n let id = f.properties[\"grid_ID\"];\r\n let val = null;\r\n if (data[dt] != undefined)\r\n val = data[dt][id]\r\n let polygon = new window.GeoPolygonSet();\r\n polygon.FromGeoJSON(f.geometry);\r\n layerHandel.addPolygonPrismEntity({\r\n geo: polygon,\r\n color: layerThis.getColor(val),\r\n opacity: opacity,\r\n drawBorder: true,\r\n borderColor: \"#FFFFFF\",\r\n epsg: 4326\r\n }).setTooltip(\"grid_ID:\" + f.properties[\"grid_ID\"] + \"
噪音值:\" + ((val == null) ? \"無資料\" : val));\r\n });\r\n break;\r\n case \"polyline\":\r\n let type = (layer.ID == \"taipei_vd_avgspeed\")||(layer.ID == \"taichung_road_avgspeed\") ? \"平均車速\" : \"總車流量\";\r\n layerThis.state.geojsonData.features.forEach(function (f) {\r\n let id = f.properties[\"VD編號\"];\r\n let val = null;\r\n if (data[dt] != undefined)\r\n val = data[dt][id]\r\n let polyline = new window.GeoPolyline();\r\n polyline.FromGeoJSON(f.geometry);\r\n if (polyline.Buffer.length > 1) {\r\n layerHandel.addGroundPolylineEntity({\r\n geo: polyline,\r\n color: layerThis.getColor(val),\r\n size: 4,\r\n opacity: opacity,\r\n epsg: 4326\r\n }).setTooltip(f.properties[\"道路\"]+\"
\"+f.properties[\"大街廓\"]+\"
\"+type+\":\"+ ((val == null) ? \"無資料\" : val));\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n divTime(time){\r\n let time1 = Date.parse(time[0]);\r\n let time2 = Date.parse(time[1]);\r\n return Math.abs(parseInt((time2 - time1) / 1000 / 3600));\r\n }\r\n getDtData(){\r\n let layer = this.props.layer;\r\n let layerHandel = this.state.customLayer;\r\n let dt_s = format(layer.TIMELINE.TIMElINEINTERVAL[0],'yyyyMMddHH');\r\n let range = this.divTime(layer.TIMELINE.TIMElINEINTERVAL);\r\n const d = {\r\n type: layer.ID,\r\n dt_s: dt_s,\r\n range: range\r\n };\r\n const formData = Object.keys(d).map(function (keyName) {\r\n return encodeURIComponent(keyName) + '=' + encodeURIComponent(d[keyName])\r\n }).join('&');\r\n if (!this.state.dtData.hasOwnProperty(dt_s)) {\r\n if (layer.FETCHURL !== undefined) {\r\n fetch(layer.FETCHURL, {\r\n method: \"POST\",\r\n body: formData,\r\n headers: new Headers({\r\n \"Content-type\": \"application/x-www-form-urlencoded\"\r\n })\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n this.setState({dtData: data});\r\n this.drawEntity();\r\n })\r\n .catch(e => {\r\n console.log(e);\r\n console.log(\"取得資料失敗\");\r\n })\r\n }\r\n } else {\r\n this.drawEntity();\r\n }\r\n }\r\n customLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n let geojsonData = {};\r\n const layerThis = this; \r\n if(!isChecked){\r\n window.main.OView.drawTerrainSetting = {noElevation: true};\r\n window.main.OView.addCustomLayer({\r\n layername: layer.ID,\r\n callback: function (success, customLayer) {\r\n if (success) {\r\n if (!layerThis.state.geojsonData.hasOwnProperty(\"features\")) {\r\n fetch(layer.GEOJSONURL, {\r\n method: \"GET\",\r\n headers: new Headers({\r\n 'Content-Type': 'application/json'\r\n })\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n layerThis.setState({geojsonData: data});\r\n })\r\n .catch(e => {\r\n console.log(e);\r\n console.log(\"無法取得geojson\");\r\n })\r\n }\r\n if (layer.LOCATION!=null) {\r\n var Pos = new window.Geo3DPoint(layer.LOCATION.POS.x , layer.LOCATION.POS.y , layer.LOCATION.POS.z);\r\n var V = new window.Geo3DPoint(layer.LOCATION.V.x , layer.LOCATION.V.y , layer.LOCATION.V.z);\r\n var Up = new window.Geo3DPoint(layer.LOCATION.UP.x , layer.LOCATION.UP.y , layer.LOCATION.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n } else {\r\n customLayer.goto();\r\n }\r\n layerThis.props.setOpenLayer(layer,customLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({ isChecked: isChecked, customLayer: customLayer });\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n if (layer.LEGEND !== undefined)\r\n layerThis.props.setLegendBoxContent(layer.LEGEND);\r\n if (layer.TIMELINE !== undefined)\r\n layerThis.props.setTimeLineContent(layer.TIMELINE);\r\n } else {\r\n window.alertify.error(\"連結不到圖層::\" + layer.TITLE);\r\n }\r\n }\r\n }); \r\n } else {\r\n window.main.OView.removeLayer(this.state.customLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,customLayer:{}});\r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.customLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {CustomLayer, CustomOption};","/* eslint-disable array-callback-return */\r\nimport React from 'react';\r\nimport { ModelSetLayer } from './ModelSetLayer';\r\nimport { CustomLayer } from './CustomLayer';\r\n\r\nclass NoiseLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n List:[]\r\n };\r\n }\r\n componentDidMount(){\r\n let List = window.LAYER_GROUP_NOISEMAP.LAYER;\r\n this.setState({List:List});\r\n }\r\n render(){\r\n const List = this.state.List;\r\n const deleteList = this.props.deleteList;\r\n return(\r\n <>\r\n {\r\n List.map((layer) => {\r\n return(\r\n
\r\n {layer.NAME}\r\n
\r\n {\r\n layer.PARAM.map((param) => {\r\n switch (param.TYPE) {\r\n case \"ModelSet\":\r\n return this.props.setOpenLayer(param,layerHandel)} deleteLayer = {(param)=>this.props.deleteLayer(param)} deleteList={deleteList} setinfoBox={(attr)=>this.props.setinfoBox(attr)} setinfoBoxOpen = {this.props.setinfoBoxOpen} setLegendBoxSwitch={this.props.setLegendBoxSwitch} setLegendBoxContent={this.props.setLegendBoxContent} setTimeLineContent = {this.props.setTimeLineContent} currentTime={this.props.currentTime}/>;\r\n case \"Custom\":\r\n return this.props.setOpenLayer(param,layerHandel)} deleteLayer = {(param)=>this.props.deleteLayer(param)} deleteList={deleteList} setinfoBox={(attr)=>this.props.setinfoBox(attr)} setLegendBoxSwitch={this.props.setLegendBoxSwitch} setLegendBoxContent={this.props.setLegendBoxContent} setTimeLineContent = {this.props.setTimeLineContent} currentTime={this.props.currentTime}/>;\r\n default:\r\n break;\r\n }\r\n })\r\n }\r\n
\r\n
\r\n )\r\n })\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default NoiseLayer;","import React from 'react';\r\n\r\nclass TerrainLayer extends React.Component{\r\n constructor() {\r\n super();\r\n this.terrainLayerChecked = this.terrainLayerChecked.bind(this);\r\n }\r\n terrainLayerChecked(layers){\r\n window.main.OView.reloadTerrain(layers.ID);\r\n }\r\n render(){\r\n return(\r\n
\r\n {\r\n window.TERRAIN_LAYERS.map(\r\n (layers,index)=>\r\n index === 0 ?\r\n
\r\n this.terrainLayerChecked(layers)}>\r\n \r\n
\r\n :\r\n
\r\n this.terrainLayerChecked(layers)}>\r\n \r\n
\r\n )\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default TerrainLayer;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {OverlayLayer} from './LayerInfo/OverLayLayer';\r\nimport BaseLayer from './LayerInfo/BaseLayer';\r\nimport NoiseLayer from './LayerInfo/NoiseLayer';\r\nimport TerrainLayer from './LayerInfo/TerrainLayer';\r\nimport HelpComponent from './HelpComponent';\r\n\r\nclass TerrainSiderBar extends React.Component{\r\n constructor() {\r\n super();\r\n this.sidebarChange = this.sidebarChange.bind(this);\r\n this.state = {\r\n siderValue:100,\r\n intervalID:null\r\n };\r\n }\r\n componentDidMount(){\r\n let siderValue = 100; \r\n let componentThis = this;\r\n var intervalID = setInterval(function() {\r\n siderValue = window.main.OView.terrainAlpha * 100; \r\n componentThis.setState({siderValue:siderValue});\r\n }, 1000); \r\n this.setState({intervalID:intervalID});\r\n }\r\n sidebarChange(event){ \r\n window.main.OView.terrainAlpha = event.target.value/100;\r\n this.setState({siderValue:event.target.value});\r\n }\r\n render(){\r\n const siderRangeCSS ={\r\n background: \"linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%)\"\r\n };\r\n return(\r\n
\r\n
\r\n

地形透視

\r\n \r\n
\r\n \r\n
\r\n this.sidebarChange(e)} style={siderRangeCSS}>\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass LayerList extends React.Component{\r\n constructor(){\r\n super();\r\n this.setOpenLayer = this.setOpenLayer.bind(this);\r\n this.deleteLayer = this.deleteLayer.bind(this);\r\n this.setinfoBox = this.setinfoBox.bind(this);\r\n } \r\n setOpenLayer(layer,layerHandelr){\r\n this.props.setOpenLayer(layer,layerHandelr);\r\n }\r\n deleteLayer(layer){\r\n this.props.deleteLayer(layer);\r\n } \r\n setinfoBox(attrs){\r\n this.props.setinfoBox(attrs);\r\n }\r\n render(){\r\n const deleteList = this.props.deleteList;\r\n const LayerLength = this.props.LayerLength;\r\n return( \r\n
\r\n \r\n
\r\n \r\n \r\n 地形\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n 底圖\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n 2D圖層 \r\n \r\n this.setOpenLayer(layer,layerHandel)} deleteLayer = {(layer)=>this.deleteLayer(layer)} deleteList={deleteList} LayerLength={LayerLength} setTimeLineContent={this.props.setTimeLineContent} setTimeLineSwitch={this.props.setTimeLineSwitch} currentTime={this.props.currentTime}/>\r\n
\r\n
\r\n \r\n \r\n 噪音圖層\r\n \r\n this.setOpenLayer(layer,layerHandel)} \r\n deleteLayer = {(layer)=>this.deleteLayer(layer)} \r\n deleteList={deleteList} \r\n setinfoBox = {(attrs)=>this.setinfoBox(attrs)}\r\n setinfoBoxOpen = {this.props.setinfoBoxOpen}\r\n setLegendBoxSwitch = {this.props.setLegendBoxSwitch}\r\n setLegendBoxContent = {this.props.setLegendBoxContent}\r\n setTimeLineContent = {this.props.setTimeLineContent}\r\n currentTime={this.props.currentTime}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass LayerListSidebar extends React.Component{\r\n constructor() {\r\n super();\r\n this.sidebarSwitch = this.sidebarSwitch.bind(this);\r\n this.setOpenLayer = this.setOpenLayer.bind(this);\r\n this.deleteLayer = this.deleteLayer.bind(this);\r\n this.setinfoBox = this.setinfoBox.bind(this);\r\n this.state = {\r\n helpMode : \"None\"\r\n }\r\n }\r\n sidebarSwitch(){\r\n this.props.setlayerListOpen();\r\n }\r\n setOpenLayer(layer,layerHandelr){\r\n this.props.setOpenLayer(layer,layerHandelr);\r\n }\r\n setinfoBox(attrs){\r\n this.props.setinfoBox(attrs);\r\n }\r\n deleteLayer(layer){\r\n this.props.deleteLayer(layer);\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode : mode});\r\n }\r\n render(){\r\n const islayerListOpen = this.props.islayerListOpen;\r\n const deleteList = this.props.deleteList;\r\n const LayerLength = this.props.LayerLength;\r\n const sideMenuCSS ={\r\n overflow : 'inherit',\r\n transform : islayerListOpen?'translate3d(0, 0, 0)':'translate3d(-120%, 0, 0)',\r\n width : '480px'\r\n };\r\n const titleCSS = {\r\n margin: '10px 10px 10px 10px'\r\n };\r\n if(this.state.helpMode === \"LayerList\"){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'))\r\n }\r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help'));\r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n \r\n
\r\n 圖層集\r\n
\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n this.sidebarSwitch(e)}> \r\n
\r\n
\r\n
\r\n this.setOpenLayer(layer,layerHandelr)}\r\n deleteLayer = {(layer)=>this.deleteLayer(layer)} \r\n deleteList={deleteList} \r\n LayerLength={LayerLength} \r\n setinfoBox = {(attrs)=>this.setinfoBox(attrs)} \r\n setinfoBoxOpen = {this.props.setinfoBoxOpen}\r\n setLegendBoxSwitch = {this.props.setLegendBoxSwitch}\r\n setLegendBoxContent = {this.props.setLegendBoxContent}\r\n setTimeLineContent = {this.props.setTimeLineContent}\r\n currentTime={this.props.currentTime}\r\n /> \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default LayerListSidebar;","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport reactCSS from 'reactcss';\r\nimport { SketchPicker } from 'react-color';\r\nimport HelpComponent from '../HelpComponent';\r\n\r\nclass LidarOption extends React.Component{\r\n constructor() {\r\n super();\r\n this.deleteLayerList = this.deleteLayerList.bind(this);\r\n this.gotoLayer = this.gotoLayer.bind(this);\r\n this.state = {\r\n isSettingOpen : false,\r\n isEDLOpen : false,\r\n isAltitudeOpen : false,\r\n isColorLegendOpen : false,\r\n displayColorPicker: false,\r\n EDL:0,\r\n color: {\r\n r: '241',\r\n g: '112',\r\n b: '19',\r\n a: '1',\r\n },\r\n hexColor:\"#F17013\",\r\n AltitudeType : \"單色漸層\",\r\n AltitudeMin : 0,\r\n AltitudeMax : 0,\r\n helpMode : \"None\"\r\n };\r\n } \r\n componentDidMount(){\r\n let LidarLayer = this.props.layer.layerHandel;\r\n let AltitudeMin = LidarLayer.getAltitude().AltitudeMin;\r\n let AltitudeMax = LidarLayer.getAltitude().AltitudeMax;\r\n this.setState({AltitudeMax:AltitudeMax,AltitudeMin:AltitudeMin});\r\n }\r\n handleClick = () => {\r\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\r\n };\r\n \r\n handleClose = () => {\r\n this.setState({ displayColorPicker: false })\r\n };\r\n \r\n handleChange = (color) => {\r\n let LidarLayer = this.props.layer.layerHandel;\r\n let AltitudeMin = this.state.AltitudeMin;\r\n let AltitudeMax = this.state.AltitudeMax;\r\n let gap = (AltitudeMax - AltitudeMin)/4;\r\n LidarLayer.setColorSet(\r\n [\r\n color.rgb.r, color.rgb.g, color.rgb.b, color.rgb.a,\r\n color.rgb.r * 0.75, color.rgb.g * 0.75, color.rgb.b * 0.75, color.rgb.a,\r\n color.rgb.r * 0.5, color.rgb.g * 0.5, color.rgb.b * 0.5, color.rgb.a,\r\n color.rgb.r * 0.25, color.rgb.g * 0.25, color.rgb.b * 0.25, color.rgb.a,\r\n 0, 0, 0, color.rgb.a, \r\n ],\r\n [AltitudeMax, AltitudeMax - gap, AltitudeMax - gap * 2, AltitudeMax - gap * 3, AltitudeMax - gap * 4]);\r\n window.main.OView.updateScreen();\r\n this.setState({ color: color.rgb,hexColor:color.hex })\r\n };\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n let LidarLayer = this.props.layer.layerHandel;\r\n LidarLayer.goto();\r\n }\r\n settingOpen(){\r\n this.setState({ isSettingOpen: !this.state.isSettingOpen });\r\n }\r\n EDLOpen(){\r\n let LidarLayer = this.props.layer.layerHandel;\r\n LidarLayer.enableEDL(!this.state.isEDLOpen);\r\n this.setState({ isEDLOpen: !this.state.isEDLOpen });\r\n }\r\n setEDLLevel(event){ \r\n let LidarLayer = this.props.layer.layerHandel; \r\n LidarLayer.edlStrength = event.target.valueAsNumber;\r\n window.main.OView.updateScreen();\r\n this.setState({EDL:event.target.valueAsNumber});\r\n }\r\n AltitudeOpen(){\r\n let LidarLayer = this.props.layer.layerHandel;\r\n let AltitudeMin = this.state.AltitudeMin;\r\n let AltitudeMax = this.state.AltitudeMax;\r\n let gap;\r\n if(this.state.AltitudeType === \"單色漸層\"){\r\n gap = (AltitudeMax - AltitudeMin)/4;\r\n LidarLayer.enableAltitude(!this.state.isAltitudeOpen);\r\n LidarLayer.setColorSet(\r\n [\r\n this.state.color.r, this.state.color.g, this.state.color.b, this.state.color.a,\r\n this.state.color.r * 0.75, this.state.color.g * 0.75, this.state.color.b * 0.75, this.state.color.a,\r\n this.state.color.r * 0.5, this.state.color.g * 0.5, this.state.color.b * 0.5, this.state.color.a,\r\n this.state.color.r * 0.25, this.state.color.g * 0.25, this.state.color.b * 0.25, this.state.color.a,\r\n 0, 0, 0, this.state.color.a, \r\n ],\r\n [AltitudeMax, AltitudeMax - gap, AltitudeMax - gap * 2, AltitudeMax - gap * 3, AltitudeMax - gap * 4]);\r\n window.main.OView.updateScreen();\r\n this.setState({ isAltitudeOpen: !this.state.isAltitudeOpen });\r\n }\r\n else if(this.state.AltitudeType === \"分層設色\"){\r\n gap = (AltitudeMax - AltitudeMin)/3;\r\n LidarLayer.enableAltitude(!this.state.isAltitudeOpen);\r\n LidarLayer.setColorSet(\r\n [\r\n 255, 0, 0, 255,\r\n 255, 255, 0, 255,\r\n 0, 128, 0, 255,\r\n 0, 0, 0, 255, \r\n ],\r\n [AltitudeMax, AltitudeMax - gap, AltitudeMax - gap * 2, AltitudeMax - gap * 3]);\r\n window.main.OView.updateScreen();\r\n this.setState({ isAltitudeOpen: !this.state.isAltitudeOpen });\r\n }\r\n }\r\n typeChange(event){\r\n let LidarLayer = this.props.layer.layerHandel;\r\n let AltitudeMin = this.state.AltitudeMin;\r\n let AltitudeMax = this.state.AltitudeMax;\r\n let gap;\r\n if(event.target.value === \"單色漸層\"){ \r\n gap = (AltitudeMax - AltitudeMin)/4;\r\n LidarLayer.setColorSet(\r\n [\r\n this.state.color.r, this.state.color.g, this.state.color.b, this.state.color.a,\r\n this.state.color.r * 0.75, this.state.color.g * 0.75, this.state.color.b * 0.75, this.state.color.a,\r\n this.state.color.r * 0.5, this.state.color.g * 0.5, this.state.color.b * 0.5, this.state.color.a,\r\n this.state.color.r * 0.25, this.state.color.g * 0.25, this.state.color.b * 0.25, this.state.color.a,\r\n 0, 0, 0, this.state.color.a, \r\n ],\r\n [AltitudeMax, AltitudeMax - gap, AltitudeMax - gap * 2, AltitudeMax - gap * 3, AltitudeMax - gap * 4]);\r\n window.main.OView.updateScreen();\r\n this.setState({ AltitudeType:event.target.value });\r\n }\r\n else if(event.target.value === \"分層設色\"){ \r\n gap = (AltitudeMax - AltitudeMin)/3;\r\n LidarLayer.setColorSet(\r\n [\r\n 255, 0, 0, 255,\r\n 255, 255, 0, 255,\r\n 0, 128, 0, 255,\r\n 0, 0, 0, 255, \r\n ],\r\n [AltitudeMax, AltitudeMax - gap, AltitudeMax - gap * 2, AltitudeMax - gap * 3]);\r\n window.main.OView.updateScreen();\r\n this.setState({ AltitudeType:event.target.value });\r\n }\r\n }\r\n ColorLegendOpen= () => {\r\n this.setState({ isColorLegendOpen: !this.state.isColorLegendOpen })\r\n };\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const Layer = this.props.layer;\r\n const AltitudeMin = this.state.AltitudeMin;\r\n const AltitudeMax = this.state.AltitudeMax;\r\n const gap = (AltitudeMax - AltitudeMin)/3;\r\n let ColorLegend = null; \r\n if(this.state.isSettingOpen&&this.state.isAltitudeOpen&&this.state.AltitudeType === \"分層設色\"&&this.state.isColorLegendOpen){\r\n ColorLegend = (\r\n
\r\n
\r\n
\r\n
\r\n 圖例(單位:公尺)\r\n
\r\n
\r\n
\r\n
\r\n {\r\n Math.round(AltitudeMax - gap - AltitudeMin) + \"~\" + Math.round(AltitudeMax - AltitudeMin)\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n Math.round(AltitudeMax - gap*2 - AltitudeMin) + \"~\" + Math.round(AltitudeMax - gap - AltitudeMin)\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n Math.round(AltitudeMax - gap*3 - AltitudeMin) + \"~\" + Math.round(AltitudeMax - gap*2 - AltitudeMin)\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n ); \r\n }\r\n const siderRangeCSS ={\r\n background: \"linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%)\"\r\n };\r\n const styles = reactCSS({\r\n 'default': {\r\n color: {\r\n width: '155px',\r\n height: '14px',\r\n borderRadius: '2px',\r\n background: `rgba(${ this.state.color.r }, ${ this.state.color.g }, ${ this.state.color.b }, ${ this.state.color.a })`,\r\n },\r\n swatch: {\r\n padding: '5px',\r\n background: '#fff',\r\n borderRadius: '10px',\r\n boxShadow: '0 0 0 1px rgba(0,0,0,.1)',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n popover: {\r\n position: 'fixed',\r\n zIndex: '2000'\r\n },\r\n cover: {\r\n position: 'fixed',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n left: '0px',\r\n },\r\n },\r\n });\r\n if(this.state.helpMode === \"LidarHelp\" ){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n } \r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n {\r\n this.state.isSettingOpen?\r\n
\r\n
\r\n
\r\n
邊界增強模式:
\r\n
\r\n
\r\n
\r\n this.EDLOpen()}>\r\n \r\n
\r\n
\r\n
\r\n {\r\n this.state.isEDLOpen?\r\n
\r\n this.setEDLLevel(e)}>\r\n
: null\r\n }\r\n \r\n\r\n
\r\n
\r\n
高度著色模式:
\r\n
\r\n
\r\n
\r\n this.AltitudeOpen()}>\r\n \r\n
\r\n
\r\n
\r\n {\r\n this.state.isAltitudeOpen?\r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n this.state.AltitudeType === \"單色漸層\"?\r\n
\r\n
\r\n
\r\n
\r\n { \r\n this.state.displayColorPicker ? \r\n
\r\n
\r\n \r\n
: null \r\n }\r\n
:\r\n
\r\n \r\n
\r\n } \r\n
\r\n
: null\r\n }\r\n {ColorLegend}\r\n
: null\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass LidarLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n lidarLayer:{}\r\n }; \r\n this.lidarLayerChecked = this.lidarLayerChecked.bind(this); \r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.lidarLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,lidarLayer:{}});\r\n } \r\n }\r\n }\r\n lidarLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if(!isChecked){\r\n window.main.OView.addPointCloudLayer({\r\n url: window.TERRAIN_SERVER.URL,\r\n identifier: layer.ID,\r\n urlTemplate: window.TERRAIN_SERVER.URLTemplate,\r\n callback: function (e,lidarLayer) {\r\n if(e){\r\n lidarLayer._layer.UrlManager.SetTemplate(window.TERRAIN_SERVER.URLTemplate);\r\n lidarLayer.goto();\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,lidarLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,lidarLayer:lidarLayer});\r\n }\r\n else if(!e){\r\n window.alertify.error(\"連結不到圖層::\"+layer.TITLE);\r\n }\r\n }\r\n }); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.lidarLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked; \r\n layerThis.setState({isChecked:isChecked,lidarLayer:{}}); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.lidarLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {LidarLayer,LidarOption};","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\n\r\nclass Acute3DOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n cover : \"null\",\r\n helpMode : \"None\"\r\n };\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n var Acute3DLayer = this.props.layer.layerHandel;\r\n Acute3DLayer.goto();\r\n }\r\n settingOpen(){\r\n this.setState({ isSettingOpen: !this.state.isSettingOpen });\r\n }\r\n coverChange(event){\r\n var cover = event.target.value;\r\n var Acute3DLayer = this.props.layer.layerHandel;\r\n if(cover === \"null\"){\r\n Acute3DLayer.setOverlayName();\r\n window.main.OView.updateScreen();\r\n } \r\n else{\r\n Acute3DLayer.setOverlayName(cover);\r\n window.main.OView.updateScreen();\r\n } \r\n this.setState({cover : cover});\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const LayerList_2D = this.props.LayerList_2D;\r\n const Layer = this.props.layer;\r\n if(this.state.helpMode === \"Acute3DHelp\" ){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n } \r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n {\r\n this.state.isSettingOpen?\r\n
\r\n
\r\n
\r\n
影像披覆:
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
: null\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\nclass Acute3DLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n Acute3DLayer:{}\r\n }; \r\n this.Acute3DLayerChecked = this.Acute3DLayerChecked.bind(this); \r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.Acute3DLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,Acute3DLayer:{}});\r\n } \r\n }\r\n }\r\n Acute3DLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if (!isChecked) {\r\n window.main.OView.addAcute3DLayer({\r\n url: window.LOCAL_SERVER.URL,\r\n identifier: layer.ID,\r\n urlTemplate: window.LOCAL_SERVER.URLTemplate,\r\n callback: function (e, Acute3DLayer)\r\n {\r\n if (e)\r\n {\r\n // Set Offset\r\n if (layer.OFFSET != null)\r\n {\r\n Acute3DLayer.setOffset(layer.OFFSET.x, layer.OFFSET.y, layer.OFFSET.z);\r\n }\r\n\r\n // Set Location\r\n if (layer.LOCATION != null)\r\n {\r\n var Pos = new window.Geo3DPoint(layer.LOCATION.POS.x, layer.LOCATION.POS.y, layer.LOCATION.POS.z);\r\n var V = new window.Geo3DPoint(layer.LOCATION.V.x, layer.LOCATION.V.y, layer.LOCATION.V.z);\r\n var Up = new window.Geo3DPoint(layer.LOCATION.UP.x, layer.LOCATION.UP.y, layer.LOCATION.UP.z);\r\n var Camera = new window.ov.Camera(Pos, V, Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else\r\n {\r\n Acute3DLayer.goto();\r\n }\r\n \r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,Acute3DLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,Acute3DLayer:Acute3DLayer});\r\n }\r\n else if(!e){\r\n window.alertify.error(\"連結不到圖層::\"+layer.TITLE);\r\n }\r\n }\r\n }); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.Acute3DLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE);\r\n isChecked = !isChecked; \r\n layerThis.setState({isChecked:isChecked,Acute3DLayer:{}}); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.Acute3DLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {Acute3DLayer,Acute3DOption};","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\nimport GeoTIFF, { fromUrl, fromUrls, fromArrayBuffer, fromBlob } from 'geotiff';\r\n\r\nclass VisualizedDataGridOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n cover : \"null\",\r\n helpMode : \"None\"\r\n };\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n var VisualizedDataGridOverlay = this.props.layer.layerHandel;\r\n VisualizedDataGridOverlay.goto();\r\n }\r\n settingOpen(){\r\n this.setState({ isSettingOpen: !this.state.isSettingOpen });\r\n }\r\n coverChange(event){\r\n var cover = event.target.value;\r\n var VisualizedDataGridOverlay = this.props.layer.layerHandel;\r\n if(cover === \"null\"){\r\n VisualizedDataGridOverlay.setOverlayName();\r\n window.main.OView.updateScreen();\r\n } \r\n else{\r\n VisualizedDataGridOverlay.setOverlayName(cover);\r\n window.main.OView.updateScreen();\r\n } \r\n this.setState({cover : cover});\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const LayerList_2D = this.props.LayerList_2D;\r\n const Layer = this.props.layer;\r\n if (this.state.helpMode === \"VisualizedDataGridHelp\") // xj helper 內容待改\r\n {\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n }\r\n if (this.state.helpMode === \"None\")\r\n {\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n {\r\n this.state.isSettingOpen?\r\n
\r\n
\r\n
\r\n
影像披覆:
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
: null\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\nclass VisualizedDataGridOverlay extends React.Component{\r\n constructor()\r\n {\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n VisualizedDataGridOverlay:{}\r\n }; \r\n this.VisualizedDataGridOverlayChecked = this.VisualizedDataGridOverlayChecked.bind(this);\r\n\r\n this.vaColorMapKey = [\r\n 0.0,\r\n 0.1,\r\n 1.0,\r\n 2.0,\r\n 3.0,\r\n 4.0,\r\n 5.0,\r\n 6.0\r\n ];\r\n\r\n this.vaColorMapValue = [\r\n \"#00000000\",\r\n \"#0000ff88\",\r\n \"#00ff0088\",\r\n \"#ffd80088\",\r\n \"#ff6a0088\",\r\n \"#ff000088\",\r\n \"#ff006e88\",\r\n \"#ff00dc88\"\r\n ];\r\n\r\n this.vCurOverlay = null;\r\n }\r\n componentDidUpdate()\r\n {\r\n if (this.props.deleteList.layerName === this.props.layer.TITLE)\r\n {\r\n let isChecked = this.state.isChecked;\r\n if (isChecked)\r\n {\r\n window.main.OView.removeLayer(this.state.VisualizedDataGridOverlay);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,VisualizedDataGridOverlay:{}});\r\n } \r\n }\r\n }\r\n async GetFloodData(vaFloodDataList, vaFloodData, id)\r\n {\r\n try {\r\n if (vaFloodData[id].data === null) \r\n {\r\n let url = \"../../xjstest/data/20190517_Shinchu_tif/\" + vaFloodDataList[id];\r\n let tiff = await fromUrl(url);\r\n let image = await tiff.getImage(); // by default, the first image is read.\r\n let data;\r\n if (image.pixelIsArea()) // 測試用判斷, 舊方法(DTMCrop 出的) 會用 readRaster(); 中心 WMS-DTM 取得的 才會用 readRGB()\r\n data = await image.readRGB();\r\n else\r\n data = await image.readRasters();\r\n vaFloodData[id].data = data[0];\r\n vaFloodData[id].image = image;\r\n vaFloodData[id].date = new Date(); // xj 之後可由從檔名或外部輸入正確時間日期\r\n }\r\n\r\n return vaFloodData[id];\r\n }\r\n catch (errMsg) {\r\n console.log(\"Error in GetFloodData: [\" + errMsg + \"]\");\r\n }\r\n }\r\n async SetTerrainOverlayAll(vaFloodDataList, vaFloodData)\r\n {\r\n // Get all rest FloodData\r\n let vaData = [];\r\n let vaDate = [];\r\n for (let i = 0; i < vaFloodData.length; i++) {\r\n let vFloodData = await this.GetFloodData(vaFloodDataList, vaFloodData, i);\r\n vaData.push(vFloodData.data);\r\n vaDate.push(vFloodData.date);\r\n }\r\n\r\n // Get Basic info\r\n let vFloodData = vaFloodData[0];\r\n let width = vFloodData.image.getWidth();\r\n let height = vFloodData.image.getHeight();\r\n let bbox = vFloodData.image.getBoundingBox(); // [w,s,e,n]\r\n let coord_ws = new window.GeoPoint(bbox[0], bbox[1]);\r\n let coord_en = new window.GeoPoint(bbox[2], bbox[3]);\r\n window.GetEPSGEngine().Transfer(3826, 4326, coord_ws); // (source, target, coord)\r\n window.GetEPSGEngine().Transfer(3826, 4326, coord_en);\r\n\r\n // Set TerrainVisualizedDataGridOverlay\r\n vFloodData.layerSrc = {\r\n layername: \"Flood\",\r\n source: vaData,\r\n boundary: new window.GeoBoundary(coord_ws.x, coord_ws.y, coord_en.x, coord_en.y), // xj orig: (118.0, 21.0, 123.0, 25.0)\r\n width: width,\r\n height: height,\r\n heightScale: 10000, // xj 有作用,但該設多少? magic number!!\r\n date: vaDate,\r\n useStepLayeredColorMap: false,\r\n layeredColorMapKey: this.vaColorMapKey,\r\n layeredColorMapValue: this.vaColorMapValue,\r\n playSpeed: 0.0005, // default: 0.16\r\n repeat: true // default: true\r\n };\r\n\r\n vFloodData.overlay = window.main.OView.addTerrainVisualizedDataGridOverlay(vFloodData.layerSrc); // xj All 都塞到 vFloodData[0] 去\r\n this.vCurOverlay = vFloodData.overlay;\r\n }\r\n async VisualizedDataGridOverlayChecked(layer)\r\n {\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if (!isChecked)\r\n {\r\n if (this.vCurOverlay === null) // 第一次 Load 淹水資料 // xj 之後有多筆資料要再處理\r\n {\r\n let vaFloodDataList = layer.FloodDataList;\r\n\r\n function CFloodData(name) {\r\n this.name = name;\r\n this.data = null;\r\n this.image = null;\r\n this.overlay = null;\r\n this.layerSrc = null;\r\n this.date = null; // 之後可由從檔名或外部輸入正確時間日期\r\n }\r\n\r\n var vaFloodData = []; // 改成 FloodData(data, image) 和 Overlay (Overlay, LayerSrc) 全部放在一起管理 // xj 若之後要load全部資料到同一 Overlay 再說..\r\n for (let i = 0; i < vaFloodDataList.length; i++) {\r\n let floodData = new CFloodData(vaFloodDataList[i]);\r\n vaFloodData.push(floodData);\r\n }\r\n\r\n await this.SetTerrainOverlayAll(vaFloodDataList, vaFloodData);\r\n }\r\n else\r\n {\r\n this.vCurOverlay.show = true;\r\n }\r\n\r\n // Goto \r\n if (layer.LOCATION != null)\r\n {\r\n var Pos = new window.Geo3DPoint(layer.LOCATION.POS.x, layer.LOCATION.POS.y, layer.LOCATION.POS.z);\r\n var V = new window.Geo3DPoint(layer.LOCATION.V.x, layer.LOCATION.V.y, layer.LOCATION.V.z);\r\n var Up = new window.Geo3DPoint(layer.LOCATION.UP.x, layer.LOCATION.UP.y, layer.LOCATION.UP.z);\r\n var Camera = new window.ov.Camera(Pos, V, Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n\r\n // Update UI\r\n window.alertify.success(\"已開啟圖層:\" + layer.TITLE);\r\n layerThis.props.setOpenLayer(layer, VisualizedDataGridOverlay);\r\n isChecked = !isChecked;\r\n layerThis.setState({ isChecked: isChecked, VisualizedDataGridOverlay: VisualizedDataGridOverlay });\r\n }\r\n else\r\n {\r\n this.vCurOverlay.show = false; // xj 要再找確實移除的方法,並考慮是否要清除 load 的資料。\r\n\r\n // Update UI\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE);\r\n isChecked = !isChecked; \r\n layerThis.setState({ isChecked: isChecked, VisualizedDataGridOverlay: {} }); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.VisualizedDataGridOverlayChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {VisualizedDataGridOverlay,VisualizedDataGridOption};","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\n\r\nclass PipelineOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n isEntityFlowOpen:false,\r\n helpMode : \"None\"\r\n };\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n if(this.props.layer.layerLocation!=null){\r\n var Pos = new window.Geo3DPoint(this.props.layer.layerLocation.POS.x , this.props.layer.layerLocation.POS.y , this.props.layer.layerLocation.POS.z);\r\n var V = new window.Geo3DPoint(this.props.layer.layerLocation.V.x , this.props.layer.layerLocation.V.y , this.props.layer.layerLocation.V.z);\r\n var Up = new window.Geo3DPoint(this.props.layer.layerLocation.UP.x , this.props.layer.layerLocation.UP.y , this.props.layer.layerLocation.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n var PipelineLayer = this.props.layer.layerHandel;\r\n PipelineLayer.goto();\r\n }\r\n \r\n }\r\n settingOpen(){\r\n this.setState({ isSettingOpen: !this.state.isSettingOpen });\r\n }\r\n EntityFlowtoggleOpen(){\r\n var PipelineLayer = this.props.layer.layerHandel;\r\n if(!this.state.isEntityFlowOpen){\r\n PipelineLayer.setDrawAllFlow(true);\r\n PipelineLayer.setFlowUseTexture(false);\r\n PipelineLayer.setFlowTextureMaxDensity(null, 1);\r\n PipelineLayer.setFlowColorWeight(0.5,0.5,0.5);\r\n }\r\n else{\r\n PipelineLayer.setDrawAllFlow(false);\r\n }\r\n this.setState({isEntityFlowOpen:!this.state.isEntityFlowOpen});\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const Layer = this.props.layer;\r\n const SettingType = (Layer.layerClass === \"Pipeline\")?\"large setting icon\":\"large disabled setting icon\";\r\n if(this.state.helpMode === \"PipelineHelp\" ){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n } \r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n {\r\n Layer.layerClass === \"Pipeline\"?\r\n : null\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n {\r\n (this.state.isSettingOpen&&Layer.layerClass === \"Pipeline\")?\r\n
\r\n
\r\n
\r\n
管線流向:
\r\n
\r\n
\r\n
\r\n this.EntityFlowtoggleOpen()}>\r\n \r\n
\r\n
\r\n
\r\n
: null\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nclass PipelineLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n PipelineLayer:null\r\n }; \r\n this.pipelineLayreChecked = this.pipelineLayreChecked.bind(this); \r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.PipelineLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,PipelineLayer:null});\r\n } \r\n }\r\n }\r\n pipelineLayreChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if(!isChecked){\r\n window.main.OView.addPipelineLayer({\r\n url: window.TERRAIN_SERVER.URL,\r\n identifier: layer.ID,\r\n urlTemplate: window.TERRAIN_SERVER.URLTemplate,\r\n callback: function (e,PipelineLayer) {\r\n if(e){\r\n if(layer.LOCATION!=null){\r\n var Pos = new window.Geo3DPoint(layer.LOCATION.POS.x , layer.LOCATION.POS.y , layer.LOCATION.POS.z);\r\n var V = new window.Geo3DPoint(layer.LOCATION.V.x , layer.LOCATION.V.y , layer.LOCATION.V.z);\r\n var Up = new window.Geo3DPoint(layer.LOCATION.UP.x , layer.LOCATION.UP.y , layer.LOCATION.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n PipelineLayer.goto();\r\n }\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n window.alertify.success(\"請調整地形透視已達到更好的效果\");\r\n layerThis.props.setOpenLayer(layer,PipelineLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,PipelineLayer:PipelineLayer});\r\n }\r\n else if(!e){\r\n window.alertify.error(\"連結不到圖層::\"+layer.TITLE);\r\n }\r\n }\r\n }); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.PipelineLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked; \r\n layerThis.setState({isChecked:isChecked,PipelineLayer:{}}); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.pipelineLayreChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {PipelineLayer,PipelineOption};","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport reactCSS from 'reactcss';\r\nimport { SketchPicker } from 'react-color';\r\nimport HelpComponent from '../HelpComponent';\r\n\r\nclass BIMAttrsOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n layerHandel:{},\r\n openAttrsList:[],\r\n Attrs:{},\r\n displayColorPicker: false,\r\n color: {\r\n r: 255,\r\n g: 0,\r\n b: 0,\r\n a: 100,\r\n },\r\n hexColor:\"#F17013\",\r\n };\r\n }\r\n componentDidMount(){\r\n let layerHandel = this.props.layerHandel;\r\n let openAttrsList = this.props.openAttrsList;\r\n let isOtherEnable = this.props.isOtherEnable;\r\n let Attrs = this.props.Attrs;\r\n layerHandel.setEntityColorFunction([\"Family\"], function(id, attrs, color) {\r\n let isTrue = false;\r\n for(let i = 0 ; i < openAttrsList.length ; i++){\r\n if(attrs[0] === openAttrsList[i].Attrs){\r\n color[0] = openAttrsList[i].r;\r\n color[1] = openAttrsList[i].g;\r\n color[2] = openAttrsList[i].b;\r\n color[3] = openAttrsList[i].a;\r\n isTrue = true;\r\n return openAttrsList[i].enable;\r\n }\r\n }\r\n if(!isTrue){\r\n color[3] = 0;\r\n return isOtherEnable;\r\n }\r\n })\r\n this.setState({\r\n layerHandel:layerHandel,\r\n openAttrsList:openAttrsList,\r\n Attrs:Attrs\r\n });\r\n }\r\n handleClick = () => {\r\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\r\n };\r\n \r\n handleClose = () => {\r\n this.setState({ displayColorPicker: false })\r\n };\r\n \r\n handleChange = (color) => {\r\n let layerHandel = this.state.layerHandel;\r\n let openAttrsList = this.state.openAttrsList;\r\n let isOtherEnable = this.props.isOtherEnable;\r\n let Attrs = this.state.Attrs;\r\n let onChangeAttrs = this.props.onChangeAttrs;\r\n this.setState({\r\n color: color.rgb,\r\n hexColor:color.hex\r\n });\r\n for(let i=0;i\r\n
\r\n
{attrs.Name}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n { \r\n this.state.displayColorPicker ? \r\n
\r\n
\r\n \r\n
: null \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass ModelOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n cover : \"null\",\r\n attrsList : [],\r\n openAttrsList : [],\r\n BIMAttrsChange : {},\r\n isOtherEnable : true,\r\n helpMode : \"None\"\r\n };\r\n }\r\n componentDidMount(){\r\n let attrsList = [];\r\n let BIMAttrsList = this.props.layer.BIMAttrsList;\r\n for(let i=0;i \r\n
\r\n
\r\n
依屬性上色:
\r\n
\r\n
\r\n
\r\n \r\n
this.AddBIMAttrs()}>\r\n \r\n
\r\n
\r\n
\r\n
\r\n {\r\n this.state.openAttrsList.map(\r\n (Attrs) => \r\n this.onChangeAttrs(openAttrsList)} \r\n DeleteBIMAttrs={(openAttrsList,Attrs)=>this.DeleteBIMAttrs(openAttrsList,Attrs)} \r\n key={Attrs.Name}\r\n />\r\n )\r\n }\r\n
\r\n
\r\n {\r\n this.state.isOtherEnable?\r\n \r\n : \r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n else{\r\n isBIMModel =\r\n
\r\n
\r\n
\r\n
影像披覆:
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n if(this.state.helpMode === \"ModelHelp\" ){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n } \r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n {\r\n this.state.isSettingOpen? isBIMModel : null\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\n\r\nclass ModelLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n ModelLayer:{}\r\n }; \r\n this.ModelLayerChecked = this.ModelLayerChecked.bind(this); \r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.ModelLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,ModelLayer:{}});\r\n } \r\n }\r\n }\r\n ModelLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if(!isChecked){\r\n window.main.OView.addModelLayer({\r\n url: window.TERRAIN_SERVER.URL,\r\n identifier: layer.ID,\r\n urlTemplate: window.TERRAIN_SERVER.URLTemplate,\r\n callback: function (e,ModelLayer) {\r\n if(e){\r\n ModelLayer.goto();\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,ModelLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,ModelLayer:ModelLayer});\r\n }\r\n else if(!e){\r\n window.alertify.error(\"連結不到圖層::\"+layer.TITLE);\r\n }\r\n }\r\n }); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.ModelLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked; \r\n layerThis.setState({isChecked:isChecked,ModelLayer:{}}); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.ModelLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {ModelLayer,ModelOption};","import React from 'react';\r\n\r\nclass ProjectorOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n cover : \"null\",\r\n helpMode : \"None\"\r\n };\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n var Pos = new window.Geo3DPoint(this.props.layer.VideoPOS.x , this.props.layer.VideoPOS.y , this.props.layer.VideoPOS.z);\r\n var V = new window.Geo3DPoint(this.props.layer.VideoV.x , this.props.layer.VideoV.y , this.props.layer.VideoV.z);\r\n var Up = new window.Geo3DPoint(this.props.layer.VideoUP.x , this.props.layer.VideoUP.y , this.props.layer.VideoUP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n coverChange(event){\r\n var cover = event.target.value;\r\n var ProjectorLayer = this.props.layer.layerHandel;\r\n if(cover === \"null\"){\r\n ProjectorLayer.setOverlayName();\r\n window.main.OView.updateScreen();\r\n } \r\n else{\r\n ProjectorLayer.setOverlayName(cover);\r\n window.main.OView.updateScreen();\r\n } \r\n this.setState({cover : cover});\r\n }\r\n render(){\r\n const Layer = this.props.layer;\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nclass ProjectorLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n ProjectorLayer:{}\r\n }; \r\n this.ProjectorLayerChecked = this.ProjectorLayerChecked.bind(this); \r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.ProjectorLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,ProjectorLayer:{}});\r\n } \r\n }\r\n }\r\n ProjectorLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if(!isChecked){\r\n var _Cust = window.main.OView.addCustomLayer({\r\n layername : layer.TITLE\r\n });\r\n var param = {};\r\n param.ImageType = window.ov.PROJECTOR_IMAGE.WIDE;\r\n param.SrcType = window.ov.PROJECTOR_SRC.IMAGE;\r\n param.VideoPath = layer.VideoPath;\r\n param.Pos = layer.VideoPOS;\r\n param.V = layer.VideoV;\r\n param.Up = layer.VideoUP;\r\n param.HFov = layer.HFov?layer.HFov:65;\r\n param.VFov = layer.VFov?layer.VFov:80;\r\n param.ImgW = layer.ImgW?layer.ImgW:5472; \r\n param.ImgH = layer.ImgH?layer.ImgH:3648; \r\n param.Near = layer.Near?layer.Near:5;\r\n param.Far = layer.Far?layer.Far:1000; \r\n _Cust.addProjectorEntity(param);\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,_Cust); \r\n isChecked = !isChecked; \r\n var Pos = new window.Geo3DPoint(layer.VideoPOS.x , layer.VideoPOS.y , layer.VideoPOS.z);\r\n var V = new window.Geo3DPoint(layer.VideoV.x , layer.VideoV.y , layer.VideoV.z);\r\n var Up = new window.Geo3DPoint(layer.VideoUP.x , layer.VideoPOS.y , layer.VideoUP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n layerThis.setState({isChecked:isChecked,ProjectorLayer:_Cust}); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.ProjectorLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked; \r\n layerThis.setState({isChecked:isChecked,ProjectorLayer:{}}); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.ProjectorLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {ProjectorLayer,ProjectorOption};","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\n\r\nclass I3SOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n cover : \"null\",\r\n helpMode : \"None\"\r\n };\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n if(this.props.layer.layerLocation!=null){\r\n var Pos = new window.Geo3DPoint(this.props.layer.layerLocation.POS.x , this.props.layer.layerLocation.POS.y , this.props.layer.layerLocation.POS.z);\r\n var V = new window.Geo3DPoint(this.props.layer.layerLocation.V.x , this.props.layer.layerLocation.V.y , this.props.layer.layerLocation.V.z);\r\n var Up = new window.Geo3DPoint(this.props.layer.layerLocation.UP.x , this.props.layer.layerLocation.UP.y , this.props.layer.layerLocation.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n var I3SLayer = this.props.layer.layerHandel;\r\n I3SLayer.goto();\r\n }\r\n }\r\n settingOpen(){\r\n this.setState({ isSettingOpen: !this.state.isSettingOpen });\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const Layer = this.props.layer;\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nclass I3SLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n I3SLayer:{}\r\n }; \r\n this.I3SLayerChecked = this.I3SLayerChecked.bind(this); \r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.I3SLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,I3SLayer:{}});\r\n } \r\n }\r\n }\r\n I3SLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if(!isChecked){\r\n window.main.OView.addI3SLayer({\r\n url: layer.URL,\r\n urlTemplate: window.TERRAIN_SERVER.URLTemplate,\r\n callback: function (e,I3SLayer) {\r\n if(e){\r\n if(layer.LOCATION!=null){\r\n var Pos = new window.Geo3DPoint(layer.LOCATION.POS.x , layer.LOCATION.POS.y , layer.LOCATION.POS.z);\r\n var V = new window.Geo3DPoint(layer.LOCATION.V.x , layer.LOCATION.V.y , layer.LOCATION.V.z);\r\n var Up = new window.Geo3DPoint(layer.LOCATION.UP.x , layer.LOCATION.UP.y , layer.LOCATION.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n I3SLayer.goto();\r\n }\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,I3SLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,I3SLayer:I3SLayer});\r\n }\r\n else if(!e){\r\n window.alertify.error(\"連結不到圖層::\"+layer.TITLE);\r\n }\r\n }\r\n }); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.I3SLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked; \r\n layerThis.setState({isChecked:isChecked,I3SLayer:{}}); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.I3SLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {I3SLayer ,I3SOption};","import React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from '../HelpComponent';\r\n\r\nclass ThreeDTilesOption extends React.Component{\r\n constructor(){\r\n super();\r\n this.state={\r\n isSettingOpen:false,\r\n cover : \"null\",\r\n helpMode : \"None\"\r\n };\r\n }\r\n deleteLayerList(layer){\r\n const Layer = {\r\n TITLE:layer.layerName,\r\n TYPE:layer.layerType\r\n };\r\n this.props.deleteLayerList(Layer);\r\n }\r\n gotoLayer(){\r\n if(this.props.layer.layerLocation!=null){\r\n var Pos = new window.Geo3DPoint(this.props.layer.layerLocation.POS.x , this.props.layer.layerLocation.POS.y , this.props.layer.layerLocation.POS.z);\r\n var V = new window.Geo3DPoint(this.props.layer.layerLocation.V.x , this.props.layer.layerLocation.V.y , this.props.layer.layerLocation.V.z);\r\n var Up = new window.Geo3DPoint(this.props.layer.layerLocation.UP.x , this.props.layer.layerLocation.UP.y , this.props.layer.layerLocation.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n var ThreeDTilesLayer = this.props.layer.layerHandel;\r\n ThreeDTilesLayer.goto();\r\n }\r\n }\r\n settingOpen(){\r\n this.setState({ isSettingOpen: !this.state.isSettingOpen });\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n const Layer = this.props.layer;\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{Layer.layerName}\r\n
\r\n
\r\n
\r\n
\r\n
this.deleteLayerList(Layer)} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"關閉圖層\">\r\n \r\n
\r\n
this.gotoLayer()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"前往圖層位置\">\r\n \r\n
\r\n
this.settingOpen()} data-tooltip-position=\"top center\" data-tooltip-type=\"label\" data-tooltip=\"圖層設定\">\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nclass ThreeDTilesLayer extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n isChecked:false,\r\n ThreeDTilesLayer:{}\r\n }; \r\n this.ThreeDTilesLayerChecked = this.ThreeDTilesLayerChecked.bind(this); \r\n }\r\n componentDidUpdate(){\r\n if(this.props.deleteList.layerName === this.props.layer.TITLE){\r\n let isChecked = this.state.isChecked;\r\n if(isChecked){\r\n window.main.OView.removeLayer(this.state.ThreeDTilesLayer);\r\n window.alertify.error(\"已關閉圖層:\"+this.props.layer.TITLE);\r\n isChecked = !isChecked;\r\n this.setState({isChecked:isChecked,ThreeDTilesLayer:{}});\r\n } \r\n }\r\n }\r\n ThreeDTilesLayerChecked(layer){\r\n let isChecked = this.state.isChecked;\r\n const layerThis = this; \r\n if(!isChecked){\r\n window.main.OView.add3DTilesLayer({\r\n url: layer.URL,\r\n urlTemplate: \"{URL}\",\r\n callback: function (e,ThreeDTilesLayer) {\r\n if(e){\r\n if(layer.LOCATION!=null){\r\n var Pos = new window.Geo3DPoint(layer.LOCATION.POS.x , layer.LOCATION.POS.y , layer.LOCATION.POS.z);\r\n var V = new window.Geo3DPoint(layer.LOCATION.V.x , layer.LOCATION.V.y , layer.LOCATION.V.z);\r\n var Up = new window.Geo3DPoint(layer.LOCATION.UP.x , layer.LOCATION.UP.y , layer.LOCATION.UP.z);\r\n var Camera = new window.ov.Camera(Pos,V,Up);\r\n window.main.OView.gotoCamera(Camera, true);\r\n }\r\n else{\r\n ThreeDTilesLayer.goto();\r\n }\r\n window.alertify.success(\"已開啟圖層:\"+layer.TITLE);\r\n layerThis.props.setOpenLayer(layer,ThreeDTilesLayer); \r\n isChecked = !isChecked;\r\n layerThis.setState({isChecked:isChecked,ThreeDTilesLayer:ThreeDTilesLayer});\r\n }\r\n else if(!e){\r\n window.alertify.error(\"連結不到圖層::\"+layer.TITLE);\r\n }\r\n }\r\n }); \r\n }\r\n else{\r\n window.main.OView.removeLayer(this.state.ThreeDTilesLayer);\r\n layerThis.props.deleteLayer(layer);\r\n window.alertify.error(\"已關閉圖層:\"+layer.TITLE); \r\n isChecked = !isChecked; \r\n layerThis.setState({isChecked:isChecked,ThreeDTilesLayer:{}}); \r\n } \r\n } \r\n render(){\r\n const layer = this.props.layer;\r\n return(\r\n
\r\n this.ThreeDTilesLayerChecked(layer)}>\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport {ThreeDTilesLayer ,ThreeDTilesOption};","/* eslint-disable array-callback-return */\r\nimport React from 'react';\r\nimport {OverlayOption} from './LayerInfo/OverLayLayer';\r\nimport {LidarOption} from './LayerInfo/LidarLayer';\r\nimport {ModelSetOption} from './LayerInfo/ModelSetLayer';\r\nimport {Acute3DOption} from './LayerInfo/Acute3DLayer';\r\nimport {VisualizedDataGridOption} from './LayerInfo/VisualizedDataGridOverlay';\r\nimport {PipelineOption} from './LayerInfo/PipelineLayer';\r\nimport {ModelOption} from './LayerInfo/ModelLayer';\r\nimport {ProjectorOption} from './LayerInfo/ProjectorLayer';\r\nimport {I3SOption} from './LayerInfo/I3SLayer';\r\nimport {ThreeDTilesOption} from './LayerInfo/3DTilesLayer';\r\nimport {CustomOption} from './LayerInfo/CustomLayer';\r\n\r\nclass TerrainSiderBar extends React.Component{\r\n constructor() {\r\n super();\r\n this.sidebarChange = this.sidebarChange.bind(this);\r\n this.state = {\r\n siderValue:100,\r\n intervalID:null\r\n };\r\n } \r\n componentDidMount(){\r\n let siderValue = 100;\r\n let componentThis = this;\r\n var intervalID = setInterval(function() {\r\n siderValue = window.main.OView.terrainAlpha * 100; \r\n componentThis.setState({siderValue:siderValue});\r\n }, 1000); \r\n this.setState({intervalID:intervalID});\r\n }\r\n sidebarChange(event){ \r\n window.main.OView.terrainAlpha = event.target.value/100;\r\n this.setState({siderValue:event.target.value});\r\n }\r\n render(){\r\n const siderRangeCSS ={\r\n background: \"linear-gradient(45deg, rgba(59,173,227,1) 0%, rgba(87,111,230,1) 25%, rgba(152,68,183,1) 51%, rgba(255,53,127,1) 100%)\"\r\n };\r\n return(\r\n
\r\n
\r\n

地形透視

\r\n \r\n
\r\n \r\n
\r\n this.sidebarChange(e)} style={siderRangeCSS}>\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass LayerOptionSidebar extends React.Component{\r\n constructor() {\r\n super();\r\n this.sidebarSwitch = this.sidebarSwitch.bind(this);\r\n this.deleteLayerList = this.deleteLayerList.bind(this);\r\n }\r\n sidebarSwitch(){\r\n this.props.setlayerOptionOpen();\r\n }\r\n deleteLayerList(layer){\r\n this.props.deleteLayerList(layer);\r\n }\r\n render(){\r\n const islayerOptionOpen = this.props.islayerOptionOpen; \r\n const LayerList_2D = this.props.LayerList.Layer_2D;\r\n const LayerList_3D = this.props.LayerList.Layer_3D;\r\n const LayerList_Noise = this.props.LayerList.Layer_Noise;\r\n const Layer2DLength = (this.props.LayerList.Layer_2D).length;\r\n const Layer3DLength = (this.props.LayerList.Layer_3D).length;\r\n const LayerNoiseLength = (this.props.LayerList.Layer_Noise).length;\r\n const sideMenuCSS ={\r\n overflow : 'inherit',\r\n transform : islayerOptionOpen?'translate3d(0, 0, 0)':'translate3d(-120%, 0, 0)',\r\n width : '480px'\r\n };\r\n const titleCSS = {\r\n margin: '10px 10px 10px 10px' \r\n };\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n \r\n
\r\n 圖層設定\r\n
\r\n

\r\n
\r\n
\r\n this.sidebarSwitch(e)}> \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n 2D圖層\r\n {\r\n Layer2DLength === 0 ? null:\r\n
{Layer2DLength}
\r\n }\r\n
\r\n {\r\n LayerList_2D.map(\r\n (layer)=>\r\n this.deleteLayerList(layer)} key={layer.layerName}/>\r\n )\r\n } \r\n
\r\n
\r\n \r\n \r\n 3D圖層\r\n {\r\n Layer3DLength === 0 ? null:\r\n
{Layer3DLength}
\r\n }\r\n
\r\n {\r\n LayerList_3D.map(\r\n (layer)=>\r\n {\r\n switch(layer.layerType){\r\n case \"Lidar\" :\r\n return this.deleteLayerList(layer)} key={layer.layerName}/>;\r\n case \"ModelSet\":\r\n return this.deleteLayerList(layer)} key={layer.layerName} setLegendBoxSwitch={this.props.setLegendBoxSwitch} currentTime={this.props.currentTime} infoBoxAttr={this.props.infoBoxAttr} setinfoBox={this.props.setinfoBox}/>;\r\n case \"Acute3D\":\r\n return this.deleteLayerList(layer)} key={layer.layerName}/>;\r\n case \"VisualizedDataGrid\":\r\n return this.deleteLayerList(layer)} key={layer.layerName} />;\r\n case \"Pipeline\":\r\n return this.deleteLayerList(layer)} key={layer.layerName}/>;\r\n case \"Model\":\r\n return this.deleteLayerList(layer)} key={layer.layerName}/>;\r\n case \"Projector\":\r\n return this.deleteLayerList(layer)} key={layer.layerName}/>;\r\n case \"I3S\":\r\n return this.deleteLayerList(layer)} key={layer.layerName}/>;\r\n case \"3DTiles\":\r\n return this.deleteLayerList(layer)} key={layer.layerName}/>;\r\n case \"Custom\":\r\n return this.deleteLayerList(layer)} key={layer.layerName} setLegendBoxSwitch={this.props.setLegendBoxSwitch} currentTime={this.props.currentTime} infoBoxAttr={this.props.infoBoxAttr} setinfoBox={this.props.setinfoBox}/>;\r\n default:\r\n break;\r\n }\r\n }\r\n )\r\n } \r\n
\r\n
\r\n \r\n \r\n 噪音圖層\r\n {\r\n LayerNoiseLength === 0 ? null:\r\n
{LayerNoiseLength}
\r\n }\r\n
\r\n {\r\n LayerList_Noise.map(\r\n (layer)=>\r\n {\r\n switch(layer.layerType){\r\n case \"ModelSet\":\r\n return this.deleteLayerList(layer)} key={layer.layerName} setLegendBoxSwitch={this.props.setLegendBoxSwitch} currentTime={this.props.currentTime} infoBoxAttr={this.props.infoBoxAttr} setinfoBox={this.props.setinfoBox}/>;\r\n case \"Custom\":\r\n return this.deleteLayerList(layer)} key={layer.layerName} setLegendBoxSwitch={this.props.setLegendBoxSwitch} currentTime={this.props.currentTime} infoBoxAttr={this.props.infoBoxAttr} setinfoBox={this.props.setinfoBox}/>;\r\n default:\r\n break;\r\n }\r\n }\r\n )\r\n } \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nexport default LayerOptionSidebar;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport HelpComponent from './HelpComponent';\r\n\r\nclass SensorThingRenderChart extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n sensor : [],\r\n sensorInterval : \"\"\r\n }\r\n this.sensorOpen = this.sensorOpen.bind(this);\r\n }\r\n componentDidMount(){\r\n let sensor = [];\r\n const SensorList = this.props.SensorList;\r\n let sensorInterval = \"\";\r\n SensorList.map(\r\n (sensorResources) => {\r\n sensor.push({\r\n Name : sensorResources.name,\r\n Layername : sensorResources.layername,\r\n Url : sensorResources.api,\r\n IsOpen : true\r\n });\r\n }\r\n );\r\n this.sensorOpen(sensor);\r\n sensorInterval = setInterval(this.sensorOpen,300000,sensor);\r\n this.setState({sensor:sensor,sensorInterval:sensorInterval});\r\n }\r\n componentWillUnmount(){\r\n let sensorInterval = this.state.sensorInterval;\r\n window.main.OView.removeTerrainOverlay(\"SensorThingRenderChart\"); \r\n clearInterval(sensorInterval);\r\n }\r\n sensorOpen(SensorList){\r\n let sensor = SensorList;\r\n let sensorLodingNum = 1; \r\n\r\n let canvas = document.createElement(\"canvas\");\r\n canvas.width = 4096;\r\n canvas.height = 4096;\r\n\t\tlet ctx = canvas.getContext('2d');\r\n ctx.globalCompositeOperation = \"lighten\";\r\n \r\n let doLoadIot = function(url){\r\n let xhr = new XMLHttpRequest();\r\n let color = {};\r\n\t\t\txhr.overrideMimeType(\"application/json\");\r\n xhr.open('GET', url, true);\r\n xhr.onload = function() {\r\n var jsonResponse = JSON.parse(xhr.responseText);\r\n var iotValue = jsonResponse;\r\n for(var i = 0;i70){\r\n color.r = 206;\r\n color.g = 48;\r\n color.b = 255;\r\n }else if(parseInt(iotObservationsResult)<=70&&parseInt(iotObservationsResult)>64){\r\n color.r = 153;\r\n color.g = 0;\r\n color.b = 0;\r\n }else if(parseInt(iotObservationsResult)<=64&&parseInt(iotObservationsResult)>58){\r\n color.r = 255;\r\n color.g = 0;\r\n color.b = 0;\r\n }else if(parseInt(iotObservationsResult)<=58&&parseInt(iotObservationsResult)>53){\r\n color.r = 255;\r\n color.g = 100;\r\n color.b = 100;\r\n }else if(parseInt(iotObservationsResult)<=53&&parseInt(iotObservationsResult)>47){\r\n color.r = 237;\r\n color.g = 125;\r\n color.b = 49;\r\n }else if(parseInt(iotObservationsResult)<=47&&parseInt(iotObservationsResult)>41){\r\n color.r = 255;\r\n color.g = 192;\r\n color.b = 0;\r\n }else if(parseInt(iotObservationsResult)<=41&&parseInt(iotObservationsResult)>35){\r\n color.r = 255;\r\n color.g = 255;\r\n color.b = 0;\r\n }else if(parseInt(iotObservationsResult)<=35&&parseInt(iotObservationsResult)>25){\r\n color.r = 112;\r\n color.g = 173;\r\n color.b = 71;\r\n }else if(parseInt(iotObservationsResult)<=25&&parseInt(iotObservationsResult)>10){\r\n color.r = 49;\r\n color.g = 255;\r\n color.b = 0;\r\n }else if(parseInt(iotObservationsResult)<11){\r\n color.r = 156;\r\n color.g = 255;\r\n color.b = 156;\r\n }\r\n\r\n draw(iotThingLocations[0],iotThingLocations[1],color);\r\n }\r\n }\r\n const CANVAS_WIDTH = 4096;\r\n const CANVAS_HEIGHT = 4096;\r\n if(sensorLodingNum === (sensor.length)){\r\n let canvasBuffer = ctx.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT).data;\r\n let visualizedDataGridBuffer = new Float32Array(CANVAS_WIDTH * CANVAS_HEIGHT);\r\n for (let i = 0; i < CANVAS_WIDTH * CANVAS_HEIGHT; i++) {\r\n visualizedDataGridBuffer[i] = (canvasBuffer[i * 4 + 2] / 255) * (canvasBuffer[i * 4 + 3] / 255);\r\n }\r\n var SensorThingRenderChartLayer =\r\n {\r\n layername: \"SensorThingRenderChart\",\r\n source: [visualizedDataGridBuffer],\r\n boundary: new window.GeoBoundary(118.0, 21.0, 123.0, 26.0),\r\n width: CANVAS_WIDTH,\r\n height: CANVAS_HEIGHT,\r\n date: [new Date()],\r\n useStepLayeredColorMap: false,\r\n\r\n } \r\n if(window.main.OView.getTerrainOverlay(\"SensorThingRenderChart\") !== null){\r\n window.main.OView.removeTerrainOverlay(\"SensorThingRenderChart\"); \r\n }\r\n window.main.OView.addTerrainVisualizedDataGridOverlay(SensorThingRenderChartLayer, console.log); \r\n }\r\n else if(sensorLodingNum < sensor.length){\r\n sensorLodingNum++;\r\n }\r\n };\r\n xhr.send(null);\r\n };\r\n\r\n let BOUND_X_MIN = 118.0;\r\n\t\tlet BOUND_X_MAX = 123.0;\r\n\r\n\t\tlet BOUND_Y_MIN = 21.0;\r\n\t\tlet BOUND_Y_MAX = 26.0;\r\n\r\n\t\tfunction draw(x,y,color) {\r\n\t\t\tlet size = 40;\r\n\t\t\tlet mx = (x - BOUND_X_MIN) / (BOUND_X_MAX - BOUND_X_MIN) * 4096;\r\n\t\t\tlet my = 4096 - (y - BOUND_Y_MIN) / (BOUND_Y_MAX - BOUND_Y_MIN) * 4096;\r\n\r\n\t\t\tvar radgrad = ctx.createRadialGradient(mx, my, 0, mx, my, size);\r\n\t\t\tradgrad.addColorStop(0, \"rgba(\"+color.r+ \",\" + color.g + \",\" + color.b +\",1.0)\");\r\n\t\t\tradgrad.addColorStop(1.0, \"rgba(\"+color.r+ \",\" + color.g + \",\" + color.b +\",0.0)\");\r\n\t\t\tctx.fillStyle = radgrad;\r\n\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.arc(mx, my, size, .0, Math.PI * 2);\r\n\t\t\tctx.fill();\r\n\t\t}\r\n\r\n sensor.map(\r\n (Sensor) => {\r\n doLoadIot(Sensor.Url); \r\n }\r\n );\r\n \r\n }\r\n\r\n render(){\r\n return(\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nclass SensorThingBarChart extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n sensor : [],\r\n sensorHandle : [],\r\n sensorInterval : []\r\n }\r\n this.sensorOnClick = this.sensorOnClick.bind(this);\r\n this.sensorOpen = this.sensorOpen.bind(this);\r\n this.sensorClose = this.sensorClose.bind(this);\r\n }\r\n componentDidMount(){\r\n let sensor = [];\r\n const SensorList = this.props.SensorList;\r\n let sensorInterval = this.state.sensorInterval;\r\n SensorList.map(\r\n (sensorResources) => {\r\n sensor.push({\r\n Name : sensorResources.name,\r\n Layername : sensorResources.layername,\r\n Url : sensorResources.api,\r\n IsOpen : true\r\n });\r\n }\r\n );\r\n sensor.map(\r\n (sensorResources) => {\r\n this.sensorOpen(sensorResources);\r\n let IntervalID = setInterval(this.sensorOpen, 300000,sensorResources);\r\n sensorInterval.push({\r\n Name : sensorResources.Name,\r\n ID : IntervalID\r\n });\r\n }\r\n );\r\n this.setState({sensor:sensor,sensorInterval:sensorInterval});\r\n }\r\n componentWillUnmount(){\r\n let sensor = this.state.sensor;\r\n let sensorInterval = this.state.sensorInterval;\r\n sensor.map(\r\n (sensorResources) => {\r\n this.sensorClose(sensorResources);\r\n }\r\n ); \r\n sensorInterval.map(\r\n (Interval) => {\r\n clearInterval(Interval.ID);\r\n }\r\n )\r\n }\r\n sensorOpen(sensor){\r\n let sensorHandle = this.state.sensorHandle;\r\n let customLayer = window.main.OView.findLayer(sensor.Name);\r\n if(customLayer === null){\r\n customLayer = window.main.OView.addCustomLayer({\r\n layername : sensor.Layername\r\n });\r\n sensorHandle.push({\r\n Name:sensor.Name,\r\n Handle:customLayer\r\n });\r\n }\r\n else{\r\n customLayer.removeAllEntity(); \r\n } \r\n let iotCustomEntity = [];\r\n let iotMap = new Map();\r\n let easeInOutQuad = function(t){\r\n return t<.5 ? 2*t*t : -1+(4-2*t)*t\r\n };\r\n let anime = function(){\r\n\t\t\tfor(var i = 0;i1.0)\r\n\t\t\t\t\t\tiotCustomEntity[i].nowLife = 1.0;\r\n\t\t\t\t\tvar updateHeight = easeInOutQuad(iotCustomEntity[i].nowLife) * iotCustomEntity[i].height;\r\n\t\t\t\t\tiotCustomEntity[i].hand.update({height:updateHeight});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\trequestAnimationFrame(anime);\r\n } \r\n requestAnimationFrame(anime);\r\n let doLoadIot = function(url){\r\n let xhr = new XMLHttpRequest();\r\n let color = \"\";\r\n\t\t\txhr.overrideMimeType(\"application/json\");\r\n xhr.open('GET', url, true);\r\n xhr.onload = function() {\r\n var jsonResponse = JSON.parse(xhr.responseText);\r\n var iotValue = jsonResponse;\r\n for(var i = 0;i70){\r\n color = \"#CE30FF\";\r\n }else if(parseInt(iotObservationsResult)<=70&&parseInt(iotObservationsResult)>64){\r\n color = \"#990000\";\r\n }else if(parseInt(iotObservationsResult)<=64&&parseInt(iotObservationsResult)>58){\r\n color = \"#ff0000\";\r\n }else if(parseInt(iotObservationsResult)<=58&&parseInt(iotObservationsResult)>53){\r\n color = \"#FF6464\";\r\n }else if(parseInt(iotObservationsResult)<=53&&parseInt(iotObservationsResult)>47){\r\n color = \"#ED7D31\";\r\n }else if(parseInt(iotObservationsResult)<=47&&parseInt(iotObservationsResult)>41){\r\n color = \"#FFC000\";\r\n }else if(parseInt(iotObservationsResult)<=41&&parseInt(iotObservationsResult)>35){\r\n color = \"#FFFF00\";\r\n }else if(parseInt(iotObservationsResult)<=35&&parseInt(iotObservationsResult)>25){\r\n color = \"#70AD47\";\r\n }else if(parseInt(iotObservationsResult)<=25&&parseInt(iotObservationsResult)>10){\r\n color = \"#31FF00\";\r\n }else if(parseInt(iotObservationsResult)<11){\r\n color = \"#9CFF9C\";\r\n }\r\n\r\n var hand = customLayer.addBarEntity({\r\n geo:new window.Geo3DPoint(iotThingLocations[0],iotThingLocations[1],0),\r\n size: 150,\r\n height: 0,\r\n tooltip: iotAreaDescription,\r\n color: color,\r\n side:6\r\n })\r\n iotCustomEntity.push({\r\n hand : hand,\r\n nowLife : 0.0,\r\n height : 100 * iotObservationsResult\r\n });\r\n }\r\n }\r\n };\r\n xhr.send(null);\r\n };\r\n doLoadIot(sensor.Url); \r\n this.setState({sensorHandle:sensorHandle});\r\n }\r\n\r\n sensorClose(sensor){\r\n let layerHandle = this.state.sensorHandle;\r\n for(let i=0; i {\r\n if(event === sensorResources){\r\n event.IsOpen = !event.IsOpen;\r\n } \r\n }\r\n );\r\n if(sensorResources.IsOpen){ \r\n this.sensorOpen(sensorResources);\r\n let IntervalID = setInterval(this.sensorOpen, 300000,sensorResources);\r\n sensorInterval.push({\r\n Name : sensorResources.Name,\r\n ID : IntervalID\r\n });\r\n }\r\n else{\r\n this.sensorClose(sensorResources);\r\n for(let i=0; i\r\n {\r\n sensor.map(\r\n (sensorResources) => \r\n
\r\n this.sensorOnClick(sensorResources)}>\r\n \r\n
\r\n )\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nclass SensorList extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n sensorList : [],\r\n isBarChart : true\r\n };\r\n this.sensorListClick = this.sensorListClick.bind(this);\r\n }\r\n componentDidMount(){\r\n let sensorList = [];\r\n (window.SENSORDATA).map(\r\n (List) => {\r\n sensorList.push({\r\n name : List.name,\r\n id : List.id,\r\n img : List.img,\r\n resources : List.resources,\r\n IsOpen : false\r\n });\r\n }\r\n );\r\n this.setState({sensorList:sensorList});\r\n }\r\n sensorListClick(sensor){\r\n let sensorList = this.state.sensorList;\r\n sensorList.map(\r\n (List) => {\r\n if(List === sensor){\r\n List.IsOpen = !List.IsOpen;\r\n }\r\n else{ \r\n List.IsOpen = false;\r\n }\r\n }\r\n );\r\n this.setState({sensorList:sensorList});\r\n }\r\n chartTypeChange(){\r\n this.setState({isBarChart:!this.state.isBarChart});\r\n }\r\n render(){\r\n const sensorList = this.state.sensorList;\r\n let barChart;\r\n let renderChart;\r\n if(this.state.isBarChart){\r\n barChart = \"active disabled item\";\r\n renderChart = \"item\";\r\n }\r\n else{\r\n barChart = \"item\";\r\n renderChart = \"active disabled item\";\r\n }\r\n return(\r\n
\r\n \r\n
\r\n {\r\n sensorList.map(\r\n (List) => \r\n
\r\n
\r\n this.sensorListClick(List)} defaultChecked={List.IsOpen}>\r\n \r\n
\r\n {\r\n List.IsOpen?\r\n
\r\n {\r\n this.state.isBarChart?\r\n :\r\n \r\n } \r\n \r\n
\r\n : null\r\n }\r\n
\r\n )\r\n }\r\n
\r\n
\r\n \r\n ); \r\n }\r\n}\r\n\r\nclass IoTSensorThings extends React.Component{\r\n constructor(){\r\n super();\r\n this.sidebarSwitch = this.sidebarSwitch.bind(this);\r\n this.state = {\r\n helpMode : \"None\"\r\n };\r\n } \r\n sidebarSwitch(){\r\n this.props.setIoTSensorThingsOpen();\r\n } \r\n onHelpClick(mode){\r\n this.setState({helpMode : mode});\r\n }\r\n render(){ \r\n const isIoTSensorThingsOpen = this.props.isIoTSensorThingsOpen;\r\n const sideMenuCSS ={\r\n overflow : 'inherit',\r\n transform : isIoTSensorThingsOpen?'translate3d(0, 0, 0)':'translate3d(-120%, 0, 0)',\r\n width : '480px'\r\n };\r\n const titleCSS = {\r\n margin: '10px 10px 10px 10px'\r\n };\r\n if(this.state.helpMode === \"IoTHelp\"){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'))\r\n }\r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help'));\r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n \r\n
\r\n 民生公共物聯網\r\n
\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n this.sidebarSwitch(e)}> \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default IoTSensorThings;","/* eslint-disable react/jsx-no-target-blank */\r\n/* eslint-disable array-callback-return */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport HelpComponent from './HelpComponent';\r\n\r\nclass GoogleSearch extends React.Component{\r\n constructor(){\r\n super();\r\n this.sidebarSwitch = this.sidebarSwitch.bind(this);\r\n this.state = {\r\n value:\"\",\r\n searchResult:[],\r\n isLoading:false,\r\n DefaultCustomer:null,\r\n helpMode : \"None\"\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.searchResultClick = this.searchResultClick.bind(this);\r\n this.searchClear = this.searchClear.bind(this);\r\n }\r\n componentDidUpdate(){\r\n let DefaultCustomer = this.state.DefaultCustomer;\r\n if(DefaultCustomer !== null){\r\n DefaultCustomer.setAfterTerrainDraw(true);\r\n DefaultCustomer.setDepthTest(false);\r\n DefaultCustomer.removeAllEntity();\r\n const searchResult = this.state.searchResult;\r\n searchResult.map(\r\n (Results) =>{\r\n var param = {};\r\n param.geo = new window.GeoPoint(Results.geometry.location.lng, Results.geometry.location.lat);//幾何\r\n param.color = \"#ffffff\";\r\n param.opacity = 1.0;//不透明\r\n param.size = 26;//大小\r\n param.symbol = Results.icon;\r\n param.maxDisplayDistance = 250000;\r\n param.absHeight = false; //是否為絕對高度\r\n param.label = {color:\"#B0C4D0\",text:Results.name,font:\"微軟正黑體\",size:20,borderColor:\"000000\",borderSize:10}; //加上文字Label\r\n var PointEntity = DefaultCustomer.addPointEntity(param);\r\n PointEntity.setTooltip(Results.name);\r\n PointEntity.setOnClickListener(function(mouse,attr){\r\n window.main.OView.goto(param.geo,1000,false);\r\n });\r\n } \r\n )\r\n }\r\n }\r\n sidebarSwitch(){\r\n this.props.setgoogleSearchOpen();\r\n }\r\n handleChange(event){\r\n this.setState({value: event.target.value});\r\n }\r\n handleSubmit(event){\r\n this.setState({isLoading:true});\r\n const value = this.state.value;\r\n var URL = \"\";\r\n URL+=\"oview.aspx?https://maps.googleapis.com/maps/api/place/textsearch/json?\";\r\n\t URL+=\"query=\"+value+\"+in+Taiwan&\";\t\t //指定在台灣地區\r\n\t URL+=\"language=zh-TW&\";\t\t\t\t //指定返還的資源使用的語言\r\n URL+=\"key=AIzaSyC8Qoy-nO1uLULyvtODx1tqvag9amx7yjs\"; \r\n fetch(URL)\r\n .then(res => res.json())\r\n .then(\r\n (data) => {\r\n if(data.status===\"OK\"){\r\n let DefaultCustomer = this.state.DefaultCustomer;\r\n if(DefaultCustomer !== null){\r\n DefaultCustomer.removeAllEntity();\r\n window.main.OView.removeLayer(DefaultCustomer);\r\n }\r\n DefaultCustomer = window.main.OView.addCustomLayer({\r\n layername : \"_SearchControllerDefaultCustomer\"\r\n });\r\n this.setState({searchResult:data.results,isLoading:false,DefaultCustomer:DefaultCustomer}); \r\n }else if(data.status===\"ZERO_RESULTS\"){\r\n window.alertify.error(\"查無結果\");\r\n this.setState({isLoading:false});\r\n }else{\r\n window.alertify.error(\"API回應錯誤\");\r\n this.setState({isLoading:false});\r\n }\r\n }\r\n )\r\n event.preventDefault();\r\n }\r\n searchResultClick(Results){\r\n var Point = new window.GeoPoint(Results.geometry.location.lng, Results.geometry.location.lat);\r\n //var param = {};\r\n //param.staticAzimuthAngleOffset = 0.25;\r\n window.main.OView.goto(Point,1000,false);\r\n }\r\n searchClear(){\r\n let DefaultCustomer = this.state.DefaultCustomer;\r\n if(DefaultCustomer !== null){\r\n DefaultCustomer.removeAllEntity();\r\n window.main.OView.removeLayer(DefaultCustomer);\r\n this.setState({searchResult:[],value:\"\",DefaultCustomer:null});\r\n } \r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){ \r\n const isgoogleSearchOpen = this.props.isgoogleSearchOpen;\r\n const searchResult = this.state.searchResult;\r\n const isLoading = this.state.isLoading;\r\n const sideMenuCSS ={\r\n overflow : 'inherit',\r\n transform : isgoogleSearchOpen?'translate3d(0, 0, 0)':'translate3d(-120%, 0, 0)',\r\n width : '480px'\r\n };\r\n const searchCSS = {\r\n margin: '10px 10px 10px 10px'\r\n }; \r\n if(this.state.helpMode === \"Search\" ){\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n } \r\n else if(this.state.helpMode === \"None\"){\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n this.sidebarSwitch(e)}> \r\n
\r\n
\r\n
\r\n this.searchClear()}>清除搜尋結果 \r\n

\r\n {\r\n isLoading?\r\n
\r\n \r\n
\r\n :\r\n
\r\n {\r\n searchResult.map(\r\n (Results) => \r\n
this.searchResultClick(Results)}>\r\n \r\n {Results.name}\r\n
\r\n ) \r\n }\r\n
\r\n }\r\n
\r\n @Google Map API\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default GoogleSearch;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport HelpComponent from './HelpComponent';\r\n\r\nclass Surveying extends React.Component{\r\n constructor(){\r\n super();\r\n this.closeCard = this.closeCard.bind(this);\r\n this.typeChange = this.typeChange.bind(this);\r\n this.surveyingStart = this.surveyingStart.bind(this);\r\n this.surveyingClear = this.surveyingClear.bind(this);\r\n this.measureCompleted = this.measureCompleted.bind(this);\r\n this.state = {\r\n type:[\r\n \"面積\",\r\n \"地表長度\",\r\n \"平面長度\",\r\n \"空間長度\",\r\n \"高度\"\r\n ],\r\n changeType:\"\",\r\n completed:\"\"\r\n };\r\n }\r\n componentWillMount(){\r\n window.main.OView.addEventListener(\"MeasureCompleted\",this.measureCompleted);\r\n this.setState({changeType:\"面積\"});\r\n }\r\n componentWillUnmount(){\r\n window.main.OView.removeEventListener(\"MeasureCompleted\",this.measureCompleted);\r\n }\r\n measureCompleted(e){\r\n if(!e.success){\r\n this.setState({changeType:\"\"});\r\n return;\r\n }else{\r\n if(this.state.changeType===\"面積\"){\r\n let area = \"\";\r\n if(e.area >= 1000000)\r\n area = (e.area / 1000000).toFixed(3) + \" 平方公里\";\r\n else\r\n area = e.area.toFixed(3) + \" 平方公尺\";\r\n this.setState({completed:area});\r\n }else if(this.state.changeType===\"地表長度\"){\r\n let length = \"\";\r\n if(e.length >= 1000)\r\n length = (e.length / 1000).toFixed(3) + \" 公里\";\r\n else\r\n length = e.length.toFixed(3) + \" 公尺\";\r\n this.setState({completed:length});\r\n }else if(this.state.changeType===\"平面長度\"){\r\n let length = \"\";\r\n if(e.length >= 1000)\r\n length = (e.length / 1000).toFixed(3) + \" 公里\";\r\n else\r\n length = e.length.toFixed(3) + \" 公尺\";\r\n this.setState({completed:length});\r\n }else if(this.state.changeType===\"空間長度\"){\r\n let length = \"\";\r\n if(e.length >= 1000)\r\n length = (e.length / 1000).toFixed(3) + \" 公里\";\r\n else\r\n length = e.length.toFixed(3) + \" 公尺\";\r\n this.setState({completed:length});\r\n }else if(this.state.changeType===\"高度\"){\r\n let height = \"\";\r\n if(e.height >= 1000)\r\n height = (e.height / 1000).toFixed(3) + \" 公里\";\r\n else\r\n height = e.height.toFixed(3) + \" 公尺\";\r\n this.setState({completed:height});\r\n }\r\n }\r\n }\r\n typeChange(event){\r\n switch(event.target.value){\r\n case \"面積\": \r\n this.setState({changeType:\"面積\"});\r\n break;\r\n case \"地表長度\":\r\n this.setState({changeType:\"地表長度\"});\r\n break;\r\n case \"平面長度\":\r\n this.setState({changeType:\"平面長度\"});\r\n break;\r\n case \"空間長度\":\r\n this.setState({changeType:\"空間長度\"});\r\n break;\r\n case \"高度\":\r\n this.setState({changeType:\"高度\"});\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n surveyingStart(){\r\n switch(this.state.changeType){\r\n case \"面積\": \r\n window.main.OView.abortMeasure();\r\n window.alertify.log(\"左鍵新增節點,雙擊左建結束測量\");\r\n window.main.OView.measureArea();\r\n break;\r\n case \"地表長度\":\r\n window.main.OView.abortMeasure();\r\n window.alertify.log(\"左鍵新增節點,雙擊左建結束測量\");\r\n window.main.OView.measureSurfaceLength();\r\n break;\r\n case \"平面長度\":\r\n window.main.OView.abortMeasure();\r\n window.alertify.log(\"左鍵新增節點,雙擊左建結束測量\");\r\n window.main.OView.measure2DLength();\r\n break;\r\n case \"空間長度\":\r\n window.main.OView.abortMeasure();\r\n window.alertify.log(\"左鍵新增節點,雙擊左建結束測量\");\r\n window.main.OView.measureSpatialLength();\r\n break;\r\n case \"高度\":\r\n window.main.OView.abortMeasure();\r\n window.alertify.log(\"左鍵開始測量\");\r\n window.main.OView.measureHeight();\r\n break;\r\n default:\r\n break;\r\n } \r\n }\r\n surveyingClear(){\r\n window.main.OView.clearMeasure();\r\n this.setState({completed:\"\"});\r\n }\r\n closeCard(){\r\n this.props.setSurveyingOpen();\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:!this.state.helpMode})\r\n }\r\n render(){\r\n const type = this.state.type;\r\n if(this.state.helpMode){\r\n switch(this.state.changeType){\r\n case \"面積\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"地表長度\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"平面長度\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"空間長度\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n case \"高度\":\r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help')); \r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n else{\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help'));\r\n }\r\n \r\n return(\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n 測量功能\r\n
\r\n
\r\n
\r\n 選定功能後點擊開始\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{this.state.completed}

\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nexport default Surveying","/* eslint-disable no-unreachable */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport reactCSS from 'reactcss';\r\nimport { SketchPicker } from 'react-color';\r\nimport c3 from 'c3';\r\nimport 'c3/c3.css';\r\nimport HelpComponent from './HelpComponent';\r\n\r\nclass TerrainProfileModal extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = {\r\n modalIsOpen: false,\r\n terrainHeight:[],\r\n terrainX:[]\r\n };\r\n this.openModal = this.openModal.bind(this);\r\n this.closeModal = this.closeModal.bind(this);\r\n this.terrainProfileOutput = this.terrainProfileOutput.bind(this);\r\n }\r\n componentWillMount(){\r\n window.main.OView.addEventListener(\"InputCompleted\",this.terrainProfileOutput);\r\n }\r\n componentWillUnmount(){\r\n window.main.OView.removeEventListener(\"InputCompleted\",this.terrainProfileOutput);\r\n window.main.OView.abortInput();\r\n window.main.OView.updateScreen();\r\n }\r\n openModal() {\r\n this.renderChart();\r\n this.setState({modalIsOpen: true});\r\n }\r\n closeModal() {\r\n this.setState({modalIsOpen: false,terrainHeight:[],terrainX:[]});\r\n }\r\n renderChart() {\r\n c3.generate({\r\n bindto: \"#chart1\",\r\n type: \"spline\",\r\n size: {\r\n width:800,\r\n height:600\r\n },\r\n legend: {\r\n hide: true\r\n },\r\n data: {\r\n x:'X',\r\n columns: [this.state.terrainX, this.state.terrainHeight],\r\n },\r\n axis: {\r\n x: {\r\n tick: {\r\n values: [this.state.terrainX[1],this.state.terrainX[100]]\r\n },\r\n label: {\r\n text: '經度位置',\r\n position: 'outer-center'\r\n }\r\n },\r\n y: {\r\n padding: {\r\n top: 100,\r\n bottom: 100\r\n },\r\n label: {\r\n text: '高度(M)',\r\n position: 'outer-middle'\r\n }\r\n }\r\n },\r\n grid: {\r\n y: {\r\n show: true\r\n }\r\n }\r\n });\r\n }\r\n terrainProfileOutput(event){\r\n if(event.success){\r\n window.alertify.success(\"請稍後 ......\");\r\n let terrainHeight = ['Height'];\r\n let terrainBaseX = (event.geo.Buffer[1].x - event.geo.Buffer[0].x)/99;\r\n let terrainX = ['X'];\r\n for(let i=0;i<100;i++){\r\n terrainX.push(event.geo.Buffer[0].x + terrainBaseX*i)\r\n }\r\n let data = {\r\n \"LAYERNAME\":window.main.OView.name,\r\n \"SAMPLE_SIZE\":100,\r\n \"EPSG\":4326,\r\n \"GEO\":{\r\n \"type\":\"LineString\",\r\n \"coordinates\":[[event.geo.Buffer[0].x,event.geo.Buffer[0].y],[event.geo.Buffer[1].x,event.geo.Buffer[1].y]]\r\n }\r\n }\r\n const url = \"http://140.110.20.123/Oview.aspx?http://127.0.0.1:8080/docmd?cmd=OV_GET_TERRAIN_PROFILE\";\r\n fetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify(\r\n data\r\n )\r\n })\r\n .then(res => res.json())\r\n .then((data) => {\r\n if(data.SUCCESS){\r\n for(let i =0;i\r\n
\r\n 地形剖面\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n 地形剖面結果\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nclass ViewshedAnalysis extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n displayColorPicker: false,\r\n color: {\r\n r: '241',\r\n g: '112',\r\n b: '19',\r\n a: '1',\r\n },\r\n hexColor:\"#F17013\",\r\n viewshedRange:2000,\r\n posX:120.973882,\r\n posY:23.97565,\r\n posZ:1000\r\n };\r\n this.viewshedRangeChange = this.viewshedRangeChange.bind(this);\r\n this.posXChange = this.posXChange.bind(this);\r\n this.posYChange = this.posYChange.bind(this);\r\n this.posZChange = this.posZChange.bind(this);\r\n this.posClick = this.posClick.bind(this);\r\n this.startAnalysis = this.startAnalysis.bind(this);\r\n this.clearAnalysis = this.clearAnalysis.bind(this);\r\n }\r\n\r\n componentWillUnmount(){\r\n if(window.main!==null){\r\n window.main.OView.cursor = 'default';\r\n window.main.OView.analysis.ClearViewshedAnalysis();\r\n var _analysis = window.main.OView.findLayer(\"analysis\");\r\n if(_analysis!==null){\r\n _analysis.removeAllEntity();\r\n }\r\n }\r\n window.main.OView.updateScreen();\r\n }\r\n\r\n handleClick = () => {\r\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\r\n };\r\n \r\n handleClose = () => {\r\n this.setState({ displayColorPicker: false })\r\n };\r\n \r\n handleChange = (color) => {\r\n this.setState({ color: color.rgb,hexColor:color.hex })\r\n \r\n };\r\n\r\n viewshedRangeChange(event){\r\n this.setState({ viewshedRange: event.target.valueAsNumber })\r\n }\r\n\r\n posXChange(event){\r\n this.setState({ posX: event.target.valueAsNumber })\r\n }\r\n\r\n posYChange(event){\r\n this.setState({ posY: event.target.valueAsNumber })\r\n }\r\n\r\n posZChange(event){\r\n this.setState({ posZ: event.target.valueAsNumber })\r\n }\r\n\r\n posClick(){\r\n var posThis = this;\r\n var _analysis = window.main.OView.findLayer(\"analysis\");\r\n if (_analysis === null) {\r\n _analysis = window.main.OView.addCustomLayer({\r\n layername : \"analysis\"\r\n });\r\n }\r\n _analysis.removeAllEntity();\r\n if(window.main!==null){\r\n window.main.OView.analysis.ClearViewshedAnalysis();\r\n window.main.OView.cursor = 'crosshair';\r\n window.alertify.log(\"選定中心點並拉開可視範圍的圓\");\r\n window.main.OView.inputCircle({},function(e){\r\n if(e.success){\r\n window.main.OView.cursor = 'default'; \r\n var param = {};\r\n param.geo = new window.GeoPoint(e.geo.center.x, e.geo.center.y, e.geo.center.z + 5);//幾何\r\n param.color = \"#FF0000\";//紅色\r\n param.opacity = 0.8;//不透明\r\n param.size = 15;//大小\r\n param.absHeight = true; //是否為絕對高 \r\n _analysis.addPointEntity(param);\r\n posThis.setState({\r\n viewshedRange:e.geo.radius,\r\n posX:e.geo.center.x,\r\n posY:e.geo.center.y,\r\n posZ:e.geo.center.z + 2\r\n });\r\n }\r\n else{\r\n window.main.OView.cursor = 'default';\r\n window.alertify.error(\"設定座標失敗\");\r\n }\r\n });\r\n } \r\n }\r\n \r\n startAnalysis(){\r\n if(window.main!==null){\r\n var ViewshedCenter = new window.GeoPoint(\r\n this.state.posX,\r\n this.state.posY,\r\n this.state.posZ\r\n );\r\n var _analysis = window.main.OView.findLayer(\"analysis\");\r\n if (_analysis === null) {\r\n _analysis = window.main.OView.addCustomLayer({\r\n layername : \"analysis\"\r\n });\r\n }\r\n _analysis.removeAllEntity();\r\n var param = {};\r\n param.geo = new window.GeoPoint(this.state.posX, this.state.posY, this.state.posZ + 3);//幾何\r\n param.color = \"#FF3300\";//紅色\r\n param.opacity = 0.8;//不透明\r\n param.size = 15;//大小\r\n param.absHeight = true; //是否為絕對高 \r\n _analysis.addPointEntity(param);\r\n var ViewshedRange = this.state.viewshedRange;\r\n var ViewshedColor = this.state.hexColor;\r\n window.main.OView.analysis.viewshedAnalysis({\r\n center: ViewshedCenter,\r\n distance: ViewshedRange,\r\n absHeight: true,\r\n color: ViewshedColor,\r\n opacity: 1.0,\r\n epsg: null\r\n });\r\n }\r\n }\r\n\r\n clearAnalysis(){\r\n if(window.main!==null){\r\n window.main.OView.abortInput();\r\n window.main.OView.analysis.ClearViewshedAnalysis();\r\n var _analysis = window.main.OView.findLayer(\"analysis\");\r\n if(_analysis!==null){\r\n _analysis.removeAllEntity();\r\n }\r\n }\r\n }\r\n\r\n render(){\r\n const styles = reactCSS({\r\n 'default': {\r\n color: {\r\n width: '155px',\r\n height: '14px',\r\n borderRadius: '2px',\r\n background: `rgba(${ this.state.color.r }, ${ this.state.color.g }, ${ this.state.color.b }, ${ this.state.color.a })`,\r\n },\r\n swatch: {\r\n padding: '5px',\r\n background: '#fff',\r\n borderRadius: '10px',\r\n boxShadow: '0 0 0 1px rgba(0,0,0,.1)',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n popover: {\r\n position: 'absolute',\r\n zIndex: '2',\r\n right: '0px'\r\n },\r\n cover: {\r\n position: 'fixed',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n left: '0px',\r\n },\r\n },\r\n });\r\n return(\r\n
\r\n
\r\n 視域分析\r\n
\r\n
\r\n
\r\n
\r\n
\r\n 可視範圍顏色 \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n { \r\n this.state.displayColorPicker ?
\r\n
\r\n \r\n
: null \r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n 範圍 \r\n
\r\n
\r\n
\r\n this.viewshedRangeChange(e)}>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n 中心X座標 \r\n
\r\n
\r\n
\r\n this.posXChange(e)}>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n 中心Y座標 \r\n
\r\n
\r\n
\r\n this.posYChange(e)}>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n 中心Z座標 \r\n
\r\n
\r\n
\r\n this.posZChange(e)}>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass SliceSpace extends React.Component{\r\n constructor(){\r\n super();\r\n this.setSliceSpace = this.setSliceSpace.bind(this);\r\n this.editSliceSpace = this.editSliceSpace.bind(this);\r\n this.removeSliceSpace = this.removeSliceSpace.bind(this);\r\n this.state = {isSliceSpace:false};\r\n }\r\n componentWillUnmount(){\r\n window.main.OView.abortInput();\r\n window.main.OView.updateScreen();\r\n }\r\n setSliceSpace(){\r\n if(window.main!==null){\r\n window.alertify.log(\"此功能適用於3D圖層中的建物、點雲、傾斜攝影,請開啟圖層後使用\");\r\n window.alertify.log(\"左鍵點擊後開始\");\r\n window.main.OView.setSliceSpace();\r\n this.setState({isSliceSpace:true});\r\n }\r\n }\r\n editSliceSpace(){\r\n window.main.OView.editSliceSpace();\r\n }\r\n removeSliceSpace(){\r\n window.main.OView.abortInput();\r\n window.main.OView.removeSliceSpace();\r\n this.setState({isSliceSpace:false});\r\n }\r\n render(){\r\n return(\r\n
\r\n
\r\n 模型切割\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n this.state.isSliceSpace?\r\n \r\n :\r\n \r\n } \r\n
\r\n
\r\n {\r\n this.state.isSliceSpace?\r\n \r\n :\r\n \r\n } \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass Analysis extends React.Component{\r\n constructor(){\r\n super();\r\n this.closeCard = this.closeCard.bind(this);\r\n this.viewshedAnalysis = this.viewshedAnalysis.bind(this);\r\n this.sliceSpace = this.sliceSpace.bind(this);\r\n this.terrainProfile = this.terrainProfile.bind(this);\r\n this.comingSoon = this.comingSoon.bind(this);\r\n this.state = {\r\n type:\"\",\r\n helpMode : \"None\"\r\n };\r\n }\r\n viewshedAnalysis(){\r\n this.setState({type:\"視域分析\"});\r\n }\r\n sliceSpace(){\r\n this.setState({type:\"模型切割\"});\r\n }\r\n terrainProfile(){\r\n this.setState({type:\"地形剖面\"});\r\n }\r\n comingSoon(){\r\n this.setState({type:\"\"});\r\n }\r\n closeCard(){\r\n this.props.setAnalysisOpen();\r\n }\r\n onHelpClick(mode){\r\n this.setState({helpMode:mode})\r\n }\r\n render(){\r\n switch(this.state.helpMode){\r\n case \"AnalysisHelp\" : \r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n break;\r\n case \"SliceSpaceHelp\" : \r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n break;\r\n case \"TerrainProfileHelp\" : \r\n ReactDOM.render(this.onHelpClick(e)} />,document.getElementById('Help'));\r\n break;\r\n case \"None\" :\r\n ReactDOM.unmountComponentAtNode(document.getElementById('Help')); \r\n break;\r\n default :\r\n break;\r\n }\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n 分析功能\r\n
\r\n
\r\n
\r\n 點擊下方按鈕選擇功能\r\n
\r\n
\r\n
\r\n \r\n {\r\n (()=>{\r\n switch(this.state.type){\r\n case \"視域分析\":return ; break;\r\n case \"模型切割\":return ; break;\r\n case \"地形剖面\":return ; break;\r\n default:return null;\r\n }\r\n }\r\n )()\r\n }\r\n
\r\n );\r\n }\r\n}\r\nexport default Analysis","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable jsx-a11y/iframe-has-title */\r\nimport React from 'react';\r\nimport GlobalSettingSidebar from './GlobalSetting';\r\nimport LayerListSidebar from './LayerList';\r\nimport LayerOptionSidebar from './LayerOption';\r\nimport GoogleSearch from './GoogleSearch';\r\nimport IoTSensorThings from './IoTSensorThings' ;\r\nimport Surveying from './Surveying';\r\nimport Analysis from './Analysis';\r\nimport { format } from \"date-fns\";\r\nimport TimeRange from \"react-timeline-range-slider\";\r\n\r\nclass LegendBox extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n startX: 0,\r\n startY: 0\r\n }\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onStop = this.onStop.bind(this);\r\n }\r\n componentDidMount(){\r\n let t = this;\r\n let name = '.drag' + this.props.index;\r\n let drag = document.querySelector(name);\r\n drag.addEventListener('mousedown', function (e) {\r\n e.preventDefault();\r\n let startX = e.clientX - drag.offsetLeft;\r\n let startY = e.clientY - drag.offsetTop;\r\n t.setState({startX, startY});\r\n window.addEventListener('mousemove', t.onMove, false);\r\n window.addEventListener('mouseup', t.onStop, false);\r\n });\r\n }\r\n onMove(e){\r\n let name = '.drag' + this.props.index;\r\n let drag = document.querySelector(name);\r\n let x = e.clientX - this.state.startX;\r\n let y = e.clientY - this.state.startY;\r\n drag.style.left = x + 'px';\r\n drag.style.top = y + 'px';\r\n drag.style.right = \"unset\";\r\n drag.style.bottom = \"unset\";\r\n }\r\n onStop(){\r\n let t = this;\r\n window.removeEventListener('mousemove', t.onMove, false);\r\n window.removeEventListener('mouseup', t.onStop, false);\r\n }\r\n render(){\r\n const {TITLE, COLOR, VALUE} = this.props.legendBoxContent;\r\n const index = this.props.index;\r\n let legendrag = \"legendBox drag\" + this.props.index;\r\n return(\r\n
\r\n
\r\n
\r\n
{TITLE}
\r\n {\r\n COLOR.map((val, index) => {\r\n return (\r\n <>\r\n \r\n {VALUE[index]} {(VALUE[index] === \"無資料\") ? null : (index == COLOR.length-1) ? ' 以上' : ' - '+VALUE[index + 1]}\r\n

\r\n \r\n )\r\n })\r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass StatusBar extends React.Component{\r\n constructor(){\r\n super();\r\n this.state = {\r\n camera : {\r\n x:0.00,\r\n y:0.00,\r\n z:0.00\r\n },\r\n FPSintervalId:{},\r\n TerrainintervalId:{},\r\n MouseintervalId:{},\r\n fps:0.0,\r\n terrainNod:0.00\r\n };\r\n this.cameraPOS = this.cameraPOS.bind(this);\r\n this.FPS = this.FPS.bind(this);\r\n this.getTerrainNod = this.getTerrainNod.bind(this);\r\n }\r\n componentDidMount(){\r\n var MouseintervalId = requestAnimationFrame(this.cameraPOS);\r\n var FPSintervalId = requestAnimationFrame(this.FPS);\r\n var TerrainintervalId = requestAnimationFrame(this.getTerrainNod);\r\n this.setState({FPSintervalId: FPSintervalId,TerrainintervalId:TerrainintervalId,MouseintervalId: MouseintervalId});\r\n }\r\n componentWillUnmount(){\r\n cancelAnimationFrame(this.state.MouseintervalId);\r\n cancelAnimationFrame(this.state.FPSintervalId);\r\n cancelAnimationFrame(this.state.TerrainintervalId);\r\n }\r\n cameraPOS(){\r\n var camera = window.main.OView.camera.pos;\r\n if(camera!==null)\r\n this.setState({camera:camera});\r\n requestAnimationFrame(this.cameraPOS);\r\n }\r\n FPS(){\r\n if(window.main !== null){\r\n var fps = (window.main.OView.getFPS()).toFixed(1);\r\n this.setState({fps:fps});\r\n requestAnimationFrame(this.FPS);\r\n } \r\n }\r\n getTerrainNod(){\r\n if(window.main !== null){\r\n var terrainNod = (window.main.OView.getTerrainNodeProgress()).toFixed(2);\r\n this.setState({terrainNod:terrainNod});\r\n requestAnimationFrame(this.getTerrainNod);\r\n }\r\n }\r\n render(){\r\n const x = this.state.camera.x;\r\n const y = this.state.camera.y;\r\n const z = this.state.camera.z>=1000 ? (this.state.camera.z/1000).toFixed(2) + \" 公里\" : (this.state.camera.z).toFixed(2)+\" 公尺\";\r\n const fps = this.state.fps;\r\n const terrainNod = this.state.terrainNod * 100;\r\n return(\r\n
\r\n
\r\n PilotGaea_v.12  \r\n {\r\n terrainNod === 100 ?\r\n \r\n :\r\n \r\n }\r\n {terrainNod + \"%\"}  FPS:{fps}  相機高度:{z}  相機經度:{x.toFixed(6)}  相機緯度:{y.toFixed(6)}\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nclass ToolBar extends React.Component{\r\n constructor() {\r\n super();\r\n this.state = {\r\n isSideMenu:[{\r\n globalSetting:false,\r\n layerList:false,\r\n layerOption:false,\r\n OtherList: false,\r\n googleSearch:false,\r\n IoTSensorThings:false \r\n }],\r\n isCard:[{\r\n surveying:false,\r\n analysis:false\r\n }],\r\n layerList : {\r\n Layer_2D:[],\r\n Layer_3D:[],\r\n Layer_Noise:[]\r\n },\r\n deleteList : {},\r\n LayerLength:0,\r\n modalIsOpen:false,\r\n isinfoBoxOpen:false,\r\n infoBoxAttr:{\r\n COL:[],\r\n ATTR:[]\r\n },\r\n showLegend: false,\r\n legendBoxContent:{\r\n TITLE: \"\",\r\n VALUE: [],\r\n COLOR: []\r\n },\r\n legendList: {\r\n title: [],\r\n legend: []\r\n },\r\n showTimeLine: false,\r\n TimeLineContent: {\r\n TIMElINEINTERVAL: [],\r\n SELECTEDINTERVAL: []\r\n },\r\n selectedInterval:[],\r\n timelineInterval:[],\r\n error: false,\r\n isPlay: false\r\n };\r\n this.setglobalSettingOpen = this.setglobalSettingOpen.bind(this);\r\n this.setOtherListOpen = this.setOtherListOpen.bind(this);\r\n this.setlayerListOpen = this.setlayerListOpen.bind(this);\r\n this.setlayerOptionOpen = this.setlayerOptionOpen.bind(this); \r\n this.setgoogleSearchOpen = this.setgoogleSearchOpen.bind(this); \r\n this.setIoTSensorThingsOpen = this.setIoTSensorThingsOpen.bind(this);\r\n this.setSurveyingOpen = this.setSurveyingOpen.bind(this); \r\n this.setAnalysisOpen = this.setAnalysisOpen.bind(this); \r\n this.setOpenLayer = this.setOpenLayer.bind(this);\r\n this.deleteLayer = this.deleteLayer.bind(this);\r\n this.closeModal = this.closeModal.bind(this);\r\n this.setinfoBoxOpen = this.setinfoBoxOpen.bind(this);\r\n this.setinfoBox = this.setinfoBox.bind(this);\r\n this.setLegendBoxSwitch = this.setLegendBoxSwitch.bind(this);\r\n this.setLegendBoxContent = this.setLegendBoxContent.bind(this);\r\n this.setTimeLineContent = this.setTimeLineContent.bind(this);\r\n }\r\n componentDidUpdate(){\r\n let selectedInterval = this.state.selectedInterval;\r\n document.querySelectorAll('.react_time_range__handle_wrapper').forEach(function (item, index) {\r\n item.setAttribute('data-attr', format(selectedInterval[index], 'yyyy-MM-dd HH'));\r\n });\r\n }\r\n setTimeLineInterval(){\r\n if (this.state.isPlay) {\r\n clearInterval(this.timerID);\r\n } else {\r\n this.timerID = setInterval(\r\n () => this.tick(),\r\n 1000\r\n );\r\n }\r\n this.setState({isPlay: !this.state.isPlay});\r\n }\r\n tick(){\r\n let next = new Date(this.state.selectedInterval[0]).getTime() + 3600*1000;\r\n let selectedInterval = [];\r\n if (next > new Date(this.state.selectedInterval[1]).getTime()) {\r\n selectedInterval = [\r\n this.state.timelineInterval[0],\r\n this.state.selectedInterval[1]\r\n ];\r\n } else {\r\n selectedInterval = [\r\n new Date(next),\r\n this.state.selectedInterval[1]\r\n ];\r\n }\r\n this.setState({selectedInterval});\r\n }\r\n setTimeLineContent(content){\r\n if (this.state.showTimeLine == false){\r\n this.setState({showTimeLine: !this.state.showTimeLine});\r\n }\r\n this.setState({selectedInterval: content.SELECTEDINTERVAL, timelineInterval: content.TIMElINEINTERVAL});\r\n }\r\n closeTimeline() {\r\n let layerList = this.state.layerList.Layer_Noise;\r\n let needTimeLine = false;\r\n layerList.forEach(function (layer) {\r\n if (layer.timeLine !== undefined)\r\n needTimeLine = true;\r\n });\r\n if (!needTimeLine && this.state.showTimeLine)\r\n this.setState({showTimeLine: !this.state.showTimeLine});\r\n }\r\n setLegendBoxContent(content){\r\n if (this.state.showLegend == false){\r\n this.setLegendBoxSwitch();\r\n }\r\n this.setState({legendBoxContent: content});\r\n }\r\n setLegendBoxSwitch(){\r\n this.setState({showLegend: !this.state.showLegend});\r\n }\r\n setLegendList(){\r\n let layerList = this.state.layerList.Layer_Noise;\r\n let legendList = {\r\n title: [],\r\n legend: []\r\n };\r\n layerList.forEach(function (layer) {\r\n if (layer.legend !== undefined) {\r\n if (!legendList.title.includes(layer.legend.TITLE)) {\r\n legendList.title.push(layer.legend.TITLE);\r\n legendList.legend.push(layer.legend);\r\n }\r\n }\r\n });\r\n this.setState({legendList});\r\n }\r\n setinfoBox(attr){\r\n this.setState({infoBoxAttr: attr});\r\n }\r\n setinfoBoxOpen(open = true){\r\n this.setState({isinfoBoxOpen: open});\r\n }\r\n closeModal() {\r\n this.setState({modalIsOpen: false});\r\n }\r\n setglobalSettingOpen(){\r\n const layerListOpen = [{\r\n globalSetting:!this.state.isSideMenu[0].globalSetting,\r\n layerList:false,\r\n layerOption: false,\r\n OtherList: false,\r\n googleSearch:false,\r\n IoTSensorThings:false \r\n }];\r\n this.setState({isSideMenu:layerListOpen});\r\n }\r\n setOtherListOpen() {\r\n const layerListOpen = [{\r\n globalSetting: false,\r\n layerList: false,\r\n layerOption: false,\r\n OtherList: !this.state.isSideMenu[0].OtherList,\r\n googleSearch: false,\r\n IoTSensorThings: false\r\n }];\r\n this.setState({ isSideMenu: layerListOpen });\r\n }\r\n setlayerListOpen(){\r\n const layerListOpen = [{\r\n globalSetting:false,\r\n layerList:!this.state.isSideMenu[0].layerList,\r\n layerOption:false,\r\n OtherList: false,\r\n googleSearch:false,\r\n IoTSensorThings:false\r\n }];\r\n this.setState({isSideMenu:layerListOpen});\r\n }\r\n setlayerOptionOpen(){\r\n const layerListOpen = [{\r\n globalSetting:false,\r\n layerList:false,\r\n layerOption:!this.state.isSideMenu[0].layerOption,\r\n OtherList: false,\r\n googleSearch:false,\r\n IoTSensorThings:false\r\n }];\r\n this.setState({isSideMenu:layerListOpen});\r\n }\r\n setgoogleSearchOpen(){\r\n const layerListOpen = [{\r\n globalSetting:false,\r\n layerList:false,\r\n layerOption: false,\r\n OtherList: false,\r\n googleSearch:!this.state.isSideMenu[0].googleSearch,\r\n IoTSensorThings:false\r\n }];\r\n this.setState({isSideMenu:layerListOpen});\r\n } \r\n setIoTSensorThingsOpen(){\r\n const layerListOpen = [{\r\n globalSetting:false,\r\n layerList:false,\r\n layerOption: false,\r\n OtherList: false,\r\n googleSearch:false,\r\n IoTSensorThings:!this.state.isSideMenu[0].IoTSensorThings\r\n }];\r\n this.setState({isSideMenu:layerListOpen});\r\n } \r\n setSurveyingOpen(){\r\n const CardOpen = [{\r\n surveying:!this.state.isCard[0].surveying,\r\n analysis:false\r\n }];\r\n this.setState({isCard:CardOpen});\r\n }\r\n setAnalysisOpen(){\r\n const CardOpen = [{\r\n surveying:false,\r\n analysis:!this.state.isCard[0].analysis\r\n }];\r\n this.setState({isCard:CardOpen});\r\n }\r\n setOpenLayer(layer,layerHandel){\r\n let openLayer = this.state.layerList;\r\n if (layer.TYPE === \"ConditionOverlay\") {\r\n let layer2D = openLayer.Layer_2D;\r\n if (layer2D.length == 0) {\r\n openLayer.Layer_2D.push({\r\n layerName : layer.TITLE,\r\n layerType : layer.TYPE\r\n });\r\n } else {\r\n layer2D.forEach(function (l) {\r\n if (l.layerType == \"ConditionOverlay\") {\r\n l.layerName = layer.TITLE;\r\n }\r\n });\r\n }\r\n } else if (layer.TYPE === \"Overlay\"){\r\n openLayer.Layer_2D.push({\r\n layerName : layer.TITLE,\r\n layerType : layer.TYPE\r\n });\r\n }\r\n else {\r\n if (layer.GROUP !== undefined && layer.GROUP == \"noise\") {\r\n openLayer.Layer_Noise.push({\r\n group : layer.GROUP,\r\n layerName : layer.TITLE,\r\n id : layer.ID,\r\n layerType : layer.TYPE,\r\n layerMode : layer.MODE,\r\n layerClass : layer.CLASS,\r\n layerLocation : layer.LOCATION,\r\n layerHandel : layerHandel,\r\n isBIMModel : layer.ISBIM,\r\n BIMAttrsList : layer.BIMATTRS,\r\n VideoPath : layer.VideoPath,\r\n VideoPOS : layer.VideoPOS,\r\n VideoV : layer.VideoV,\r\n VideoUP : layer.VideoUP,\r\n HFov : layer.HFov,\r\n VFov : layer.VFov,\r\n Far : layer.Far,\r\n Near : layer.Near,\r\n ImgW : layer.ImgW,\r\n ImgH : layer.ImgH,\r\n URL : layer.URL,\r\n timeLine : layer.TIMELINE,\r\n legend : layer.LEGEND\r\n });\r\n } else {\r\n openLayer.Layer_3D.push({\r\n layerName : layer.TITLE,\r\n id : layer.ID,\r\n layerType : layer.TYPE,\r\n layerMode : layer.MODE,\r\n layerClass : layer.CLASS,\r\n layerLocation : layer.LOCATION,\r\n layerHandel : layerHandel,\r\n isBIMModel : layer.ISBIM,\r\n BIMAttrsList : layer.BIMATTRS,\r\n VideoPath : layer.VideoPath,\r\n VideoPOS : layer.VideoPOS,\r\n VideoV : layer.VideoV,\r\n VideoUP : layer.VideoUP,\r\n HFov : layer.HFov,\r\n VFov : layer.VFov,\r\n Far : layer.Far,\r\n Near : layer.Near,\r\n ImgW : layer.ImgW,\r\n ImgH : layer.ImgH,\r\n URL : layer.URL,\r\n });\r\n }\r\n }\r\n let LayerLength = openLayer.Layer_2D.length+openLayer.Layer_3D.length+openLayer.Layer_Noise.length;\r\n this.setState({layerList:openLayer,deleteList:{},LayerLength:LayerLength});\r\n this.setLegendList();\r\n }\r\n deleteLayer(layer){\r\n let deleteLayerList = this.state.layerList;\r\n let DeleteList = {\r\n layerName : layer.TITLE,\r\n layerType : layer.TYPE\r\n };\r\n if(layer.TYPE === \"Overlay\" || layer.TYPE == \"ConditionOverlay\"){\r\n for (let i = 0, len = deleteLayerList.Layer_2D.length; i < len; i++){\r\n if (deleteLayerList.Layer_2D[i].layerName === layer.TITLE){\r\n deleteLayerList.Layer_2D.splice(i, 1);\r\n let LayerLength = deleteLayerList.Layer_2D.length+deleteLayerList.Layer_3D.length+deleteLayerList.Layer_Noise.length;\r\n this.setState({layerList:deleteLayerList,deleteList:DeleteList,LayerLength:LayerLength});\r\n return ;\r\n }\r\n }\r\n } else if (layer.GROUP != undefined && layer.GROUP == \"noise\") {\r\n for (let i = 0, len = deleteLayerList.Layer_Noise.length; i < len; i++){\r\n if (deleteLayerList.Layer_Noise[i].layerName === layer.TITLE){\r\n deleteLayerList.Layer_Noise.splice(i, 1);\r\n let LayerLength = deleteLayerList.Layer_2D.length + deleteLayerList.Layer_3D.length+deleteLayerList.Layer_Noise.length;\r\n this.setState({layerList:deleteLayerList,deleteList:DeleteList,LayerLength:LayerLength});\r\n this.setLegendList();\r\n this.closeTimeline();\r\n return ;\r\n }\r\n }\r\n } else {\r\n for (let i = 0, len = deleteLayerList.Layer_3D.length; i < len; i++){\r\n if (deleteLayerList.Layer_3D[i].layerName === layer.TITLE){\r\n deleteLayerList.Layer_3D.splice(i, 1);\r\n let LayerLength = deleteLayerList.Layer_2D.length + deleteLayerList.Layer_3D.length+deleteLayerList.Layer_Noise.length;\r\n this.setState({layerList:deleteLayerList,deleteList:DeleteList,LayerLength:LayerLength});\r\n return ;\r\n }\r\n }\r\n }\r\n }\r\n errorHandler = ({ error }) => this.setState({ error });\r\n onChangeCallback = (selectedInterval) => this.setState({selectedInterval});\r\n render(){\r\n const globalSetting = this.state.isSideMenu[0].globalSetting;\r\n const layerListOpen = this.state.isSideMenu[0].layerList;\r\n const layerOptionOpen = this.state.isSideMenu[0].layerOption;\r\n const OtherListOpen = this.state.isSideMenu[0].OtherList;\r\n const LayerLength = this.state.LayerLength;\r\n const legendList = this.state.legendList;\r\n const Layer_2D_Length = (this.state.layerList.Layer_2D).length;\r\n const infoBoxOpen = this.state.isinfoBoxOpen;\r\n const showTimeLine = this.state.showTimeLine;\r\n const {error, timelineInterval, selectedInterval} = this.state;\r\n\r\n let active ;\r\n if(this.state.modalIsOpen)\r\n active = \"ts modals dimmer active\";\r\n else\r\n active = \"ts modals dimmer\";\r\n \r\n return(\r\n
\r\n
\r\n \r\n \r\n
\r\n 系統設備性能檢測\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n this.setOpenLayer(layer,layerHandel)}\r\n setinfoBox = {(attr)=>this.setinfoBox(attr)}\r\n setinfoBoxOpen = {this.setinfoBoxOpen}\r\n setLegendBoxSwitch = {this.setLegendBoxSwitch}\r\n setLegendBoxContent = {this.setLegendBoxContent}\r\n setTimeLineContent = {this.setTimeLineContent}\r\n deleteLayer = {(layer)=>this.deleteLayer(layer)}\r\n deleteList = {this.state.deleteList}\r\n LayerLength = {Layer_2D_Length}\r\n currentTime={selectedInterval}\r\n />\r\n this.deleteLayer(layer)}\r\n LayerList = {this.state.layerList}\r\n currentTime={selectedInterval}\r\n />\r\n \r\n {\r\n legendList.legend.map((legend, index) => {\r\n return \r\n })\r\n }\r\n
\r\n this.setTimeLineInterval()}>\r\n format(new Date(ms), 'yyyy-MM-dd HH')}\r\n />\r\n
\r\n \r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\nclass InfoBox extends React.Component{\r\n constructor() {\r\n super();\r\n this.infoBoxSwitch = this.infoBoxSwitch.bind(this);\r\n }\r\n infoBoxSwitch(open){\r\n this.props.setinfoBoxOpen(open);\r\n }\r\n render(){\r\n const isinfoBoxOpen = this.props.isinfoBoxOpen;\r\n const infoBoxStyle = {\r\n transform: isinfoBoxOpen?'translate3d(0, 0, 0)':'translate3d(120%, 0, 0)',\r\n transition: \"0.2s\",\r\n position: \"fixed\",\r\n top: \"5px\",\r\n right: \"5px\",\r\n width: \"20vw\",\r\n maxWidth: \"400px\"\r\n };\r\n const {COL, ATTR} = this.props.infoBoxAttr;\r\n const en_zh = {\r\n NO: \"建物編號\",\r\n roofElevat: \"頂樓高度(公尺)\",\r\n floors: \"樓層數\",\r\n noice: \"每小時均能音量(dBA)\",\r\n noise: \"每小時均能音量(dBA)\"\r\n }\r\n return(\r\n
\r\n
\r\n this.infoBoxSwitch(false)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n COL.map((col, index) => {\r\n if (index > 0) {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n })\r\n }\r\n \r\n
屬性資料
{en_zh[col]}{ATTR[index]}
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ToolBar;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport ToolBar from './MenuSide';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}