====== Railway tools ====== ===== TIN Layer ===== To create a storage layer for TIN and upload TIN from the SHP file you should follow the next steps: **1.Create database table by using query (please, replace placeholder LAYER_NAME by real layer name):** CREATE TABLE public.LAYER_NAME ( fid bigserial, geom geometry(MultiPolygonZ,4326) NOT NULL, ts timestamp with time zone NOT NULL DEFAULT now(), qkey character varying(128) COLLATE pg_catalog."default" NOT NULL, sourcename character varying(128) COLLATE pg_catalog."default" NOT NULL, CONSTRAINT LAYER_NAME_pkey PRIMARY KEY (fid) USING INDEX TABLESPACE mv_main, CONSTRAINT LAYER_NAME_ukey UNIQUE (qkey, sourcename) USING INDEX TABLESPACE mv_main ) TABLESPACE mv_main; ALTER TABLE public.LAYER_NAME OWNER to geoserver; CREATE INDEX LAYER_NAME_ts ON public.LAYER_NAME USING btree (ts) TABLESPACE mv_main; CREATE INDEX spatial_LAYER_NAME_geom ON public.LAYER_NAME USING gist (geom) TABLESPACE mv_main; **2. Create layer on the geoserver (you should know how to do it, if you are reading this article)** **2.a Add data READ/WRITE access to the layer in GeoServer under admin account** **3. Create layer in Multiviewer by using layer definition (please, replace placeholders WORKSPACE/LAYER_NAME by real GeoServer workspace/layer name):** { "Group": "raster_layer", "Type": "tp_wms_layer", "Version": "1.0", "Settings": { "VisibleLevel": { "Min": 0, "Max": 2500000 }, "IsHiddenByDefault": true, "DtmSettings": { "Type": "GeoJsonTin", "TileSize": 256, "ZoomLevel": 18, "WfsUrl": "DEFAULT_GEOSERVER_URL/wfs", "NamespaceUrl": "DEFAULT_GEOSERVER_URL/WORKSPACE" }, "ImageProvider": { "ProviderDescription": { "url": "DEFAULT_GEOSERVER_URL/gwc/service/wms", "layers": [ "WORKSPACE:LAYER_NAME" ], "parameters": { "Username": "", "Password": "", "SRS": "EPSG:4326", "VERSION": "1.1.1", "REQUEST": "GetMap", "SERVICE": "WMS", "FORMAT": "image/png", "TRANSPARENT": "true", "VIEWPARAMS": "", "CIM_Renderer": "MinMax", "CIM_MinMaxRenderingMinimum": 0, "CIM_MinMaxRenderingMaximum": 128 } }, "ProviderAdditionalOptions": { "enablePickFeatures": false, "pickFeatureProxy": null } }, "AdditionalOptions": { "alpha": 1, "brightness": 1, "gamma": 1, "hue": 0 }, "LayerSettings": { "filterParameters": [] }, "IsForceBasicAuth": true } } **4. Open web-page in browser [[https://beta.mv.services.hxgncontent.com/Proof/SHPLoader|SHP TIN Loader]] ** {{ :railway_tool:shp_tin_uploader.jpg |}} **4.1 Select 3 files .SHP, .DBF, .PRJ which are belong to the one dataset (multiple uploading is not supported!!!)** {{ :railway_tool:shp_tin_input_files.png |}} **4.2 Set the GeoServer connection details** **4.3 Press button "refresh" list & select storage layer for uploading** **4.4 Press button "upload" to initiate uploading** **4.5 You can see a progress in the log section** ===== Video ===== ==== Video viewer ==== Multiviewer is able to visualize georeferenced video files. If project contains the layers with video files - you will see section "Video" in the layer menu. {{ :railway_tool:railway-video-0.jpg |}} By default, track of the video file is hidden, make it visible to start work with video. Click on the trajectory to open video viewer. {{ :railway_tool:railway-video-1.jpg |}} Each video viewport has 2 markers: * blue one(background map only) - camera position * red one - helper for identification same position on the map/video You can change quality of the video by using slider "Quality" in the settings. {{ :railway_tool:railway-video-2.jpg |}} There are video navigation functionality: * **left mouse click** on the video trajectory - open video viewport (with CTRL - open one more viewport) * **left mouse click** in the video viewport - pause/play * **mouse scroll when video is playing** - change paly rate * **mouse scroll when video is paused** - change current time +/- 1 second * **keyboard arrow up/down** (when mouse cursor inside the video viewport) - increase/decrease distance between blue and red markers (without CTRL - 0.5m, with CTRL - 5m) * **keyboard key "s"** - start tracking of the cursor position * **keyboard key "s" + CTRL** - start sync of the 2 video tracks (they should be in the same direction) * **keyboard key "d"** - stop cursor tracking/video sync ===== 3D Viewport ===== ==== Extra attributes of the layer ==== You can use extra attributes to change default visualization/editing of the vector layer in the Viewport 3D. Extra attributes should be placed under "Settings" attribute. === Visualization3D === {{ :railway_tool:visualization3d_wall_trackway.jpg |}} **Type**, can be: "wall" (relevant: "WidthStart", "WidthEnd", "HeightStart", "HeightEnd"), "trackway" (relevant: "Width"). For the Width* and Height* can be setup exact/constant number or name of the feature's attribute where is stored value. **EXAMPLE:** "Visualization3D": { "Type": "wall", "WidthStart": 0.5, "WidthEnd": 1.5, "HeightStart": "width", "HeightEnd": "height" } "Visualization3D": { "Type": "trackway", "Width": 1.5, "IdAttributeName": "rclname" } "Visualization3D": { "Type": "covermap" } === Сache3D === **Type**, can be: "allinmemory" - dataset requests all features from the server during initialization and keeps it in memory, further interacts with this cache (for static datasets only!!!) "Сache3D": { "Type": "allinmemory" } === Correction3D === Defines set of the spatial corrections. "Correction3D": [ { "Attribute": "direction", "Type": "rz", "Value": "Opposite", "Delta": 180, "Scale": 1 }, { "Attribute": "x_offset", "Type": "tx", "Value": "PoleArm_Right_02", "Delta": 0.5, "Scale": 1 }, { "Attribute": "x_offset", "Type": "ty", "Value": "PoleArmFront_01", "Delta": -0.5, "Scale": 1 }, { "Attribute": "trajectory", "Type": "rotatealongline", "Value": null, "Delta": null, "Scale": 1 } ] === Dem3D === {{ :railway_tool:visualization3d_zcorrection.jpg?600 |}} **Type**, can be: "dem" - objects from this layer will be used during dropping; "depends" - vertices of the objects from this layer will be dropped to the dem during rendering; "none" - render like it is/no how affect to other objects. **ZCorrection** (optional) - defines set of rules to increase/decrease offset from the dem. There are 3 types of the rule definition: 1) Add 0.75 to Z coordinate if feature's attribute "classname" has value "p" } "Attribute": "classname", "Value": "p", "Delta": 0.75 } 2) Add to Z coordinate value from the feature's attribute "comment" if this value can be converted to the float } "Attribute": "commect", "Value": null, "Delta": "itself", "Scale": 1.0 } 3) Add 1.0 to Z coordinate } "Attribute": null, "Value": null, "Delta": 1 } **EXAMPLE:** "Dem3D": { "Type": "depends", "ZCorrection": [ { "Attribute": "classname", "Value": "p", "Delta": 0.75 }, { "Attribute": "commect", "Value": null, "Delta": "itself", "Scale": 1.0 }, { "Attribute": null, "Value": null, "Delta": 1 } ] } === IsElevationAdjustment === If project contains [[railway_tool:railway_tool|TIN layer]], app will try to get Z coordinate for the captured features from TIN. "IsElevationAdjustment": true === Transform3D === {{ :railway_tool:visualization3d_transformation.jpg?600 |}} **Update**, can be: null - transformation is denied for this axis; "geom" - any changes will be applied to the vertices of the vector feature (allowed in the section "Translate"); mesh - any changes will be applied to the 3D model (allowed in the section "Translate", "Rotate" and "Scale"); prop:[PROPERTY NAME] - any changes will be stored as feature's property value (allowed in the section "Translate", "Rotate" and "Scale") Hotkeys: * **left mouse click** in the 3D Viewport - start transformation * **ESC** - finish transformation and save changes * **+/-** - increase/decrease size of the transformation control * **space** - deactivate/activate transformation * **s** - in the 3D Viewport, switch transform control to the "scale" mode * **r** - in the 3D Viewport, switch transform control to the "rotation" mode * **t** - in the 3D Viewport, switch transform control to the "translation" mode **EXAMPLE:** "Transform3D": { "Translate": { "X": { "Update": "geom" }, "Y": { "Update": "geom" }, "Z": { "Update": "geom" } }, "Rotate": { "X": { "Update": null }, "Y": { "Update": null }, "Z": { "Update": "prop:text" } }, "Scale": { "X": { "Update": "mesh" }, "Y": { "Update": "mesh" }, "Z": { "Update": "mesh" } } }