/// <summary>
        ///  Return a string in KML format containing all pre animation definitions
        ///  that are required for the aircraft
        /// </summary>
        /// <returns></returns>
        public string KMLSetup()
        {
            RDToGeographic converter    = new RDToGeographic();
            string         heatmapSetup = "<Folder>";

            for (int i = 1; i < _population.Count; i++)
            {
                if (i % 1000 == 0)
                {
                    Console.WriteLine(i);
                }
                double[] row        = _population[i];
                var      point      = converter.convertToLatLong(row[0], row[1]);
                var      test       = new GeoPoint3D(point.X, point.Y, 0);
                var      upperRight = test.MoveInDirection(DotSize, 45);
                var      lowerLeft  = test.MoveInDirection(DotSize, 225);

                heatmapSetup += @"
    <GroundOverlay>
      <name> house" + i + @"</name>
      <Icon>
        <href>" + DotFile + @"</href>
      </Icon>
      <LatLonBox>
        <north>" + upperRight.Latitude + @"</north>
        <south>" + lowerLeft.Latitude + @"</south>
        <east>" + upperRight.Longitude + @"</east>
        <west>" + lowerLeft.Longitude + @"</west>
      </LatLonBox>
    </GroundOverlay>
                    ";
            }
            heatmapSetup += @"</Folder>";
            return(heatmapSetup);
        }
        public void t4_GridCoordinateZTest()
        {
            Grid       grid  = noiseModel.TemporalGrid.GetGrid(0);
            GeoPoint3D point = grid.GridGeoCoordinate(1.5, 4);

            Assert.AreEqual(0.0, Math.Round(point.Z, 1));
        }
        public void t3_GridCoordinateYTest()
        {
            Grid       grid  = noiseModel.TemporalGrid.GetGrid(0);
            GeoPoint3D point = grid.GridGeoCoordinate(1.5, 4);

            Assert.AreEqual(4.6440, point.Longitude, 0.001);
        }
        /// <summary>
        /// Return a string in KML format containing all updates
        /// for the aircraft at the given moment in time
        /// </summary>
        /// <returns></returns>
        public string KMLAnimationStep(int t)
        {
            GeoPoint3D animationPoint = _trajectory.GeoPoint(t).MoveInDirection(70, (_trajectory.Heading(t) + 210) % 360);

            return(@"
            <Location targetId='model_location'>
			    <latitude>"             + animationPoint.Latitude + @"</latitude>
			    <longitude>"             + animationPoint.Longitude + @"</longitude>
			    <altitude>"             + animationPoint.Z + @"</altitude>
            </Location>
            <Orientation targetId='model_orientation'>
                <heading>" + _trajectory.Heading(t) + @"</heading>
                <tilt>" + _trajectory.Tilt(t) + @"</tilt>
                <roll>" + _trajectory.BankAngle(t) + @"</roll>
            </Orientation>
            <Placemark targetId='pin'>
            <name>" + _aircraft.Model.ToString().Remove(_aircraft.Model.ToString().Length - 4) + @" " + Math.Round(animationPoint.Z, 3) +
                   @"</name>
            </Placemark>
            <Point targetId='aircraftpin'>
            <coordinates>" + animationPoint.Longitude + @","
                   + animationPoint.Latitude + @","
                   + (animationPoint.Z + 50) + @"</coordinates>
            </Point>
                      ");
        }
Example #5
0
        public void SetPointStyle3D(String name, Boolean enable)
        {
            Int32 index       = scontrol.Scene.TrackingLayer.IndexOf(m_pointName + name);
            Int32 indexPoints = 0;

            if (index >= 0)
            {
                GeoPoint3D geoPoint3D = scontrol.Scene.TrackingLayer.Get(index) as GeoPoint3D;
                //跟踪图层中索引为1的是线对象
                if (index > 0)
                {
                    indexPoints = index - 1;
                }
                else
                {
                    indexPoints = index;
                }

                if (enable)
                {
                    geoPoint3D.Style3D = SelectPointGeoStyle3D(m_point3Ds[indexPoints].Z);
                }
                else
                {
                    geoPoint3D.Style3D = GetPointGeoStyle3D(m_point3Ds[indexPoints].Z);
                }
                scontrol.Scene.TrackingLayer.Set(index, geoPoint3D);
            }
        }
Example #6
0
        private void UpdateTrack(string key, GeoPoint3D point)
        {
            if (geoPlotCartesian.InvokeRequired)
            {
                geoPlotCartesian.Invoke((MethodInvoker) delegate
                {
                    geoPlotCartesian.UpdateTrack(key, point.Latitude, point.Longitude);
                    geoPlotCartesian.Invalidate();
                });
            }
            else
            {
                geoPlotCartesian.UpdateTrack(key, point.Latitude, point.Longitude);
                geoPlotCartesian.Invalidate();
            }

            geoPlotUpdateTimeStamp = DateTime.Now;

            TracksWritePoint(key, point);

            if (isAutosnapshot)
            {
                InvokeSaveFullSnapshot();
            }
        }
        /// <summary>
        /// 结束空间查询
        /// </summary>
        private void EndSpatialQuery()
        {
            string actionStr = SmObjectLocator.getInstance().GlobeObject.Action.ToString().ToLower();
            switch (actionStr)
            {
                case "createpoint":
                    if (this.TempPoints3Ds.Count == 1)
                    {
                        GeoPoint3D geoPoint3D = new GeoPoint3D(TempPoints3Ds[0]);
                        geoPoint3D.Style3D = GetGeoStyle3D();
                        SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, spatialTag);
                    }
                    break;
                    //此时划线就是为了画圆
                case "createline":
                    int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(spatialTempTag);
                    if (index >= 0)
                    {
                        SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index);
                    }
                    if (this.TempPoints3Ds.Count == 2)
                    {
                        Point3D point3D = new Point3D(TempPoints3Ds[0].X, TempPoints3Ds[0].Y, TempPoints3Ds[0].Z);
                        double radius = GetLengthBy2Point(TempPoints3Ds[0], TempPoints3Ds[1]);
                        GeoCircle3D geoCircle3D = new GeoCircle3D(point3D, radius);
                        GeoModel geoModel = geoCircle3D.GetGeoModel(72, 72);
                        geoModel.Style3D = GetGeoStyle3D();
                        SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoModel, spatialTag);
                    }
                    break;
                case "createpolygon":
                    if (this.TempPoints3Ds.Count > 2)
                    {
                        GeoRegion3D geoRegion3D = new GeoRegion3D(TempPoints3Ds);
                        geoRegion3D.Style3D = GetGeoStyle3D();
                        SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoRegion3D, spatialTag);
                    }
                    else
                    {
                        int index1 = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(spatialTempTag);
                        if (index1 >= 0)
                        {
                            SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index1);
                        }
                    }
                    break;
                default:
                    break;
            }
            Point3Ds queryPoints = TempPoints3Ds.Clone();
            TempPoints3Ds.Clear();
            removeListener();
            if (ms != null)
            {
				ms.ExecuteQuery(spatialTag, queryPoints, actionStr);
            }

			//恢复场景光标形状
			SmObjectLocator.getInstance().GlobeObject.IsCursorCustomized = false;
        }
        /// <summary>
        /// Calculates the bankangle on a given timestep t
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public double BankAngle(int t)
        {
            try {
                if (t < 5)
                {
                    return(0);
                }

                //source: http://www.regentsprep.org/regents/math/geometry/gcg6/RCir.htm
                GeoPoint3D point1 = GeoPoint(t - 5);
                GeoPoint3D point2 = GeoPoint(t);
                GeoPoint3D point3 = GeoPoint(t + 5);

                double m_r = (point2.Longitude - point1.Longitude) / (point2.Latitude - point1.Latitude);
                double m_t = (point3.Longitude - point2.Longitude) / (point3.Latitude - point2.Latitude);
                double x_c = (m_r * m_t * (point3.Longitude - point1.Longitude) + m_r * (point2.Latitude + point3.Latitude) - m_t * (point1.Latitude + point2.Latitude)) / (2 * (m_r - m_t));
                double y_c = -(1 / m_r) * (x_c - ((point1.Latitude + point2.Latitude) / 2)) + ((point1.Longitude + point2.Longitude) / 2);

                if (double.IsInfinity(x_c))
                {
                    return(0);
                }

                GeoCoordinate c1       = new GeoCoordinate(point1.Latitude, point1.Longitude);
                GeoCoordinate centroid = new GeoCoordinate(x_c, y_c);
                double        radius   = c1.GetDistanceTo(centroid);

                double TAS = Speed(t);
                double g   = 9.81;
                return(Math.Atan(((TAS * TAS) / radius) / g) * (180 / Math.PI));
            } catch (Exception ex)
            {
                return(0);
            }
        }
        /// <summary>
        /// Calculates the heading on a given timestep t
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public double Heading(double t)
        {
            GeoPoint3D point1 = GeoPoint(t);
            GeoPoint3D point2 = GeoPoint(t + 1);

            return(point1.HeadingTo(point2));
        }
        public void t2_GridCoordinateXTest()
        {
            Grid       grid  = noiseModel.TemporalGrid.GetGrid(0);
            GeoPoint3D point = grid.GridGeoCoordinate(1.5, 4);

            Assert.AreEqual(52.2689, point.Latitude, 0.001);
        }
