Ejemplo n.º 1
0
 /// <summary>
 /// 终止命令
 /// </summary>
 public void ReleaseCommond()
 {
     if (mapControl != null)
     {
         mapControl.CanDragMap      = true;
         mapControl.OnPolygonEnter -= mapControl_OnPolygonEnter;
         mapControl.OnPolygonLeave -= mapControl_OnPolygonLeave;
         mapControl.OnMarkerEnter  -= mapControl_OnMarkerEnter;
         mapControl.OnMarkerLeave  -= mapControl_OnMarkerLeave;
         mapControl.MouseDown      -= mapControl_MouseDown;
         mapControl.MouseMove      -= mapControl_MouseMove;
         mapControl.MouseUp        -= mapControl_MouseUp;
         mapControl.DoubleClick    -= mapControl_DoubleClick;
         mapControl.KeyDown        -= mapControl_KeyDown;
         mapControl.Overlays.Remove(overlay);
         mapControl.Refresh();
         mapControl = null;
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 鼠标单击,开始测量
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void gmapControl_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && gmapControl.CanDragMap == false)
            {
                if (isFinish == true)
                {
                    foreach (var item in markerList)
                    {
                        mapOverlay.Markers.Remove(item);
                    }

                    mapOverlay.Routes.Remove(lineRoute);
                    isFinish = false;
                    //ReleaseCommond();
                    //return;
                }

                string name   = string.Format("point_{0}", pointIndex);
                var    lngLat = gmapControl.FromLocalToLatLng(e.X, e.Y);

                if (pointIndex == 0)   // 第一个点
                {
                    // 加点
                    marker             = new EditMarker(lngLat);
                    marker.ToolTipMode = MarkerTooltipMode.Always;
                    marker.ToolTipText = string.Format("起点\n经度:{0}\n纬度:{1}\n", Math.Round(lngLat.Lng, 6), Math.Round(lngLat.Lat, 6));
                    mapOverlay.Markers.Add(marker);
                    marker.ToolTip.Format.Alignment = StringAlignment.Near;

                    // 加线
                    KmlLineString linekml = new KmlLineString();
                    linekml.Color = Color.Green;
                    linekml.Width = 3;
                    List <MapLngLat> pList = new List <MapLngLat>();
                    pList.Add(new MapLngLat(lngLat.Lng, lngLat.Lat));
                    linekml.PositionList = pList;
                    lineRoute            = new Line_GMap("measure_line", linekml);
                    mapOverlay.Routes.Add(lineRoute);

                    pointIndex++;
                }
                else
                {
                    pointIndex++;

                    // 添加点
                    lineRoute.Points.Add(lngLat);
                    lineRoute.AddPoint(new MapLngLat(lngLat.Lng, lngLat.Lat));
                    gmapControl.Refresh();

                    // 添加Marker
                    marker = new EditMarker(lngLat);
                    mapOverlay.Markers.Add(marker);
                    distance           = lineRoute.Distance;
                    distance           = Math.Round(distance, 3);
                    marker.ToolTipMode = MarkerTooltipMode.Always;
                    marker.ToolTipText = string.Format("点{0}\n经度:{1}\n纬度:{2}\n距离:{3}(公里)", pointIndex, Math.Round(lngLat.Lng, 6), Math.Round(lngLat.Lat, 6), distance);
                    marker.ToolTip.Format.Alignment = StringAlignment.Near;
                }
                markerList.Add(marker);
            }
        }
