示例#1
0
        public void ActivateMapPin()
        {
            MapPinData pinData = null;

            foreach (var item in AppData.Discount.MapPinCollection)
            {
                if (item.Id == AppData.Discount.ActiveMapPinId)
                {
                    pinData = item;
                    break;
                }
            }

            AppData.Discount.ActiveMapPinId = "";

            if (pinData == null)
            {
                return;
            }

            (ViewPage as MainPage).MapLocation.MoveToRegion(MapSpan.FromCenterAndRadius(
                                                                new Position(pinData.Latitude, pinData.Longitude),
                                                                Distance.FromKilometers(2)));
            (ViewPage as MainPage).MapLocation.ShowPinDetailInfo(pinData.Id);
        }
示例#2
0
        void pinMarker_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            var map     = Control;
            var mapTile = (MapTile)Element;

            PinMarker pinMarker = sender as PinMarker;

            tapMarker = pinMarker;
            MapPinData data = pinMarker.DataContext as MapPinData;

            var centerLocation = new System.Device.Location.GeoCoordinate(Math.Round(map.Center.Latitude, 4), Math.Round(map.Center.Longitude, 4));
            var pinLocation    = new System.Device.Location.GeoCoordinate(Math.Round(data.Latitude, 4), Math.Round(data.Longitude, 4));

            //map.Center = pinLocation;
            //mapTile.ShowDetailInfo(data.Id);
            if (centerLocation == pinLocation)
            {
                mapTile.ShowPinDetailInfo(data.Id);
            }
            else
            {
                map.ViewChanged += map_ViewChanged;
                map.SetView(pinLocation, map.ZoomLevel, MapAnimationKind.Linear);
            }
        }
示例#3
0
        async public void ShowPinDetailInfo(string id)
        {
            MapPinData cutPinData = null;

            foreach (var item in PinList)
            {
                if (item.Id == id)
                {
                    cutPinData = item;
                    break;
                }
            }

            if (cutPinData == null)
            {
                return;
            }

            _isShowDetailInfo = true;

            if (Context != null)
            {
                mapPinDetail.DiscountCaption = Context.TxtDiscount;
                mapPinDetail.DistanceIcon    = Context.ImgDistance;
                mapPinDetail.DistanceCaption = Context.TxtDistanceScaleValue;
                mapPinDetail.DetailIcon      = Context.ImgDetail;
            }

            string categoryName  = "";
            Color  categoryColor = Color.Black;

            if (CategoryHelper.CategoryList.ContainsKey(cutPinData.PrimaryCategory.TypeCode))
            {
                var categoryParam = CategoryHelper.CategoryList[cutPinData.PrimaryCategory.TypeCode];
                categoryName  = categoryParam.Name;
                categoryColor = categoryParam.ColorTheme;
            }

            mapPinDetail.DiscountValue = cutPinData.Discount + "%";
            mapPinDetail.CategoryName  = CategoryHelper.GetName(cutPinData.PrimaryCategory.TypeCode);
            mapPinDetail.CategoryColor = CategoryHelper.GetColorTheme(cutPinData.PrimaryCategory.TypeCode);
            mapPinDetail.Title         = cutPinData.Name + ".";
            mapPinDetail.DistanceValue = cutPinData.Distance;
            await mapPinDetail.Show();

            var tapPinDetail = new TapGestureRecognizer();

            tapPinDetail.Tapped += async(sender, e) =>
            {
                await CloseDetailInfo();

                OnClickPinDetail(new MapPinDataEventArgs(cutPinData));
            };
            mapPinDetail.TapPinDetail = tapPinDetail;
        }
示例#4
0
        private static Task <List <MapPinData> > LoadMapData(
            IEnumerable <Discount> discountsTable,
            IEnumerable <Contact> contactsTable,
            IReadOnlyCollection <DiscountCategory> discountCategoriesTable,
            IReadOnlyCollection <DiscountsStrings> discountsStringsTable,
            IReadOnlyCollection <LangString> langStringsTable)
        {
            var result = new List <MapPinData>();

            var contactList = contactsTable.Join(discountsTable, i => i.DiscountId, i => i.Id,
                                                 (c, d) => new
            {
                d.Id,
                c.DocumentId,
                PartnerId = d.DocumentId,
                c.Latitude,
                c.Longitude,
                d.PercentValue,
                d.DiscountType
            });

            foreach (var contactRec in contactList)
            {
                var categories = discountCategoriesTable.Where(i => i.DiscountId == contactRec.Id)
                                 .Join(AppData.Discount.CategoryCollection, i => i.CategoryId, i => i.DocumentId, (dc, c) => c)
                                 .ToList();

                var mapPinData = new MapPinData
                {
                    Id              = contactRec.DocumentId,
                    PartnerId       = contactRec.PartnerId,
                    Discount        = contactRec.PercentValue,
                    DiscountType    = contactRec.DiscountType.GetDiscountTypeName(),
                    Latitude        = contactRec.Latitude,
                    Longitude       = contactRec.Longitude,
                    CategoryList    = categories,
                    PrimaryCategory = categories.FirstOrDefault()
                };

                var nameList = discountsStringsTable
                               .Where(i => i.OwnerId == contactRec.Id && i.Appointment == StrAppointmentTitle)
                               .Join(langStringsTable, i => i.LangStringId, i => i.Id, (ds, ls) => ls);

                foreach (var nameRec in nameList)
                {
                    mapPinData.SetName(nameRec.LanguageCode, nameRec.Text);
                }

                result.Add(mapPinData);
            }

            return(Task.FromResult(result));
        }