Example #11
0
        public void GeoPointHeadingToTest()
        {
            GeoPoint3D point       = new GeoPoint3D(1.5, 2.3, 4.5);
            GeoPoint3D destination = new GeoPoint3D(8.5, 4.5, 7.8);
            double     res         = point.HeadingTo(destination);

            Assert.AreEqual(252.523, res, 0.001);
        }
Example #12
0
        public void GeoPointHeadingToHighDlonTest()
        {
            GeoPoint3D point       = new GeoPoint3D(1.5, 2.3, 4.5);
            GeoPoint3D destination = new GeoPoint3D(850, 4500, 7800);
            double     res         = point.HeadingTo(destination);

            Assert.AreEqual(Double.NaN, res);
        }
Example #13
0
        public void GeoPointMoveDirectionTest()
        {
            GeoPoint3D point      = new GeoPoint3D(1.5, 2.3, 4.5);
            GeoPoint3D movedPoint = point.MoveInDirection(12.5, 50);

            GeoPoint3D destination = new GeoPoint3D(0, 100, 100);

            Assert.AreEqual(1.5, movedPoint.Longitude, 0.001);
        }
        /// <summary>
        ///  Return a string in KML format containing all pre animation definitions
        ///  that are required for the aircraft
        /// </summary>
        /// <returns></returns>
        public string KMLSetup()
        {
            GeoPoint3D startingPoint = _trajectory.GeoPoint(0);

            return(@"
<Style id=""pushpin"">
    <IconStyle>
        <scale>0</scale>
    </IconStyle>
    <LabelStyle>
        <color>FFFFFFFF</color>
        <scale>0.45</scale>
    </LabelStyle>
</Style >

<Placemark>
	<name>Aircraft model</name>
	<Model id='model'>
	    <visibility>0</visibility>
		<altitudeMode>absolute</altitudeMode>
		<Location id='model_location'>
			<latitude>"             + startingPoint.Latitude + @"</latitude>
			<longitude>"             + startingPoint.Longitude + @"</longitude>
			<altitude>"             + startingPoint.Z + @"</altitude>
		</Location>
		<Orientation id='model_orientation'>
                <heading>" + _trajectory.Heading(0) + @"</heading>
                <tilt>" + _trajectory.Tilt(0) + @"</tilt>
                <roll>" + _trajectory.BankAngle(0) + @"</roll>
		</Orientation>
		<Scale id='model_scale'>
			<x>3.5</x>
			<y>3.5</y>
			<z>3.5</z>
		</Scale>
		<Link>
			<href>"             + _aircraft.Model + @"</href>
		</Link>
	</Model>
</Placemark>

<Placemark id='pin'>
	<name>"     + _aircraft.Model.ToString().Remove(_aircraft.Model.ToString().Length - 4) + @"</name>
    <styleUrl>#pushpin</styleUrl>
    <altitudeMode>absolute</altitudeMode>
	<MultiGeometry>
		<Point id='aircraftpin'>
            <altitudeMode>absolute</altitudeMode>
			<coordinates>4.73729753494263,52.2891273498535,10.668</coordinates>
		</Point>		
		<Polygon>
		</Polygon>
	</MultiGeometry>
</Placemark>
                    ");
        }
Example #15
0
        void m_sceneControl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            // 鼠标左键
            if (e.Button == System.Windows.Forms.MouseButtons.Left &&
                !Double.IsNaN(scontrol.Scene.PixelToGlobe(e.Location).X))
            {
                //RouteStop stop = new RouteStop();
                //TreeNode treeNode = new TreeNode();
                //m_treeView.Nodes[0].Nodes.Add(treeNode);
                //if (treeNode.Index > 0)
                //{
                //    treeNode.Text = GetStopName(treeNode.PrevNode.Text);
                //    //stop.Name = GetStopName(treeNode.PrevNode.Text);
                //}
                //else
                //{
                //    treeNode.Text = "Stop1";
                //    //stop.Name = "Stop1";

                //}
                //m_treeView.Nodes[0].ExpandAll();

                Point3D point3D = scontrol.Scene.PixelToGlobe(e.Location);
                point3D.Z = scontrol.Scene.GetAltitude(point3D.X, point3D.Y) + 30;
                m_point3Ds.Add(point3D);

                //stop.Camera = new Camera(point3D.X,point3D.Y,point3D.Z);



                GeoPoint3D geoPoint3D = new GeoPoint3D(point3D);
                geoPoint3D.Style3D = GetPointGeoStyle3D(geoPoint3D.Z);
                geoPoint3D.Z       = 0;

                //m_routeStops.Add(stop);

                scontrol.Scene.TrackingLayer.Add(geoPoint3D, m_pointName);
            }
            //鼠标右键,结束绘制,将实时生成的路线加到FlyManager中
            else if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                if (m_point3Ds.Count > 1)
                {
                    SetGeoLine3DToTrackingLayer(m_point3Ds.ToPoint2Ds(), 20);

                    m_flyManager.Routes.Add(GetRoute());
                }
                else
                {
                    ResumeDefault();
                }
                RegisterEvents(false);
            }
        }
        private void mSceneControlRemoveRangeMouseDown(object sender, MouseEventArgs e)
        {
            Point3D mPoint3D = new Point3D();

            mPoint3D   = mSceneControl.Scene.PixelToGlobe(e.Location, PixelToGlobeMode.TerrainAndModel);
            mPoint3D.Z = 0.5;
            DrawCirle(mPoint3D);
            mSceneControl.Action = Action3D.Pan2;
            mRemovePoint3D       = new GeoPoint3D(mPoint3D);
            DisplayRemovePoint();
        }