Ejemplo n.º 3
0
        public void Run(GMapControl gMap, List <Geo.Gps.Track> tracks, TracksOptimiserOptions options)
        {
            if (tracks == null)
            {
                return;
            }
            this.gMap    = gMap;
            this.options = options;

            int minPixels = 10;

            switch (options.TracksStyles)
            {
            case TracksStyles.Simple: minPixels = 3; break;

            case TracksStyles.With_background: minPixels = 7; break;

            default: break;
            }

            double      minimimDistance = minPixels /* at least 3 pixels */ * gMap.ViewArea.WidthLng / gMap.Size.Width;
            int         oldCount = 0, newCount = 0;
            GMapOverlay tracksPolygonsOverlay  = FindOverlay(Constants.TracksPolygonsId, gMap);
            GMapOverlay tracksPolygons2Overlay = FindOverlay(Constants.TracksPolygons2Id, gMap);
            GMapOverlay tracksPolygons3Overlay = FindOverlay(Constants.TracksPolygons3Id, gMap);

            if (tracksPolygonsOverlay == null)
            {
                tracksPolygonsOverlay  = new GMapOverlay(Constants.TracksPolygonsId);
                tracksPolygons2Overlay = new GMapOverlay(Constants.TracksPolygons2Id);
                tracksPolygons3Overlay = new GMapOverlay(Constants.TracksPolygons3Id);

                gMap.Overlays.Add(tracksPolygons3Overlay);
                gMap.Overlays.Add(tracksPolygons2Overlay);
                gMap.Overlays.Add(tracksPolygonsOverlay);
            }

            tracksPolygonsOverlay.Routes.Clear();
            tracksPolygons2Overlay.Routes.Clear();
            tracksPolygons3Overlay.Routes.Clear();

            foreach (var track in tracks)
            {
                Geo.Gps.Fix lastPoint = track.GetFirstFix();
                string      tagName   = lastPoint.TimeUtc.ToShortDateString() + " " + lastPoint.TimeUtc.ToShortTimeString();
                if (track.Metadata.ContainsKey("name"))
                {
                    tagName += "; " + track.Metadata["name"].ToString();
                }
                if (track.Metadata.ContainsKey("filename"))
                {
                    tagName += "; " + track.Metadata["filename"].ToString();
                }

                // add route for each segment, segments may be separate
                foreach (var segment in track.Segments)
                {
                    List <PointLatLng> mapPoints = new List <PointLatLng>();
                    lastPoint = segment.GetFirstFix();
                    mapPoints.Add(new PointLatLng(lastPoint.Coordinate.Latitude, lastPoint.Coordinate.Longitude));

                    foreach (var point in segment.Fixes)
                    {
                        if (AddPoint(mapPoints, lastPoint, point, minimimDistance, tagName))
                        {
                            lastPoint = point;
                            newCount++;
                        }

                        oldCount++;
                    }

                    // always add last point, single gpx file may be divided by tracks
                    if (segment.GetLastFix() != lastPoint)
                    {
                        Geo.Gps.Fix newPoint = segment.GetLastFix();
                        mapPoints.Add(new PointLatLng(newPoint.Coordinate.Latitude, newPoint.Coordinate.Longitude));
                    }

                    if (mapPoints.Count > 1)
                    {
                        AddRoute(mapPoints, tagName);
                    }
                }
            }

            double ratio = (double)newCount / oldCount * 100;

            Info = "Map points: " + newCount + " (" + ratio.ToString("F0") + "%)";

            gMap.Refresh();
        }
Ejemplo n.º 4
0
 internal void RefreshGMapMini()
 {
     gMapMini.BeginInvoke((MethodInvoker)(() => gMapMini.Refresh()));
 }
Ejemplo n.º 5
0
 internal void RefreshGMapMain()
 {
     gMap.BeginInvoke((MethodInvoker)(() => gMap.Refresh()));
 }
