Пример #1
0
 public Distance DistanceBetween(Location location, DistanceUnits units)
 {
     double num = (units == DistanceUnits.Miles) ? 3956.545 : 6378.2;//3438.147;
     double num2 = this.ToRadian(location.Latitude - this.Latitude);
     double num3 = this.ToRadian(location.Longitude - this.Longitude);
     double d = Math.Pow(Math.Sin(num2 / 2.0), 2.0) + ((Math.Cos(this.ToRadian(this.Latitude)) * Math.Cos(this.ToRadian(location.Latitude))) * Math.Pow(Math.Sin(num3 / 2.0), 2.0));
     double num5 = 2.0 * Math.Asin(Math.Min(1.0, Math.Sqrt(d)));
     return new Distance(num * num5, units);
 }
Пример #2
0
 public Address(string street, string city, string state, string postalCode, string country, Location coordinates, AddressAccuracy accuracy)
 {
     this._street = street;
     this._city = city;
     this._state = state;
     this._postalCode = postalCode;
     this._country = country;
     this._coordinates = coordinates;
     this._accuracy = accuracy;
 }
Пример #3
0
        private void ShowResult(string locationName, Location location)
        {
            Double radius = 200;
            if (Request["radius"] != null && Request["radius"] != string.Empty)
            {
                if (double.Parse(Request["radius"], Utility.GetNumberFormatInfo()) <= SliderExtender1.Maximum)
                {
                    radius = double.Parse(Request["radius"], Utility.GetNumberFormatInfo());
                }

            }

            DistanceUnits distanceunit = DistanceUnits.Miles;
            if (UnitInKm == true)
                distanceunit = DistanceUnits.Kilometers;

            XmlDocument content = new XmlDocument();
            XmlElement root = content.CreateElement("root");

            //search node
            XmlElement infoNode = content.CreateElement("location");
            infoNode.InnerText = location.ToString().Replace(" ", "");
            XmlAttribute nameAttribute = content.CreateAttribute("name");
            nameAttribute.Value = locationName;
            infoNode.Attributes.Append(nameAttribute);
            XmlAttribute latitudeAttribute = content.CreateAttribute("latitude");
            latitudeAttribute.Value = location.Latitude.ToString();
            infoNode.Attributes.Append(latitudeAttribute);
            XmlAttribute longitudeAttribute = content.CreateAttribute("longitude");
            longitudeAttribute.Value = location.Longitude.ToString();
            infoNode.Attributes.Append(longitudeAttribute);
            XmlAttribute unitAttribute = content.CreateAttribute("unit");
            unitAttribute.Value = distanceunit.ToString().ToLower();
            infoNode.Attributes.Append(unitAttribute);
            XmlAttribute radiusAttribute = content.CreateAttribute("radius");
            radiusAttribute.Value = radius.ToString(Utility.GetNumberFormatInfo());
            infoNode.Attributes.Append(radiusAttribute);

            root.AppendChild(infoNode);

            string selectMembLoc = @"
              select m.nodeId, m.email, m.loginName, m.password, lat.dataNvarchar as Latitude, lon.dataNvarchar as Longitude, karma.dataInt as Karma, memberdata.text as MemberData, avatar.datanvarchar as Avatar  from cmsMember m
                    INNER JOIN cmsPropertyData lat
                    on m.nodeId = lat.contentnodeid
                    INNER JOIN cmsPropertyData lon
                    on m.nodeId = lon.contentnodeid
                    Inner Join cmsPropertyData karma
                    on m.nodeId = karma.contentNodeId
                    Inner Join umbracoNode memberdata
                    on m.nodeId =  memberdata.id
                    Inner Join cmsPropertyData avatar
                    on m.nodeId = avatar.contentnodeid
                    where lat.propertytypeid = 43 and lat.dataNvarchar is not null and lat.dataNvarchar != ''
                    and lon.propertytypeid = 34 and lon.dataNvarchar is not null and lon.dataNvarchar != ''
                    and karma.propertytypeid = 32 and avatar.propertytypeid = 39
                    and CASE WHEN IsNumeric(lat.dataNvarchar) = 1 THEN Cast(lat.dataNvarchar as decimal(10)) ELSE -90 END > @minlat
                    and CASE WHEN IsNumeric(lat.dataNvarchar) = 1 THEN Cast(lat.dataNvarchar as decimal(10)) ELSE 90 END < @maxlat
                    and CASE WHEN IsNumeric(lon.dataNvarchar) = 1 THEN Cast(lon.dataNvarchar as decimal(10)) ELSE -180 END > @minlon
                    and CASE WHEN IsNumeric(lon.dataNvarchar) = 1 THEN Cast(lon.dataNvarchar as decimal(10)) ELSE 180 END < @maxlon;";

            SqlConnection conn = new SqlConnection(umbraco.GlobalSettings.DbDSN);
            SqlCommand commMembLoc = new SqlCommand(selectMembLoc, conn);

            commMembLoc.Parameters.AddWithValue("@minlat", location.Latitude - Math.Ceiling(radius / 85));
            commMembLoc.Parameters.AddWithValue("@maxlat", location.Latitude + Math.Ceiling(radius / 85));
            commMembLoc.Parameters.AddWithValue("@minlon", location.Longitude - Math.Ceiling(radius / 85));
            commMembLoc.Parameters.AddWithValue("@maxlon", location.Longitude + Math.Ceiling(radius / 85));

            conn.Open();

            bool found = false;
            string memberIds = string.Empty;

            try
            {
                SqlDataReader reader = commMembLoc.ExecuteReader();

                while (reader.Read())
                {

                    int id = reader.GetInt32(0);
                    int karma = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);

                    memberIds += id.ToString() + ";";

                    Location memberLocation = new Location(
                        double.Parse(reader.GetString(4), Utility.GetNumberFormatInfo()),
                        double.Parse(reader.GetString(5), Utility.GetNumberFormatInfo()));

                    double distance = location.DistanceBetween(memberLocation, distanceunit);
                    //Response.Output.WriteLine("Member " + id.ToString() + "distance " + distance.ToString(Utility.GetNumberFormatInfo()));

                    if (distance <= radius)
                    {
                        found = true;

                        XmlElement memberNode = content.CreateElement("member");

                        XmlAttribute idAttribute = content.CreateAttribute("id");
                        idAttribute.Value = id.ToString();
                        memberNode.Attributes.Append(idAttribute);

                        //name
                        XmlAttribute membernameAttribute = content.CreateAttribute("name");
                        membernameAttribute.Value = reader.GetString(7);
                        memberNode.Attributes.Append(membernameAttribute);

                        //karma
                        XmlAttribute karmaAttribute = content.CreateAttribute("karma");
                        karmaAttribute.Value = karma.ToString();
                        memberNode.Attributes.Append(karmaAttribute);

                        XmlElement distanceNode = content.CreateElement("data");
                        distanceNode.InnerText = distance.ToString(Utility.GetNumberFormatInfo());
                        XmlAttribute aliasAttribute = content.CreateAttribute("alias");
                        aliasAttribute.Value = "distance";
                        distanceNode.Attributes.Append(aliasAttribute);
                        memberNode.AppendChild(distanceNode);

                        XmlElement avatarNode = content.CreateElement("data");
                        avatarNode.InnerText = reader.IsDBNull(8) ? string.Empty : reader.GetString(8);
                        XmlAttribute avatarAliasAttribute = content.CreateAttribute("alias");
                        avatarAliasAttribute.Value = "avatar";
                        avatarNode.Attributes.Append(avatarAliasAttribute);
                        memberNode.AppendChild(avatarNode);

                        XmlElement locationNode = content.CreateElement("data");
                        locationNode.InnerText = memberLocation.ToString();
                        XmlAttribute locationAliasAttribute = content.CreateAttribute("alias");
                        locationAliasAttribute.Value = "location";
                        locationNode.Attributes.Append(locationAliasAttribute);
                        memberNode.AppendChild(locationNode);

                        root.AppendChild(memberNode);
                    }
                }
            }
            finally
            {
                conn.Close();
            }

            if (!found)
            {
                pnlCreateTopic.Visible = false;
            }

            ViewState["MemberLocatorMemberIds"] =
                memberIds.Length > 0 ? memberIds.Substring(0, memberIds.Length - 1) : "";

            //litResults.Text = root.InnerXml.ToString() + ResultsXslt;

            content.AppendChild(root);
            litResults.Text = umbraco.macro.GetXsltTransformResult(content, umbraco.macro.getXslt("MemberLocator.xslt"));

            ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "MemberLocator",
                umbraco.macro.GetXsltTransformResult(content, umbraco.macro.getXslt("MemberLocatorScript.xslt")), true);

            if (Member.GetCurrentMember().Groups.ContainsKey(4686))
            {
                ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "MemberLocatorTiny",
                    "topictiny();", true);
            }
        }