Example #17
0
        //获取障碍点
        private void btn_GetBarrierPoint_Click(object sender, EventArgs e)
        {
            if (m_sightLine != null)
            {
                int nCount = m_sightLine.GetTargetPointCount();
                for (int i = 0; i < nCount; i++)
                {
                    Sightline.SightlineResult result = m_sightLine.GetSightlineResult(i);
                    //if (!result.Visible)
                    //{
                    Point3D    pt3D       = result.BarrierPoint;
                    GeoPoint3D geoPoint3D = new GeoPoint3D(pt3D);
                    m_style3D.AltitudeMode      = AltitudeMode.Absolute;
                    m_style3D.MarkerSize        = 10;
                    m_style3D.MarkerFile        = @"../../SampleData/Analysis3D/BarrierPoint3D.png";
                    m_style3D.MarkerAnchorPoint = new Point2D(0.5, 0.5);
                    geoPoint3D.Style3D          = m_style3D;
                    String tag = "TargetPoint" + i;
                    int    id  = m_sceneControl.Scene.TrackingLayer.IndexOf(tag);
                    if (id < 0)
                    {
                        m_sceneControl.Scene.TrackingLayer.Add(geoPoint3D, tag);
                    }
                    else
                    {
                        m_sceneControl.Scene.TrackingLayer.Set(id, geoPoint3D);
                    }

                    //    Boolean isVisible = result.Visible;

                    //    TextStyle style = new TextStyle();
                    //    style.IsSizeFixed = true;
                    //    style.FontName = "隶书";
                    //    style.ForeColor = Color.Red;
                    //    style.FontScale = 2;

                    //    String str;
                    //    if (isVisible)
                    //    {
                    //        str = "可通视";
                    //    }
                    //    else
                    //    {
                    //        str = "不可通视";
                    //    }
                    //    GeoText3D text = new GeoText3D(new TextPart3D(str, m_sightLine.GetTargetPoint(i)), style);

                    //    //this.m_sceneControl.Scene.TrackingLayer.Add(text, "test" + i);
                    ////}

                    //}
                }
            }
        }