示例#5
0
        public ClusterItem(MapPinData pinItem)
        {
            Data = pinItem;

            Position = new CLLocationCoordinate2D(pinItem.Latitude, pinItem.Longitude);
            Snippet  = pinItem.Id;
            Title    = pinItem.Name;

            var imageBytes = pinItem.PrimaryCategory.GetIconThemeBytes();

            Icon = UIImage.LoadFromData(NSData.FromArray(imageBytes), UIScreen.MainScreen.Scale);
        }
        public ClusterItem(MapPinData pinItem)
        {
            Data = pinItem;

            Position = new LatLng(pinItem.Latitude, pinItem.Longitude);
            Snippet  = pinItem.Id;
            Title    = pinItem.Name;

            var imageBytes = pinItem.PrimaryCategory.GetIconThemeBytes();
            var icon       = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);

            Icon = BitmapDescriptorFactory.FromBitmap(icon);
        }
示例#7
0
        void map_ViewChanged(object sender, MapViewChangedEventArgs e)
        {
            (sender as Map).ViewChanged -= map_ViewChanged;
            var        map     = Control;
            var        mapTile = (MapTile)Element;
            MapPinData data    = tapMarker.DataContext as MapPinData;

            var centerLocation = new System.Device.Location.GeoCoordinate(Math.Round(map.Center.Latitude, 4), Math.Round(map.Center.Longitude, 4));
            var pinLocation    = new System.Device.Location.GeoCoordinate(Math.Round(data.Latitude, 4), Math.Round(data.Longitude, 4));

            if (centerLocation == pinLocation)
            {
                mapTile.ShowPinDetailInfo(data.Id);
            }
        }
示例#8
0
            public PinMarker(MapPinData pinData)
            {
                if (pinData.PrimaryCategory != null)
                {
                    System.Windows.Controls.Image imgPin = new System.Windows.Controls.Image();
                    var         categoryParam            = CategoryHelper.CategoryList[pinData.PrimaryCategory.TypeCode];
                    BitmapImage bmp = new BitmapImage(new Uri(categoryParam.Icon, UriKind.Relative));
                    imgPin.Source = bmp;
                    //imgPin.Width = 60;
                    //imgPin.Height = 60;

                    Content        = imgPin;
                    DataContext    = pinData;
                    GeoCoordinate  = new System.Device.Location.GeoCoordinate(pinData.Latitude, pinData.Longitude);
                    PositionOrigin = new System.Windows.Point(0.0, 0.0);
                }
            }
示例#9
0
        async public void MapLocation_ClickPinDetail(object sender, MapPinDataEventArgs e)
        {
            MapPinData   pinData      = e.PinData;
            DiscountData discountData = AppData.Discount.DiscountCollection.Find(item => { return(item.DocumentId == pinData.PartnerId); });

            if (discountData != null)
            {
                try
                {
                    IsLoadActivity = true;
                    await AppData.Discount.LoadFullDescription(discountData);
                }
                finally
                {
                    IsLoadActivity = false;
                }

                await ViewPage.Navigation.PushAsync(new DiscountDetailPage(discountData.DocumentId), true);
            }
        }
示例#10
0
        public void LoadMapData()
        {
            AppData.Discount.MapPinCollection.Clear();

            var contactList = from co in database.Table <Contact>()
                              from d in database.Table <Discount>()
                              where co.DiscountId == d.Id
                              select new
            {
                d.Id,
                DocumentId = co.DocumentId,
                PartnerId  = d.DocumentId,
                co.Latitude,
                co.Longitude,
                d.PercentValue,
            };

            foreach (var contactRec in contactList)
            {
                MapPinData mapPinData = new MapPinData();
                mapPinData.Id        = contactRec.DocumentId;
                mapPinData.PartnerId = contactRec.PartnerId;
                mapPinData.Discount  = contactRec.PercentValue;
                mapPinData.Latitude  = contactRec.Latitude;
                mapPinData.Longitude = contactRec.Longitude;


                var categoryList = from c in database.Table <Categorie>()
                                   where c.DiscountId == contactRec.Id
                                   select c;
                foreach (var categoryrec in categoryList)
                {
                    mapPinData.CategorieList.Add(new CategorieData {
                        TypeCode = categoryrec.TypeCode
                    });
                }

                if (mapPinData.CategorieList.Count > 0)
                {
                    mapPinData.PrimaryCategory = mapPinData.CategorieList[0];
                }
                else
                {
                    mapPinData.PrimaryCategory = new CategorieData {
                        TypeCode = -1
                    }
                };

                var nameList = (from ds in database.Table <DiscountsStrings>()
                                from ls in database.Table <LangString>()
                                where ds.LangStringId == ls.Id
                                where ds.OwnerId == contactRec.Id
                                where ds.Appointment == StrAppointmentTitle
                                select new { ls.Text, ls.LanguageCode }).ToList();

                foreach (var nameRec in nameList)
                {
                    mapPinData.SetName(nameRec.LanguageCode, nameRec.Text);
                }

                AppData.Discount.MapPinCollection.Add(mapPinData);
            }
        }
示例#11
0
 public MapPinDataEventArgs(MapPinData pinData)
 {
     PinData = pinData;
 }