Ejemplo n.º 6
0
        private void PopulateMarkers()
        {
            RemoveAllMarkers();
            int nSamplesShown = 0;

            SqlConnection conn = null;

            try
            {
                conn = DB.OpenConnection();

                string     query = @"
select s.latitude, s.longitude, st.name as 'sample_type_name'
from sample s
    inner join sample_type st on st.id = s.sample_type_id
where number = @id
";
                SqlCommand cmd   = new SqlCommand(query, conn);

                foreach (int id in mSampleList)
                {
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@id", id);
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            reader.Read();

                            if (DB.IsValidField(reader["latitude"]) && DB.IsValidField(reader["longitude"]))
                            {
                                double     lat    = reader.GetDouble("latitude");
                                double     lon    = reader.GetDouble("longitude");
                                string     stype  = reader.GetString("sample_type_name");
                                GMapMarker marker = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(
                                    new PointLatLng(lat, lon),
                                    GMap.NET.WindowsForms.Markers.GMarkerGoogleType.yellow_pushpin);

                                marker.ToolTipText = "Sample: " + id + Environment.NewLine +
                                                     "Sample type: " + stype + Environment.NewLine +
                                                     "Latitude: " + lat + Environment.NewLine +
                                                     "Longitude: " + lon;
                                overlay.Markers.Add(marker);
                                nSamplesShown++;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Common.Log.Error(ex);
                MessageBox.Show(ex.Message);
                return;
            }
            finally
            {
                conn?.Close();
            }

            lblInfo.Text = mSampleList.Count + " samples, showing " + nSamplesShown + " with coordinates";
            gmap.Refresh();
        }
Ejemplo n.º 7
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (AirportMarkerDetails.airportOpen && buttonClick == 0)
            {
                if (txtName.Text != "" &&
                    txtLabel.Text != "" &&
                    txtLocation.Text != "" &&
                    txtType.Text != "" &&
                    txtCountry.Text != "" &&
                    txtProvince.Text != ""
                    )
                {
                    if (txtLabel.TextLength <= 4 && txtType.TextLength <= 4)
                    {
                        PointLatLng point = new PointLatLng(AirportMarkerDetails.Lattitude, AirportMarkerDetails.Lngtitude);
                        //Bitmap bmpMarker = (Bitmap)Image.FromFile("/Airport.png");
                        GMapMarker  marker         = new GMarkerGoogle(point, GMarkerGoogleType.blue);
                        GMapOverlay markersOverlay = mainForm.GetInstance().GetOverlay("markersP");

                        //Allmarkers.Add(marker, details);
                        marker.Tag         = temp += 1;
                        marker.ToolTipText = "\n" + txtName.Text + "\n" + txtLabel.Text;
                        marker.ToolTipMode = MarkerTooltipMode.OnMouseOver;
                        markersOverlay.Markers.Add(marker);
                        map.Overlays.Add(markersOverlay);
                        ListMarkerdetail.nameMarker.Add(txtName.Text);
                        ListMarkerdetail.labelMarker.Add(txtLabel.Text);
                        ListMarkerdetail.province.Add(txtProvince.Text);
                        ListMarkerdetail.country.Add(txtCountry.Text);
                        ListMarkerdetail.typeAirport.Add(txtType.Text);
                        ListMarkerdetail.LatLng.Add(txtLocation.Text);
                        ListMarkerdetail.Tag.Add(Convert.ToInt32(marker.Tag));
                        MessageBox.Show("ADD Completed", "ADD");
                        blankData();
                        //test
                    }
                    else
                    {
                        MessageBox.Show("only 4 character for Label and Type");
                    }
                }
                else
                {
                    MessageBox.Show("Please complete all infomation");
                }
            }
            else if (AirportMarkerDetails.airportOpen && buttonClick == 1)
            {
                //EDIT
                if (ListMarkerdetail.LatLng[indCurrentMarker] != txtLocation.Text)
                {
                    GMapOverlay markersOverlay = mainForm.GetInstance().GetOverlay("markersP");
                    markersOverlay.Markers.Remove(CurrentMarkersSelect);

                    PointLatLng point  = new PointLatLng(AirportMarkerDetails.Lattitude, AirportMarkerDetails.Lngtitude);
                    GMapMarker  marker = new GMarkerGoogle(point, GMarkerGoogleType.blue);

                    //Allmarkers.Add(marker, details);
                    marker.Tag         = indCurrentMarker;
                    marker.ToolTipText = "\n" + txtName.Text + "\n" + txtLabel.Text;
                    marker.ToolTipMode = MarkerTooltipMode.OnMouseOver;
                    markersOverlay.Markers.Add(marker);
                    map.Overlays.Add(markersOverlay);
                    editData();
                    MessageBox.Show("EDIT Completed", "EDIT");
                    blankData();
                }
                else
                {
                    CurrentMarkersSelect.ToolTipText = "\n" + txtName.Text + "\n" + txtLabel.Text;
                    CurrentMarkersSelect.ToolTipMode = MarkerTooltipMode.OnMouseOver;
                    editData();
                    MessageBox.Show("EDIT Completed", "EDIT");
                    blankData();
                }
            }
            else
            {
                GMapOverlay markersOverlay = mainForm.GetInstance().GetOverlay("markersP");
                markersOverlay.Markers.Remove(CurrentMarkersSelect);
                ListMarkerdetail.nameMarker.RemoveAt(indMarkerDel);
                ListMarkerdetail.labelMarker.RemoveAt(indMarkerDel);
                ListMarkerdetail.province.RemoveAt(indMarkerDel);
                ListMarkerdetail.country.RemoveAt(indMarkerDel);
                ListMarkerdetail.typeAirport.RemoveAt(indMarkerDel);
                ListMarkerdetail.LatLng.RemoveAt(indMarkerDel);
                ListMarkerdetail.Tag.RemoveAt(indMarkerDel);
                blankData();
                map.Refresh();
            }
        }