Пример #4
0
        private void loadMap()
        {
            try
            {

                //check if event
                if (Request["event"] != null)
                {
                    umbraco.presentation.nodeFactory.Node e = new umbraco.presentation.nodeFactory.Node(Convert.ToInt32(Request["event"]));

                    ShowResult(e.Name, new Location(
                        Convert.ToDouble(e.GetProperty("latitude").Value, Utility.GetNumberFormatInfo()),
                         Convert.ToDouble(e.GetProperty("longitude").Value, Utility.GetNumberFormatInfo())));
                }

                else
                {
                    //address supplied
                    if (Request["s"] != null && Request["s"] != string.Empty)
                    {
                        litMultipleResults.Text = MultipleResultsCaption;

                        litResults.Text = string.Empty;
                        pnlMultiple.Visible = false;

                        IGeoCoder geoCoder = new GoogleGeoCoder(Utility.GetGoogleMapsKey());
                        Address[] addresses = geoCoder.GeoCode(Request["s"]);
                        if (addresses.Length == 0)//no results
                        {
                            pnlCreateTopic.Visible = false;

                            litResults.Text = umbraco.macro.GetXsltTransformResult(umbraco.content.Instance.XmlContent, umbraco.macro.getXslt(ResultsXslt));

                            ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "test",
               umbraco.macro.GetXsltTransformResult(umbraco.content.Instance.XmlContent, umbraco.macro.getXslt("MemberLocatorScript.xslt")), true);
                        }
                        else
                        {
                            if (addresses.Length > 1)//multiple results, need to choose first
                            {
                                //show the first result
                                ShowResult(addresses[0].ToString(), new Location(addresses[0].Coordinates.Latitude, addresses[0].Coordinates.Longitude));

                                //rblLocations.Items.Clear();
                                //foreach (Address address in addresses)
                                //{
                                //    rblLocations.Items.Add(new ListItem(address.ToString(), address.Coordinates.Latitude.ToString(Utility.GetNumberFormatInfo()) + "," + address.Coordinates.Longitude.ToString(Utility.GetNumberFormatInfo())));
                                //}
                                //pnlMultiple.Visible = true;
                            }
                            else// single result, ok show results
                            {
                                ShowResult(addresses[0].ToString(), new Location(addresses[0].Coordinates.Latitude, addresses[0].Coordinates.Longitude));
                            }
                        }
                    }
                    else //node address, use member location
                    {
                        //use member location
                        Member current = Member.GetCurrentMember();
                        Location memberLocation = new Location(
                            double.Parse(current.getProperty("latitude").Value.ToString(), Utility.GetNumberFormatInfo()),
                            double.Parse(current.getProperty("longitude").Value.ToString(), Utility.GetNumberFormatInfo())
                            );

                        ShowResult(current.getProperty("location").Value.ToString(), memberLocation);
                    }
                }
            }
            catch(Exception ex) {

                if (Request["debug"] == null)
                {
                    litResults.Text = "Error displaying locator results";
                }
                else
                {
                    litResults.Text = ex.Message + "</br>" + ex.StackTrace;
                }
            }

            // }
        }
Пример #5
0
 public Distance DistanceBetween(Location location)
 {
     return this.DistanceBetween(location, DistanceUnits.Miles);
 }
Пример #6
0
 static Location()
 {
     Empty = new Location();
 }