Example #18
0
        public void AddModel_Click(Point3D Point3D, int ModelIndex, string strID, string strNOID)
        {
            AddPointToDatasets(Point3D, ModelIndex, strID, strNOID);

            Datasource    datasource   = m_workspace.Datasources[0];
            DatasetVector pointDataset = datasource.Datasets["Point3D"] as DatasetVector;
            Recordset     recordset    = pointDataset.GetRecordset(false, CursorType.Dynamic);

            GeoPoint3D geopoint3D = new GeoPoint3D(Point3D);
            GeoStyle3D geoStyle   = new GeoStyle3D();

            geoStyle.MarkerSymbolID    = UserHelper.Marker3DSymbolID[ModelIndex];
            geoStyle.IsMarkerSizeFixed = false;
            geoStyle.MarkerSize        = 1;
            geoStyle.Marker3DScaleX    = 0.03;
            geoStyle.Marker3DScaleY    = 0.03;
            geoStyle.Marker3DScaleZ    = 0.08;
            geoStyle.IsMarker3D        = true;
            geoStyle.AltitudeMode      = AltitudeMode.RelativeToGround;
            geopoint3D.Style3D         = geoStyle;

            recordset.MoveLast();
            recordset.AddNew(geopoint3D);
            recordset.SetFieldValue(m_filedName, strID);
            recordset.Update();
            recordset.Dispose();

            m_layer3DPoint.IsSelectable = false;
            m_layer3DPoint.UpdateData();
            m_SceneControl.Scene.Refresh();

            //AddKmlLayer();

            //GeoPlacemark geoPlacemark = new GeoPlacemark();
            //m_geoModel = new GeoModel();
            //m_geoModel.FromFile(UserHelper.sModelName[ModelIndex]);
            ////人物模型朝向前进方向,如果原始方向一致则不需要旋转。
            //m_geoModel.Style3D = m_style3D;
            //m_geoModel.RotationZ = 180;
            //m_geoModel.ScaleX = 0.3;
            //m_geoModel.ScaleY = 0.3;
            //m_geoModel.ScaleZ = 0.3;
            //m_geoModel.Position = new Point3D(Point3D.X, Point3D.Y, Point3D.Z);
            //geoPlacemark.Geometry = m_geoModel;
            //Feature3Ds feture3Ds = m_LayerKML.Features;
            //Feature3D feature = new Feature3D();
            //feature.Geometry = geoPlacemark;
            //feature.Description = strID;
            //feature.Name = feature.Description;
            //feture3Ds.Add(feature);
            //feture3Ds.ToKMLFile(m_LayerKML.DataName);
            //m_LayerKML.UpdateData();
        }
        public void TrajectoryGeoPoint()
        {
            var reader = new TrajectoryFileReader(CoordinateUnit.metric);
            var obj    = reader.createTrajectoryFromFile(Globals.testdataDirectory + "test_track.dat");

            GeoPoint3D geopoint = obj.GeoPoint(2.5);

            Assert.IsNotNull(geopoint);
            Assert.AreEqual(52.287, geopoint.Latitude, 0.001);
            Assert.AreEqual(4.731, geopoint.Longitude, 0.001);
            Assert.AreEqual(101.974, geopoint.Z, 0.001);
        }
