public bool LoadPolygon(int mission_id)
        {
            bool result = false;

            if (DataSettings.UseDatabase)
            {
                DateTime        dt   = DateTime.Now;
                MySqlConnection conn = DataSettings.GetConnection();
                using (MySqlCommand cmd = new MySqlCommand(null, conn))
                {
                    //clear old marker
                    GMapOverlay overlay = Main.GetOverlay("polygons");
                    foreach (int id in Polygons.Keys)
                    {
                        var dat = Polygons[id];
                        overlay.Markers.Remove((GmapMarkerWithLabel)dat.Polygon.Tag);
                        overlay.Polygons.Remove(dat.Polygon);
                    }
                    Polygons.Clear();
                    //load polygon area
                    cmd.CommandText = "SELECT * FROM polygon_info WHERE mission_id = @mission_id";
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("mission_id", mission_id);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            int      id       = reader.GetInt32("area_id");
                            string   name     = reader.GetString("area_name");
                            int      property = reader.GetInt32("area_property");
                            AreaInfo ainfo    = new AreaInfo(mission_id, id, name, property);
                            Polygons.Add(id, ainfo);
                        }
                    }
                    //load polygon point
                    foreach (int id in Polygons.Keys)
                    {
                        AreaInfo ainfo = Polygons[id];
                        Dictionary <int, PointLatLng> points = new Dictionary <int, PointLatLng>();
                        cmd.CommandText = "SELECT * FROM polygon_point WHERE area_id = @id";
                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("id", id);
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                int         point_id = reader.GetInt32("point_id");
                                double      lat      = reader.GetDouble("point_lat");
                                double      lng      = reader.GetDouble("point_lng");
                                PointLatLng point    = new PointLatLng(lat, lng);
                                points.Add(point_id, point);
                            }
                        }
                        ainfo.SetPoints(points);
                        ainfo.Polygon = CreatePolygon(ainfo.Name, ainfo.GetPoints(), ainfo.Property);
                    }
                }
            }
            return(result);
        }
        public void LoadJson(string json)
        {
            Clear();
            MPWrapper wrapper = JsonConvert.DeserializeObject <MPWrapper>(json);

            this.Markers  = new Dictionary <int, SymbolInfo>(wrapper.Markers);
            this.Polygons = new Dictionary <int, AreaInfo>(wrapper.Polygons);
            foreach (int id in Markers.Keys)
            {
                SymbolInfo sinfo = Markers[id];
                sinfo.Marker = MarkSymbol(sinfo.ImgID, sinfo.Name, sinfo.Point, sinfo.ID);
            }
            foreach (int id in Polygons.Keys)
            {
                AreaInfo ainfo = Polygons[id];
                ainfo.Polygon = CreatePolygon(ainfo.Name, ainfo.GetPoints(), ainfo.Property);
            }
        }