예제 #1
0
        //TODO use GeoCalc
        //public static Vector GetGeoDistance(this XamGeographicMap geoMap, Point mousePoint1, Point mousePoint2)
        //{
        //    var geoPoint1 = geoMap.GetGeoPoint(mousePoint1);
        //    var geoPoint2 = geoMap.GetGeoPoint(mousePoint2);

        //    var distanceX = System.Math.Abs(geoPoint1.X - geoPoint2.X);
        //    var distanceY = System.Math.Abs(geoPoint1.Y - geoPoint2.Y);

        //    return new Vector(distanceX, distanceY);
        //}
        //TODO cleanup
        //public static double GetGeoDistanceX(this XamGeographicMap geoMap, Point mousePoint1, Point mousePoint2)
        //{
        //    return geoMap.GetGeoDistance(mousePoint1, mousePoint2).X;
        //}
        //public static double GetGeoDistanceY(this XamGeographicMap geoMap, Point mousePoint1, Point mousePoint2)
        //{
        //    return geoMap.GetGeoDistance(mousePoint1, mousePoint2).Y;
        //}
        //public static double GetGeoDistanceX(this XamGeographicMap geoMap, double mouseX1, double mouseX2)
        //{
        //    return geoMap.GetGeoDistanceX(new Point(mouseX1, 0), new Point(mouseX2, 0));
        //}
        //public static double GetGeoDistanceY(this XamGeographicMap geoMap, double mouseY1, double mouseY2)
        //{
        //    return geoMap.GetGeoDistanceY(new Point(0, mouseY1), new Point(0, mouseY2));
        //}
        #endregion

        #region Calculation Methods for Map Postions
        public static Point GetMapPosition(this XamGeographicMap geoMap, Point geoPoint)
        {
            return(geoMap.GetWindowPoint(geoPoint));

            //var xAxis = geoMap.XAxis;
            //var yAxis = geoMap.YAxis;

            //var viewport = new Rect(0, 0, geoMap.ActualWidth, geoMap.ActualHeight);
            //var window = geoMap.WindowRect;

            //bool isInverted = xAxis.IsInverted;
            //var param = new ScalerParams(window, viewport, isInverted);
            //param.EffectiveViewportRect = geoMap.EffectiveViewport;
            //var longitude = xAxis.GetScaledValue(geoPoint.X, param);

            //isInverted = yAxis.IsInverted;
            //param = new ScalerParams(window, viewport, isInverted);
            //param.EffectiveViewportRect = geoMap.EffectiveViewport; //added
            //var latitude = yAxis.GetScaledValue(geoPoint.Y, param);

            //return new Point(longitude, latitude);
        }
예제 #2
0
        /// <summary>
        /// Zooms XamGeographicMap to a given geographic location
        /// </summary>
        /// <param name="geoMap"></param>
        /// <param name="geoLocation"></param>
        /// <param name="mapZoomScale"></param>
        public static void ZoomMapToLocation(this XamGeographicMap geoMap, GeoLocation geoLocation, double mapZoomScale = 0.1)
        {
            //validate geoMargin
            if (double.IsInfinity(mapZoomScale) || double.IsNaN(mapZoomScale))
            {
                mapZoomScale = 0.1;
            }

            mapZoomScale = System.Math.Abs(mapZoomScale);
            //// navigate to a geographic location
            //var geoRect = new Rect(geoLocation.Longitude - geoMargin, geoLocation.Latitude - geoMargin, 2 * geoMargin, 2 * geoMargin);
            ////Rect windowRect = geoMap.GetZoomFromGeographic(geoRect);
            //var geoRegion = new GeoRegion(geoLocation, geoMargin);
            //var southEast = new Point(geoLocation.Longitude - geoMargin, geoLocation.Latitude + geoMargin);
            //var northWest = new Point(geoLocation.Longitude + geoMargin, geoLocation.Latitude - geoMargin);

            //var windowRect2 = geoMap.GetZoomFromGeographic(geoRegion.NorthWest.ToPoint(), geoRegion.SouthEast.ToPoint());
            //var windowRect = geoMap.GetZoomFromGeographic(northWest, southEast);



            var longitudeOffset = (180 * 2 * mapZoomScale) / 2;
            var latitudeOffset  = (85 * 2 * mapZoomScale) / 2;


            var cartLocation  = geoMap.GetWindowPoint(geoLocation.ToPoint());
            var cartNorthWest = new Point(cartLocation.X - 50, cartLocation.Y - 50);
            var cartSouthEast = new Point(cartLocation.X + 50, cartLocation.Y + 50);

            var w = cartSouthEast.X - cartNorthWest.X;
            var h = cartSouthEast.Y - cartNorthWest.Y;

            var cartRect = new Rect(cartNorthWest.X, cartNorthWest.Y, w, h);

            DebugManager.Log("cartRect " + cartRect);
            var geoRect = geoMap.GetGeographicFromZoom(cartRect);

            DebugManager.Log("geoRect  " + geoRect);



            var northWest = new Point(geoLocation.Longitude - longitudeOffset, geoLocation.Latitude + latitudeOffset);
            var southEast = new Point(geoLocation.Longitude + longitudeOffset, geoLocation.Latitude - latitudeOffset);



            var geoRegion44 = new GeoRegion(northWest, southEast);

            northWest = geoMap.GetGeographicPoint(cartNorthWest);
            southEast = geoMap.GetGeographicPoint(cartSouthEast);
            DebugManager.Log("cartNorthWest " + cartNorthWest + " cartSouthEast " + cartSouthEast);
            DebugManager.Log("geoNorthWest  " + northWest + " geoSouthEast  " + southEast);


            var windowRect44 = geoMap.GetZoomFromGeographic(northWest, southEast);

            windowRect44 = geoMap.GetZoomFromGeographic(geoRect);


            DebugManager.Log("geoLocation " + geoLocation.ToPoint());
            DebugManager.Log("geoRegion44 " + geoRegion44.ToRect());
            //DebugManager.Log("geoRect4    " + geoRect4);
            //DebugManager.Log("windowRect4 " + windowRect4);
            DebugManager.Log("windowRect4 " + windowRect44);

            geoMap.WindowRect = windowRect44;
        }