Example #20
0
        private void TracksWritePoint(string key, GeoPoint3D point)
        {
            if (!tracks.ContainsKey(key))
            {
                tracks.Add(key, new List <GeoPoint3D>());
            }

            tracks[key].Add(point);

            if (isTracksEmpty)
            {
                IsTracksEmpty = false;
            }
        }
 /// <summary>
 /// 设置终止点
 /// </summary>
 public void SetEndPoint(Point3D point3D)
 {
     try
     {
         ClearEndPoint();
         mSceneControl.Scene.Refresh();
         mEndPoint   = new GeoPoint3D(point3D);
         mEndPoint.Z = 1;
     }
     catch (Exception ex)
     {
         Trace.WriteLine(ex.Message);
     }
 }
        public string KMLSetup()
        {
            var        cameraHeading    = (_trajectory.Heading(0) - 40) % 360;
            GeoPoint3D aircraftLocation = _trajectory.GeoPoint(0);
            GeoPoint3D cameraLocation   = aircraftLocation.MoveInDirection(-1600, cameraHeading);

            return(@"
    <LookAt>
        <latitude>" + cameraLocation.Latitude + @"</latitude>
        <longitude>" + cameraLocation.Longitude + @"</longitude>
        <altitude>" + (cameraLocation.Z + 350) + @"</altitude>
        <altitudeMode>absolute</altitudeMode>
        <heading>" + cameraHeading + @"</heading>
        <tilt>" + 75 + @"</tilt>
    </LookAt>
            ");
        }
Example #23
0
        /// <summary>
        ///  Return a string in KML format containing all pre animation definitions
        ///  that are required for the population annoyance
        /// </summary>
        /// <returns></returns>
        public string KMLSetup()
        {
            int    houseId     = 0;
            string setupString = "";

            foreach (double[] row in _populationData)
            {
                houseId++;
                GeoPoint3D geoPoint    = _temporalGrid.GetGrid(0).GridGeoCoordinate(row[0], row[1]);
                var        coordinates = geoPoint.Longitude + "," + geoPoint.Latitude + ",0";
                setupString += @"
<Placemark>
	<Style>
        <IconStyle id=""house_iconstyle_" + houseId + @""">
            <scale>0.9</scale>
            <Icon>
                <href>" + ImageDefault + @"</href>
            </Icon>
        </IconStyle>
	</Style>
    <Point>
        <coordinates>" + coordinates + @"</coordinates>
    </Point>
</Placemark> 
                ";
            }

            // Load ImageAnnoyed into Google Earth memory
            setupString += @"
<Placemark>
	<Style>
        <IconStyle>
            <Icon>
                <href>" + ImageAnnoyed + @"</href>
            </Icon>
        </IconStyle>
	</Style>
    <Point>
        <coordinates></coordinates>
    </Point>
</Placemark> 
            ";

            return(setupString);
        }
        public void ConvertLatLongCustom()
        {
            int    referenceRdX    = 155000;
            int    referenceRdY    = 463000;
            double referenceWgs84X = 52.15517;
            double referenceWgs84Y = 5.387206;

            x = 122202;
            y = 487250;
            var    refPoint    = new Point3D(referenceRdX, referenceRdY, 0, CoordinateUnit.metric);
            var    conPoint    = new Point3D(x, y, 0, CoordinateUnit.metric);
            double heading     = refPoint.HeadingTo(conPoint);
            var    refGeoPoint = new GeoPoint3D(referenceWgs84Y, referenceWgs84X, 0);
            var    conGeoPoint = refGeoPoint.MoveInDirection(conPoint.DistanceTo(refPoint), heading);

            Assert.AreEqual(52.37214, conGeoPoint.Latitude, 0.001);
            Assert.AreEqual(4.905598, conGeoPoint.Longitude, 0.001);
        }
        /// <summary>
        /// 鼠标单击事件来实现画点的功能
        /// </summary>
        /// <param routestopName="sender"></param>
        /// <param routestopName="e"></param>
        private void m_sceneControl_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.Button == MouseButtons.Left && isDraw)
                {
                    //画点
                    if (!flag)
                    {
                        Datasource    datasource   = m_workspace.Datasources[0];
                        DatasetVector pointDataset = datasource.Datasets["Point3D"] as DatasetVector;
                        Recordset     recordset    = pointDataset.GetRecordset(false, CursorType.Dynamic);

                        Point3D pt3d = new Point3D();
                        pt3d = m_sceneControl.Scene.PixelToGlobe(e.Location, PixelToGlobeMode.TerrainAndModel);
                        GeoPoint3D geopoint3D = new GeoPoint3D(pt3d);

                        GeoStyle3D geoStyle = new GeoStyle3D();
                        geoStyle.MarkerSymbolID    = m_marker3DIndex;
                        geoStyle.IsMarkerSizeFixed = false;
                        geoStyle.MarkerSize        = 1;
                        geoStyle.Marker3DScaleX    = 1;
                        geoStyle.Marker3DScaleY    = 1;
                        geoStyle.Marker3DScaleZ    = 1;
                        geoStyle.IsMarker3D        = true;
                        geoStyle.AltitudeMode      = AltitudeMode.RelativeToGround;
                        geopoint3D.Style3D         = geoStyle;

                        recordset.MoveLast();
                        recordset.AddNew(geopoint3D);
                        recordset.Update();
                        recordset.Dispose();

                        m_layer3DPoint.IsSelectable = false;
                        m_layer3DPoint.UpdateData();
                        m_sceneControl.Scene.Refresh();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private String GetContourCoordinates(Grid grid, Contour contour)
        {
            var        coordinateString  = "";
            GeoPoint3D firstContourPoint = grid.GridGeoCoordinate(contour.Points[0].Location.X, contour.Points[0].Location.Y);
            GeoPoint3D contourPoint      = firstContourPoint;

            foreach (ContourPoint p in contour.Points)
            {
                contourPoint      = grid.GridGeoCoordinate(p.Location.X, p.Location.Y);
                coordinateString += contourPoint.Longitude + "," + contourPoint.Latitude + ",";
                coordinateString += "0\n";
            }
            if (!contour.IsClosed)
            {
                coordinateString += firstContourPoint.Longitude + "," + firstContourPoint.Latitude + ",";
                coordinateString += "0\n";
            }

            return(coordinateString);
        }
        private void Initialize()
        {
            mAnalyst          = new TransportationAnalyst();
            mAnalystParameter = new TransportationAnalystParameter();

            mStartPointTag = String.Empty;
            mStartPoint    = new GeoPoint3D();

            mEndPointTag = String.Empty;
            mEndPoint    = new GeoPoint3D();

            mStartPointTag = String.Empty;
            mStartPoint    = new GeoPoint3D();

            mGeoLineTag = String.Empty;
            mGeoLine    = new GeoLine();

            mSceneControl.Action = Action3D.Pan;
            mSceneControl.Scene.Refresh();
        }
        public string KMLAnimationStep(int t)
        {
            var        cameraHeading    = (_trajectory.Heading(t) - 40) % 360;
            GeoPoint3D aircraftLocation = _trajectory.GeoPoint(t);
            GeoPoint3D cameraLocation   = aircraftLocation.MoveInDirection(-1600, cameraHeading);

            if (t == 0)
            {
                return(@"
<gx:FlyTo>
    <gx:duration>1.0</gx:duration>
    <LookAt>
        <latitude>" + cameraLocation.Latitude + @"</latitude>
        <longitude>" + cameraLocation.Longitude + @"</longitude>
        <altitude>" + (cameraLocation.Z + 350) + @"</altitude>
        <altitudeMode>absolute</altitudeMode>
        <heading>" + cameraHeading + @"</heading>
        <tilt>" + 75 + @"</tilt>
    </LookAt>
</gx:FlyTo>
                ");
            }

            return(@"
<gx:FlyTo>
    <gx:duration>1.0</gx:duration>
    <gx:flyToMode>smooth</gx:flyToMode>
    <LookAt>
        <latitude>" + cameraLocation.Latitude + @"</latitude>
        <longitude>" + cameraLocation.Longitude + @"</longitude>
        <altitude>" + (cameraLocation.Z + 350) + @"</altitude>
        <altitudeMode>absolute</altitudeMode>
        <heading>" + cameraHeading + @"</heading>
        <tilt>" + 75 + @"</tilt>
    </LookAt>
</gx:FlyTo>
            ");
        }
Example #29
0
		/// <summary>
		/// 显示最终量算的结果
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		void TrackedHandler(object sender, Tracked3DEventArgs e)
		{
			try
			{
				// 清空临时结果
				m_point3Ds.Clear();
				m_curLength = 0.0;

				Geometry3D geometry = e.Geometry;
				Point3D textLocation = new Point3D(0, 0, 0);

				String text = String.Empty;
				if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance || SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainDistance)
				{
					//绘制量算线对象
					GeoLine3D geoLine3D = e.Geometry.Clone() as GeoLine3D;
					geoLine3D.Style3D = m_GeoStyle3D.Clone();
					if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance)
					{
						geoLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute;
						geoLine3D.Style3D.BottomAltitude = 100;
					}
					else
					{
						geoLine3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround;
					}
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoLine3D, m_MeasureDistanceTag);

					//绘制量算点对象
					Point3D point3D = Point3D.Empty;
					for (Int32 i = 0; i < geoLine3D.PartCount; i++)
					{
						for (Int32 j = 0; j < geoLine3D[i].Count; j++)
						{
							GeoPoint3D geoPoint3D = new GeoPoint3D(geoLine3D[i][j]);
							geoPoint3D.Style3D = m_GeoStyle3D.Clone();
							if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance)
							{
								geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute;
								geoPoint3D.Style3D.BottomAltitude = 100;
							}
							else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainDistance)
							{
								geoPoint3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround;
							}
							SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, m_MeasureDistanceTag);
							point3D = geoLine3D[i][j];
						}
					}

					//量算结果
					int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(m_messageTrackingTag);
					if (index >= 0)
					{
						SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index);
					}

					// 添加结果文字
					if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance)
					{
						text = String.Format("{0}{1}{2}", "空间距离:", Math.Round(Convert.ToDecimal(e.Length), 2), "米");
					}
					else
					{
						text = String.Format("{0}{1}{2}", "依地距离:", Math.Round(Convert.ToDecimal(e.Length), 2), "米");
					}

					textLocation = geoLine3D[0][geoLine3D[0].Count - 1];
					GeoText3D geoText = new GeoText3D(new TextPart3D(text, textLocation));
					SetResultTextStyle(geoText);
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, m_MeasureDistanceTag);

					//计算首尾点高度差
					Point3Ds point3Ds = geoLine3D[0];
					double height = point3Ds[point3Ds.Count - 1].Z - point3Ds[0].Z;

					//m_formMain.ClearOutputMessage();
					//m_formMain.OutputMessage(text);
					//String message = string.Format("首尾点高度差为:{0}米。", height.ToString("##.00"));
					//m_formMain.OutputMessage(message);
				}

				else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea || SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainArea)
				{
					//绘制量算面对象
					GeoRegion3D geoRegion3D = e.Geometry as GeoRegion3D;
					//绘制量算面对象
					geoRegion3D.Style3D = m_GeoStyle3D.Clone();
					if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea)
					{
						geoRegion3D.Style3D.AltitudeMode = AltitudeMode.Absolute;
						geoRegion3D.Style3D.BottomAltitude = 100;
					}
					else
					{
						geoRegion3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround;
					}
					geoRegion3D.Style3D.FillForeColor = Color.FromArgb(120, 250, 250, 50);
					ClearTextMessageTag();
					int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(m_messageTrackingTag);
					if (index >= 0)
					{
						SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index);
					}
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoRegion3D, "Measure_geoRegion3D");

					//绘制量算点对象
					for (Int32 i = 0; i < geoRegion3D.PartCount; i++)
					{
						for (Int32 j = 0; j < geoRegion3D[i].Count; j++)
						{
							GeoPoint3D geoPoint3D = new GeoPoint3D(geoRegion3D[i][j]);
							geoPoint3D.Style3D = m_GeoStyle3D.Clone();
							if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea)
							{
								geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute;
							}
							else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainArea)
							{
								geoPoint3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround;
							}
							SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, m_MeasureAreaTag + i.ToString() + j.ToString());
						}
					}

					ClearTextMessageTag();

					//量算结果
					if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea)
					{
						m_strResult = String.Format("{0}{1}{2}", "空间面积:", Math.Round(Convert.ToDecimal(e.Area), 2), "平方米");
					}
					else
					{
						m_strResult = String.Format("{0}{1}{2}", "依地面积:", Math.Round(Convert.ToDecimal(e.Area), 2), "平方米");
					}
					GeoText3D text3d = GetGeoText3DMessage();
					text3d[0].Text = m_strResult;
					text3d[0].X = geoRegion3D.InnerPoint3D.X;
					text3d[0].Y = geoRegion3D.InnerPoint3D.Y;
					text3d[0].Z = geoRegion3D.InnerPoint3D.Z;

					GeoText3D geoText = new GeoText3D(text3d);
					// 添加结果文字
					SetResultTextStyle(geoText);
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, m_MeasureAreaTag);

					//m_formMain.ClearOutputMessage();
					//m_formMain.OutputMessage(m_strResult);
				}

				else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureAltitude)
				{
					//绘制量算线对象
					GeoLine3D geoLine3D = e.Geometry as GeoLine3D;
					geoLine3D.Style3D = m_GeoStyle3D.Clone();
					geoLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute;
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoLine3D, "Measure_Altitude");
					// 添加结果文字
					text = String.Format("{0}{1}{2}", "高度:", Math.Round(Convert.ToDecimal(e.Height), 2), "米");
					textLocation = geoLine3D[0][geoLine3D[0].Count - 1];
					GeoText3D geoText = new GeoText3D(new TextPart3D(text, textLocation));
					SetResultTextStyle(geoText);
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, "Measure_Altitude");

					//输出首尾点高度
					Point3Ds point3Ds = geoLine3D[0];
					double startHeight = point3Ds[0].Z;
					double endHeight = point3Ds[1].Z;
					string message = string.Format("首点高度为:{0}米。", startHeight.ToString("##.00"));

					//m_formMain.ClearOutputMessage();
					//m_formMain.OutputMessage(message);
					//message = string.Format("尾点高度为:{0}米。", endHeight.ToString("##.00"));
					//m_formMain.OutputMessage(message);

					//绘制量算点对象
					for (Int32 i = 0; i < geoLine3D.PartCount; i++)
					{
						for (Int32 j = 0; j < geoLine3D[i].Count; j++)
						{
							GeoPoint3D geoPoint3D = new GeoPoint3D(geoLine3D[i][j]);
							geoPoint3D.Style3D = m_GeoStyle3D.Clone();
							geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute;
							SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, m_MeasureAltitudeTag + j.ToString());
						}
					}
					ClearTextMessageTag();
					if (!(Toolkit.IsZero(m_curAltitude)))
					{
						EndOneMeasure();
					}
				}

				else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureHorizontalDistance)
				{
					// 结果线
					GeoLine3D resLine3D = e.Geometry as GeoLine3D;
					resLine3D.Style3D = m_GeoStyle3D.Clone();
					resLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute;


					// 结果点
					Point3Ds resPoints = resLine3D[0];
					for (Int32 i = 0; i < resPoints.Count; i++)
					{
						GeoPoint3D geoPoint = new GeoPoint3D(resPoints[i]);
						SetGeometry3DStyle(geoPoint);
						SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint, "Measure_Geometry" + i.ToString());
					}

					EndOneMeasure();
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(resLine3D, "Measure_Geometry");

					// 添加结果文字
					text = String.Format("{0}{1}{2}", "总长度: ", Math.Round(Convert.ToDecimal(e.Length), 2), "米");
					GeoLine3D line = (geometry as GeoLine3D);
					textLocation = line[0][line[0].Count - 2];

					//ClearTextMessageTag();
					int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(m_messageTrackingTag);
					if (index >= 0)
					{
						SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index);
					}
					GeoText3D geoText = new GeoText3D(new TextPart3D(text, textLocation));
					SetResultTextStyle(geoText);

					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, "MeasureResult");

					//m_formMain.ClearOutputMessage();
					//m_formMain.OutputMessage(text);

					//计算首尾点高度差
					Point3Ds point3Ds = resLine3D[0];
					double height = point3Ds[point3Ds.Count - 1].Z - point3Ds[0].Z;
					string message = string.Format("首尾点高度差为:{0}米。", height.ToString("##.00"));
					//m_formMain.OutputMessage(message);
				}
			}
			catch (Exception ex)
			{
				Trace.WriteLine(ex.Message);
			}
			finally
			{
				m_label.Visible = false;
			}
		}
 public CustomMapKMLAnimator(string mapFile, GeoPoint3D bottomLeft, GeoPoint3D upperRight)
 {
     _mapFile    = mapFile;
     _bottomLeft = bottomLeft;
     _upperRight = upperRight;
 }
        //绘制线触发的事件
        private void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e)
        {
            Recordset recordset;

            Double lineWidth    = 0.0;
            Double bottomheight = 0;

            try
            {
                if (flag)
                {
                    if (!isRegion)
                    {
                        GeoLine3D geoLine3D = e.Geometry as GeoLine3D;

                        GeoStyle3D geoStyle = new GeoStyle3D();

                        geoStyle.LineSymbolID   = m_line3DIndex;
                        geoStyle.LineWidth      = lineWidth;
                        geoStyle.AltitudeMode   = AltitudeMode.RelativeToGround;
                        geoStyle.BottomAltitude = bottomheight;

                        geoLine3D.Style3D = geoStyle;

                        recordset = m_datasetLine3D.GetRecordset(false, CursorType.Dynamic);
                        recordset.AddNew(geoLine3D);
                        recordset.Update();
                        recordset.Dispose();

                        m_layer3DLine.UpdateData();
                        m_sceneControl.Scene.Refresh();
                    }
                    else
                    {
                        if (ispointRegion)
                        {
                            GeoRegion3D geoRegion3D = e.Geometry as GeoRegion3D;

                            if (geoRegion3D.PartCount > 0)
                            {
                                Rectangle2D   rect         = geoRegion3D.Bounds;
                                Datasource    datasource   = m_workspace.Datasources[0];
                                DatasetVector pointDataset = datasource.Datasets["Point3D"] as DatasetVector;


                                for (double y = geoRegion3D.Bounds.Bottom; y < geoRegion3D.Bounds.Top;)
                                {
                                    for (double x = geoRegion3D.Bounds.Left; x < geoRegion3D.Bounds.Right;)
                                    {
                                        recordset = pointDataset.GetRecordset(false, CursorType.Dynamic);

                                        Point3D pt3d = new Point3D();
                                        pt3d.X = x;
                                        pt3d.Y = y;
                                        pt3d.Z = 0;
                                        GeoPoint3D geopoint3D = new GeoPoint3D(pt3d);

                                        GeoStyle3D geoStyle = new GeoStyle3D();
                                        geoStyle.MarkerSymbolID    = m_marker3DIndex;
                                        geoStyle.IsMarkerSizeFixed = false;
                                        geoStyle.MarkerSize        = 1;
                                        geoStyle.Marker3DScaleX    = 1;
                                        geoStyle.Marker3DScaleY    = 1;
                                        geoStyle.Marker3DScaleZ    = 1;
                                        geoStyle.IsMarker3D        = true;
                                        geoStyle.AltitudeMode      = AltitudeMode.RelativeToGround;
                                        geopoint3D.Style3D         = geoStyle;

                                        recordset.MoveLast();
                                        recordset.AddNew(geopoint3D);
                                        recordset.Update();
                                        recordset.Dispose();

                                        m_layer3DPoint.IsSelectable = false;
                                        m_layer3DPoint.UpdateData();
                                        m_sceneControl.Scene.Refresh();

                                        x += 0.0002;
                                    }
                                    y += 0.0002;
                                }
                            }
                        }
                        else
                        {
                            Datasource    datasource      = m_workspace.Datasources[0];
                            DatasetVector Region3DDataset = datasource.Datasets["Region3D"] as DatasetVector;
                            recordset = Region3DDataset.GetRecordset(false, CursorType.Dynamic);

                            GeoRegion3D geoRegion = e.Geometry as GeoRegion3D;
                            GeoStyle3D  geoStyle  = new GeoStyle3D();


                            geoStyle.FillSymbolID = m_region3DIndex;

                            geoStyle.AltitudeMode   = AltitudeMode.RelativeToGround;
                            geoStyle.BottomAltitude = 0.5;

                            geoRegion.Style3D = geoStyle;
                            recordset.AddNew(geoRegion);
                            recordset.Update();
                            recordset.Dispose();

                            (m_layer3DRegion.AdditionalSetting as Layer3DSettingVector).Style = geoStyle;

                            m_layer3DRegion.UpdateData();
                            m_sceneControl.Scene.Refresh();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #32
0
 public VLBLTDOAMeasurement(double lat, double lon, double dpt, double toaS, GeoPoint3D refPoint)
     : base(lat, lon, dpt, toaS)
 {
     UpdateRefPoint(refPoint);
 }
		/// <summary>
		/// 高亮显示要素并显示要素详情
		/// </summary>
		/// <param name="p"></param>
		/// <param name="fid"></param>
		private void HighLightFeature(GeoPoint3D p, int fid)
		{
			if (p != null)
			{
				string tag = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.GetTag(fid);
				if (this.lastGPot == null)
				{
					this.lastGPot = p;
					this.lastTag = tag;
					this.lastIndex = fid;
				}
				else if (p != this.lastGPot)
				{
					this.lastGPot.Style3D = normalStyle;
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Set(this.lastIndex, this.lastGPot);
					SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.SetTag(this.lastIndex, this.lastTag);
				}

				p.Style3D = highLightStyle;
				SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Set(fid, p);
				SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.SetTag(fid, tag);

				this.lastGPot = p;
				this.lastTag = tag;
				this.lastIndex = fid;

				//显示要素详情
				ShowMarkDetailInfo(tag);

				//显示要素多媒体信息
				LoadFeatureMedias(tag, "IMAGE");
				LoadFeatureMedias(tag, "VIDEO");
			}
		}
		/// <summary>
		/// 在地图上初始化显示查询结果列表
		/// </summary>
		private void InitQueryListOnMap()
		{
			//清空追踪图层数据
			this.measureUtil.ClearAllResult(QUERY);

			ObservableCollection<QueryRecordVO> recordList = SysModelLocator.getInstance().recordList;
			if (recordList.Count > 0)
			{
				double centerX = 0.0;
				double centerY = 0.0;
				double heightZ = defaultHeight;

				double minX = 0;
				double minY = 0;
				double maxX = 0;
				double maxY = 0;
				for (int i = 0; i < recordList.Count; i++)
				{
					QueryRecordVO vo = vo = recordList[i];
					if (Double.TryParse(vo.RecordCenterX, out centerX) == true && Double.TryParse(vo.RecordCenterY, out centerY) == true)
					{
						GeoPoint3D gpt = new GeoPoint3D(centerX, centerY, heightZ);
						gpt.Style3D = normalStyle;
						SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(gpt, string.Format("{0}#{1}#{2}", vo.RecordName, vo.RecordIndex, QUERY));

						if (minX == 0)
						{
							minX = centerX;
							minY = centerY;
							maxX = centerX;
							maxY = centerY;
						}
						else
						{
							minX = Math.Min(minX, centerX);
							minY = Math.Min(minY, centerY);
							maxX = Math.Max(maxX, centerX);
							maxY = Math.Max(maxY, centerY);
						}
					}
				}
				Rectangle2D rect2D = new Rectangle2D(minX - 0.05, minY - 0.05, maxX + 0.05, maxY + 0.05);
				SmObjectLocator.getInstance().GlobeObject.Scene.EnsureVisible(rect2D, 500);
			}
		}
		/// <summary>
		/// 初始化要素图标样式
		/// </summary>
		private void InitGeoPoint3DParams(bool isReset = false)
		{
			if (isReset)
			{
				this.lastGPot = null;
				this.lastTag = "";
				this.lastIndex = -1;
			}
			else
			{
				GeoStyle3D sty3D = new GeoStyle3D();
				sty3D.MarkerFile = "Images/point.png";
				sty3D.MarkerScale = defaultScale;
				sty3D.MarkerSize = 32;
				sty3D.AltitudeMode = AltitudeMode.ClampToGround;
				normalStyle = sty3D;

				GeoStyle3D sty3DHigh = new GeoStyle3D();
				sty3DHigh.MarkerFile = "Images/bluepot.png";
				sty3DHigh.MarkerScale = defaultScale * 1.5;
				sty3DHigh.MarkerSize = 32;
				sty3DHigh.AltitudeMode = AltitudeMode.ClampToGround;
				highLightStyle = sty3DHigh;
			}
		}