Пример #1
0
        /// <summary>
        /// Ref: http://www.sunearthtools.com/tools/distance.php#contents
        /// </summary>
        /// <param name="A">Point A</param>
        /// <param name="B">Point B</param>
        /// <returns>Angle between two points in the sphere</returns>
        private static double AngleBetweenPoints(Vector2D A, Vector2D B)
        {
            var latA = GSMiner.Deg2Rad(A.Y);
            var lngA = GSMiner.Deg2Rad(A.X);
            var latB = GSMiner.Deg2Rad(B.Y);
            var lngB = GSMiner.Deg2Rad(B.X);
            var phi  = Math.Log(Math.Tan((latB / 2.0) + (Math.PI / 4)) / Math.Tan((latA / 2.0) + (Math.PI / 4)));
            var lon  = Math.Abs(lngA - lngB);
            /*Rolamento*/
            var theta = Math.Atan2(lon, phi);

            return((theta * 180.0) / Math.PI);
        }
Пример #2
0
        public void getImagesForPoints(ICollection <StreetPointModel> points)
        {
            for (int i = 0; i < points.Count() - 1; i++)
            {
                var point = points.ElementAt(i);
                if (point.GSPanorama == null)
                {
                    continue;
                }
                var nextPoint = points.ElementAt(i + 1);
                var vectorA   = new Vector2D(point.lng, point.lat);
                var vectorB   = new Vector2D(nextPoint.lng, nextPoint.lat);
                //if (point.GSPanorama.GSPicture != null && point.GSPanorama.GSPicture.Count > 0 && Math.Abs(point.GSPanorama.frontAngle - estimatedAngle) < 0.00000001) continue;
                //point.GSPanorama.frontAngle = GSMiner.OldAngleBetweenPoints(vectorA, vectorB);
                point.GSPanorama.frontAngle = GSMiner.AngleBetweenPoints(vectorA, vectorB);
                if (point.GSPanorama.GSPicture == null)
                {
                    point.GSPanorama.GSPicture = new List <GSPicture>();
                }
                var pano = point.GSPanorama.panoID;
                if (pano != null && pano.Length == 22)
                {
                    GSQueryBuilder querybuilder = new GSQueryBuilder(pano, 640, 640, point.GSPanorama.frontAngle, point.GSPanorama.pitch, key);
                    var            picture      = new GSPicture();

                    string finalURL = gsURL + querybuilder.getQueryPanoId();
                    picture.imageURI = DownloadBase64ImageFromURI(finalURL);

                    //picture.imageURI = "Testando";
                    picture.heading = point.GSPanorama.frontAngle;
                    point.GSPanorama.GSPicture.Add(picture);
                }
            }
            var lastPoint = points.ElementAt(points.Count - 1);

            if (lastPoint.GSPanorama == null)
            {
                return;
            }
            var secondToLastPoint = points.LastOrDefault(p => p.GSPanorama != null && p != lastPoint);

            if (secondToLastPoint == null)
            {
                return;
            }
            var lastAngle = secondToLastPoint.GSPanorama.frontAngle;

            if (lastPoint.GSPanorama.GSPicture == null)
            {
                lastPoint.GSPanorama.GSPicture = new List <GSPicture>();
            }
            lastPoint.GSPanorama.frontAngle = lastAngle;
            var lastPano = lastPoint.GSPanorama.panoID;

            if (lastPano != null)
            {
                GSQueryBuilder querybuilder = new GSQueryBuilder(lastPano, 640, 640, lastPoint.GSPanorama.frontAngle, lastPoint.GSPanorama.pitch, key);
                var            picture      = new GSPicture();

                string finalURL = gsURL + querybuilder.getQueryPanoId();
                picture.imageURI = DownloadBase64ImageFromURI(finalURL);

                picture.heading = lastPoint.GSPanorama.frontAngle;
                lastPoint.GSPanorama.GSPicture.Add(picture);
            }
        }