示例#1
0
文件: WplIndex.cs 项目: Fav/testww
        /// <summary>
        /// Computes a WorldWind URL (as string)
        /// </summary>
        /// <param name="ww"></param>
        /// <returns></returns>
        public String GotoURL(WorldWindow ww)
        {
            WorldWindUri uri = new WorldWindUri();

            uri.Latitude  = Angle.FromDegrees(this.pn.Lat);
            uri.Longitude = Angle.FromDegrees(this.pn.Lon);

            return(uri.ToString());
        }
示例#2
0
        /// <summary>
        /// Parses a worldwind uri string
        /// Updated by CM = worldwind://goto/lat=51.41&amp;lon=5.479
        ///		   or	worldwind://goto/lat=51.41&amp;lon5.479&amp;view=0.25
        ///			or
        ///	worldwind://wmsimage=displayname%3Dtestlayer%2526transparency%3D50%2526altitude%3D10000%2526link%3Dhttp%3A%2F%2Fviz.globe.gov%2Fviz-bin%2Fwmt.cgi%3Fservice%3DWMS%26version%3D1.1.1%26request%3DGetMap%26layers%3DRATMAX%26format%3Dimage%2Fpng%26width%3D512%26height%3D512%26bbox%3D-180%2C-90%2C180%2C90%26srs%3DEPSG%3A4326
        /// </summary>
        /// <param name="worldWindUri"></param>
        /// <returns></returns>
        public static WorldWindUri Parse(string worldWindUri)
        {
            try
            {
                WorldWindUri uri = new WorldWindUri();
                worldWindUri = worldWindUri.Trim();

                uri._preserveCase = worldWindUri; //set our case-sensitive one, hack for worldwind://install=

                //then continue as before
                worldWindUri = worldWindUri.ToLower(CultureInfo.InvariantCulture);
                uri._rawUrl  = worldWindUri;
                if (!worldWindUri.StartsWith(Scheme + "://"))
                {
                    throw new UriFormatException("Invalid protocol, expected " + Scheme + "://");
                }

                string url = worldWindUri.Replace(Scheme + "://", "");
                if (url.Length == 0)
                {
                    throw new UriFormatException("Incomplete URI");
                }

                //url = url.Replace("///", "!");			// I wanted to allow a sure to split "functions" inside of the url by using "//"
                string[] functions = url.Split('!');

                foreach (string function in functions)
                {
                    if (function.IndexOf("goto/") == 0)
                    {
                        string functionString = function.Replace("goto/", "").Trim();

                        string[] functionParameters = functionString.Split('&');

                        foreach (string curParam in functionParameters)
                        {
                            string[] nv = curParam.Split(new char[] { '=' }, 2);
                            if (nv.Length != 2)
                            {
                                continue;
                            }
                            string key             = nv[0].ToLower();
                            string value           = nv[1];
                            double doubleVal       = double.NaN;
                            string urlDecodedValue = HttpUtility.UrlDecode(value);
                            double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out doubleVal);

                            switch (key.ToLower())
                            {
                            case "lat":
                            case "latitude":
                                uri.Latitude = Angle.FromDegrees(doubleVal);
                                break;

                            case "lon":
                            case "longitude":
                                uri.Longitude = Angle.FromDegrees(doubleVal);
                                break;

                            case "altitude":
                            case "alt":
                                uri.Altitude = doubleVal;
                                break;

                            case "view":
                            case "viewrange":
                                uri.ViewRange = Angle.FromDegrees(doubleVal);
                                break;

                            // TODO: Decide on URI parameter names
                            case "bank":
                                uri.Bank = Angle.FromDegrees(doubleVal);
                                break;

                            case "dir":
                            case "direction":
                                uri.Direction = Angle.FromDegrees(doubleVal);
                                break;

                            case "tilt":
                                uri.Tilt = Angle.FromDegrees(doubleVal);
                                break;

                            case "world":
                                uri.World = value;
                                break;

                            case "layer":
                                uri.Layer = urlDecodedValue;
                                break;
                            }
                        }
                    }
                }

                return(uri);
            }
            catch (Exception caught)
            {
                throw new UriFormatException("The worldwind:// URI could not be parsed. (The URI used was: " + worldWindUri + " and the error generated was: " + caught.Message + ")");
            }
        }