Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Gps Koordinaten eingeben und entfernung bestimmen
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

Gps Koordinaten eingeben und entfernung bestimmen

beantworten | zitieren | melden

Hi an alle, ich steh vor einem für mich noch unlösbarem problem
Undzwar (achso vorne weg : Hab gegoogled und auch forumsuche benutzt)
:
Ich bin leidenschaftlicher Seegler und jetzt wollte ich mir gerne eine Methode schreiben, womit ich einfach 2 GPS Koordinaten eingebe (Komplette Welt) und es wird mir berechnet, welche Entfernung die beiden Koordinaten haben.

Es wäre sehr nett von euch,wenn ihr mir helfen würdet !
Liebe Grüße
stube
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

http://www.informit.com/guides/content.asp?g=dotnet&seqNum=513&rl=1

http://www.codeproject.com/csharp/distancebetweenlocations.asp

Google-Dauer für beide Hits < 2 min
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

ich glaub ich habs mit google nicht drauf, deprimierend !
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

Ok, danke schonmal, hat funktioniert, allerdings komm ich jetzt zu einem problem und ich hab wirklich danach gegoogled und nix gefunden ich hoffe,dass jetzt nicht wieder ergebnisse bei google gepostet werden,dann häng ich mich auf wegen einer depression weil ich bei google nix finde
also folgender code in der Klasse :


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

public static class CDistanceBetweenLocations
{
public static double Calc(double Lat1, double Long1, double Lat2, double Long2)
{
/*
The Haversine formula according to Dr. Math.
[URL]http://mathforum.org/library/drmath/view/51879.html[/URL]

dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2(sqrt(a), sqrt(1-a))
d = R * c

Where
* dlon is the change in longitude
* dlat is the change in latitude
* c is the great circle distance in Radians.
* R is the radius of a spherical Earth.
* The locations of the two points in
spherical coordinates (longitude and
latitude) are lon1,lat1 and lon2, lat2.
*/
double dDistance = Double.MinValue;
double dLat1InRad = Lat1 * (Math.PI / 180.0);
double dLong1InRad = Long1 * (Math.PI / 180.0);
double dLat2InRad = Lat2 * (Math.PI / 180.0);
double dLong2InRad = Long2 * (Math.PI / 180.0);
double dLongitude = dLong2InRad - dLong1InRad;
double dLatitude = dLat2InRad - dLat1InRad;

// Intermediate result a.
double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) *
Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);

// Intermediate result c (great circle distance in Radians).
double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a));

// Distance.
// const Double kEarthRadiusMiles = 3956.0;
const Double kEarthRadiusKms = 6376.5;
dDistance = kEarthRadiusKms * c;

return dDistance;
}

public static double Calc(string NS1, double Lat1, double Lat1Min,
string EW1, double Long1, double Long1Min, string NS2,
double Lat2, double Lat2Min, string EW2,
double Long2, double Long2Min)
{
double NS1Sign = NS1.ToUpper() == "N" ? 1.0 : -1.0;
double EW1Sign = NS1.ToUpper() == "E" ? 1.0 : -1.0;
double NS2Sign = NS2.ToUpper() == "N" ? 1.0 : -1.0;
double EW2Sign = EW2.ToUpper() == "E" ? 1.0 : -1.0;
return (Calc(
(Lat1 + (Lat1Min / 60)) * NS1Sign,
(Long1 + (Long1Min / 60)) * EW1Sign,
(Lat2 + (Lat2Min / 60)) * NS2Sign,
(Long2 + (Long2Min / 60)) * EW2Sign
));
}

public static void Main(string[] args)
{
if (args.Length < 12)
{
System.Console.WriteLine("usage: DistanceBetweenLocations" +
" N 43 35.500 W 80 27.800 N 43 35.925 W 80 28.318";);
return;
}
System.Console.WriteLine(Calc(
args[0],
System.Double.Parse(args[1]),
System.Double.Parse(args[2]),
args[3],
System.Double.Parse(args[4]),
System.Double.Parse(args[5]),
args[6],
System.Double.Parse(args[7]),
System.Double.Parse(args[8]),
args[9],
System.Double.Parse(args[10]),
System.Double.Parse(args[11])));

}
}

So Funktioniert auch alles soweit !
Das hier ist der Code von der ASPX seite :


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class gps1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
    protected void Berechnen_Click(object sender, EventArgs e)
    {
        // CDistanceBetweenLocations Calculater = new CDistanceBetweenLocations();
        Entfernung.Text = CDistanceBetweenLocations.Calc(Convert.ToDouble(long1.Text), Convert.ToDouble(lat1.Text), Convert.ToDouble(long2.Text), Convert.ToDouble(lat2.Text)).ToString();
    }
}


Soweit, so gut !
Aber hier das Problem :
1. Der soll das in Nautischen Meilen ausgeben.
2. Das eingabe Format sollte wiefolgt sein :
78 05 17 N <- Textbox 1
52 03 15 O <- Textbox 2
------------
72 03 05 N <- Textbox 3
14 05 18 W <- Textbox 4


Kannst mir da auch wer weiterhelfen ?!
Danke schonmal im vorraus !!!
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
DarkShadow81
myCSharp.de - Member



Dabei seit:
Beiträge: 222
Herkunft: Berlin

beantworten | zitieren | melden

ein alter codeschnippsel, hatte auhc ma das problem allerdings für routenplaner und koordinatenberechnung per luftlinie, müsste dir weiter helfen, gibt die entfernung in km aus, musste nur noch umrechnen in NM


Alt1 =  Alt1*Math.PI/180; Long1 = Long1*Math.PI/180;
				Alt2 =  Alt2*Math.PI/180;  Long2 = Long2*Math.PI/180;
				if (Long1<Long2)  { LaengenUnterschied = Long2 - Long1; }
				else { LaengenUnterschied = Long1 - Long2; }
				LaengenUnterschied = (Long1 - Long2);
				Entfernung = Math.Round(1.852*60*Math.Acos((Math.Sin (Alt1)*Math.Sin(Alt2))+ Math.Cos(Alt1)*Math.Cos(Alt2)*Math.Cos(LaengenUnterschied))*180/Math.PI,2);
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo Stube,
ich arbeite privatan einem Projekt zur Darstellung des Sternenhimmls, da bekomme ich sehr viel mit Winkeln und Polarkoordinaten (wie geogr. Länge und Breite) zu tun. Ich habe für beidee bereits je eine Klasse entwickelt, aber die Distanz zwischen zwei Punkten bisher nicht als Funktion, den Code aber bereits zur internen Nutzung fertig...
Du hast mich gerade auf die Idee gebracht, das noch einzubauen -> ein sehr sinnvolles Feature!! Danke.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
hier mal die Solution für die dll mit den Klassen Angle und PolarPoint.
Für Dich wären die Methoden Angle.SetDegrees(short deg, short min, short sec) und PolarPointBase.DistanceTo(PolarPointBase pp) interessant. Da kannst Du abgucken oder einfach die Klassen benutzen, aber ich fürchte fast daß das für Deine Zwecke etwas "oversized" ist.

Edit: Die Entfernung kommt als Winkel raus, wenn Du km haben willst musst du das noch auf den Erdball umrechnen ;-)
Attachments
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Borg
myCSharp.de - Member



Dabei seit:
Beiträge: 1.529
Herkunft: Berlin, Germany

beantworten | zitieren | melden

@DarkShadow81:
In deinem Code steht:

Entfernung = Math.Round(1.852*60*Math.Acos((Math.Sin (Alt1)*Math.Sin(Alt2))+ Math.Cos(Alt1)*Math.Cos(Alt2)*Math.Cos(LaengenUnterschied))*180/Math.PI,2);

Besonders fiel mir dabei das
1.852
auf. Da
1. die nautische Meile über die Meridiane definiert wird,
2. eine nautische Meile genau 1852 Meter lang ist und
3. deine Funktion die Entfernung in Kilometern berechnet,
wird man wohl bloss obige 1.852* entfernen müssen, um die Länge in Seemeilen zu erhalten.
private Nachricht | Beiträge des Benutzers
.unreal
myCSharp.de - Member

Avatar #avatar-1903.gif


Dabei seit:
Beiträge: 563
Herkunft: Nähe Zürich

beantworten | zitieren | melden

Guck dir mal die Anwendung SportTracks an! Da kannst du deine GPS punkte importieren und in Google Maps usw. angucken (http://www.zonefivesoftware.com/SportTracks/)

.unreal
private Nachricht | Beiträge des Benutzers
wdb.lizardking
myCSharp.de - Member

Avatar #avatar-2010.jpg


Dabei seit:
Beiträge: 100
Herkunft: Niederbayern

beantworten | zitieren | melden

Da hier anscheinend gerade die Spezialisten in Sachen Längen- und Breitengraden zusammengekommen sind, erlaube ich mir auch schnell eine Zusatzfrage

Zur Entfernungsberechnung zwischen 2 Städten verwende ich folgende Formel:
Entfernung = arccos(sin(B_lat)*sin(A_lat)+cos(B_lat)*cos(A_lat)*cos(B_lon - A_lon)) * Erdradius

So weit, so gut. Nun möchte ich eine Umkreissuche hinzufügen.
Dafür muß ich eine gegebene Entfernung zu einer Stadt (z.B. 30km) in einen Kleinkreis umrechnen.
Also eine kreisrunde Fläche auf einer Kugelgeometrie.

Mein Ansatz wäre nun gewesen die obige Formel umzustellen, aber dazu reicht mein Mathematik-Verständnis leider nicht aus :

Daher wäre ich um Unterstützung dankbar, die mir bei der Berechnung hilfreich ist.
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

@wdb.lizardking
Umkreissuche: dafür musst du doch wahrscheinlich sowieso jedes zu untersuchende Objekt testen. Berechne dabei die Entfernung zum Zentrum mithilfe Deiner Formel. Ist Sie kleiner als der Radius, hast Du einen Treffer.
Direkt an geogr. Position abzulesen ob Du in dem entsprechenden Kleinkreis bist, würde wahrscheinlich sowieso bedeuten, genau diesen Schritt einfach in eine Funktion zu kapseln, die dann nur noch einen Boolean zurückliefert...
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

@Darkshadow :
Wie muss ich z.B. den "Laengenunterschied" bestimmen,bzw. einbinden?
Ansonsten schonmal hilfreich,danke an alle bisher
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

und ich bräuchte noch eine kleine unterstützung bei der sache von der eingabe !
Hier das gewünschte format....

78 05 17 N <- Textbox 1
52 03 15 O <- Textbox 2
------------
72 03 05 N <- Textbox 3
14 05 18 W <- Textbox 4



ganz liebe grüße
stube
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

Hi, letzte Frage, was steht in den beiden Variablen Alt1 und Alt2?
Wenn ich diese Frage noch beantwortet bekomme, verspreche ich nicht mehr zu nerven!


mfg
Der olle Stube
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
DarkShadow81
myCSharp.de - Member



Dabei seit:
Beiträge: 222
Herkunft: Berlin

beantworten | zitieren | melden

1. Koordinate
alt1 = altitude 1
long1 = longitude 1
2. Koordinate
alt 2 = altitude 2
long2 = longitude 2

daten kommen aus diesem format (in meinem Falle aus einer mysqltabelle -> (GeoDb )

private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
wenn Du die Klassen aus meinem oben angehangenen Code nutzt, sieht dioe Sache so aus, da kannst Du auch direkt die aus Deinem String geparsten Werte verwenden:

using MarsStein.Geometry;
//---------
Angle latitude = Angle.Create(78,5,17);
Angle longitude = Angle.Create(52,3,15);
PolarPoint p1 = new PolarPoint(longitude,latitude);
latitude.SetDegrees(72,3,5);
longitude.SetDegrees(-14,5,18); // <-- das "-" im ersten Parameter steht für West.
PolarPoint p2 = new PolarPoint(longitude,latitude);
AngleBase distanceAngle = p1.DistanceTo(p2);
double distanzAufDerErde = distanceAngle.Radians * ErdRadius;
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

Hi...mir ist das schon ziemlich peinlich,dass ich euch hier andauernd nerven muss... aber ich hab folgendes problem... ich hab jetzt folgenden code :


Das ist die klasse :




using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

public static class CDistanceBetweenLocations
{
   
    
    public static double Calc(string NS1, double Lat1, double Lat1Min, string EW1, double Long1, double Long1Min, string NS2, double Lat2, double Lat2Min, string EW2, double Long2, double Long2Min)
    {
        double NS1Sign = NS1.ToUpper() == "N" ? 1.0 : -1.0;
        double EW1Sign = NS1.ToUpper() == "E" ? 1.0 : -1.0;
        double NS2Sign = NS2.ToUpper() == "N" ? 1.0 : -1.0;
        double EW2Sign = EW2.ToUpper() == "E" ? 1.0 : -1.0;
        return (Calc(
            (Lat1 + (Lat1Min / 60)) * NS1Sign,
            (Long1 + (Long1Min / 60)) * EW1Sign,
            (Lat2 + (Lat2Min / 60)) * NS2Sign,
            (Long2 + (Long2Min / 60)) * EW2Sign
            ));[IMG]wiefolgt[/IMG]
    }
    public static double Calc(double Lat1, double Long1, double Lat2, double Long2)
    {
        /*double dDistance = Double.MinValue;
        double dLat1InRad = Lat1 * (Math.PI / 180.0);
        double dLong1InRad = Long1 * (Math.PI / 180.0);
        double dLat2InRad = Lat2 * (Math.PI / 180.0);
        double dLong2InRad = Long2 * (Math.PI / 180.0);
        double dLongitude = dLong2InRad - dLong1InRad;
        double dLatitude = dLat2InRad - dLat1InRad;
        double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);*/
        double LaengenUnterschied;
        double Entfernung;

        Lat1 = Lat1 * Math.PI / 180; Long1 = Long1 * Math.PI / 180;
        Lat2 = Lat2 * Math.PI / 180; Long2 = Long2 * Math.PI / 180;
        if (Long1 < Long2) { LaengenUnterschied = Long2 - Long1; }
        else { LaengenUnterschied = Long1 - Long2; }
        LaengenUnterschied = (Long1 - Long2);
        Entfernung = Math.Round(1.852 * 60 * Math.Acos((Math.Sin(Lat1) * Math.Sin(Lat2)) + Math.Cos(Lat1) * Math.Cos(Lat2) * Math.Cos(LaengenUnterschied)) * 180 / Math.PI, 2);
            
            
        return Entfernung;
    }

    public static void Main(string[] args)
    {
        if (args.Length < 12)
        {
            System.Console.WriteLine("usage: DistanceBetweenLocations" + 
                    " N 43 35.500 W 80 27.800 N 43 35.925 W 80 28.318");
            return;
        }
        System.Console.WriteLine(Calc(
            args[0], 
            System.Double.Parse(args[1]), 
            System.Double.Parse(args[2]), 
            args[3], 
            System.Double.Parse(args[4]), 
            System.Double.Parse(args[5]), 
            args[6], 
            System.Double.Parse(args[7]), 
            System.Double.Parse(args[8]), 
            args[9], 
            System.Double.Parse(args[10]), 
            System.Double.Parse(args[11])));

    }
}



Das ist die ASPX seite:


<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="gps1.aspx.cs" Inherits="gps1" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <form runat="server" id="Form1">
        <table border="1" runat="server" id="Table1">
            <tr>
                <td>Koordinate 2:</td>
            </tr>
            <tr>
                <td>Länge 1:</td>
                <td style="width: 513px">
                <asp:TextBox runat="server" ID="long1" Width="50px"></asp:TextBox>
                    <asp:TextBox ID="tbLongMM1" runat="server" Width="50px"></asp:TextBox>
                        <asp:TextBox ID="tbLongSS1" runat="server" Width="50px"></asp:TextBox>
                            <asp:DropDownList ID="ddlHimmelsrichtungl1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" Width="100px">
                                <asp:ListItem>Ost</asp:ListItem>
                                <asp:ListItem>West</asp:ListItem>   
                            </asp:DropDownList></td>
            </tr>
            <tr>
                <td>Breite 1:</td>
                <td style="width: 513px">
                <asp:TextBox runat="server" ID="lat1" Width="50px"></asp:TextBox>
                        <asp:TextBox ID="tbLatMM1" runat="server" Width="50px"></asp:TextBox>
                            <asp:TextBox ID="tbLatSS1" runat="server" Width="50px"></asp:TextBox>
                                <asp:DropDownList ID="ddlHimmelsrichtungb1" runat="server" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" Width="100px">
                                    <asp:ListItem>Nord</asp:ListItem>
                                    <asp:ListItem>Süd</asp:ListItem>
                                </asp:DropDownList></td>
            </tr>
            <tr>
                <td>Koordinate 2:</td>
            </tr>
            <tr>
                <td>Länge 2:</td>
                <td style="width: 513px">
                    <asp:TextBox ID="long2" runat="server" Width="50px"></asp:TextBox>
                        <asp:TextBox ID="tbLongMM2" runat="server" Width="50px"></asp:TextBox>
                            <asp:TextBox ID="tbLongSS2" runat="server" Width="50px"></asp:TextBox>
                                <asp:DropDownList ID="ddlHimmelsrichtungb2" runat="server" OnSelectedIndexChanged="DropDownList3_SelectedIndexChanged" Width="100px">
                                    <asp:ListItem>Ost</asp:ListItem>
                                    <asp:ListItem>West</asp:ListItem>
                                </asp:DropDownList></td>
            </tr>
            <tr>
                <td>Breite 2:</td>
                <td style="width: 513px">
                    <asp:TextBox ID="lat2" runat="server" Width="50px"></asp:TextBox>
                        <asp:TextBox ID="tbLatMM2" runat="server" Width="50px"></asp:TextBox>
                            <asp:TextBox ID="tbLatSS2" runat="server" Width="50px"></asp:TextBox>
                                <asp:DropDownList ID="ddlHimmelsrichtungl2" runat="server" OnSelectedIndexChanged="DropDownList4_SelectedIndexChanged" Width="100px">
                                    <asp:ListItem>Nord</asp:ListItem>
                                    <asp:ListItem>Süd</asp:ListItem>
                                </asp:DropDownList></td>
            </tr>
            <tr>
                <td><asp:Button ID="Berechnen" Text="Berechnen" runat="server" OnClick="Berechnen_Click" /></td>
            </tr>
        </table>
        <asp:Literal ID="Entfernung1" runat="server"></asp:Literal>
    </form>
</asp:Content>



Und das hier ist der Code von der aspx seite:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class gps1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
    protected void Berechnen_Click(object sender, EventArgs e)
    {
        // CDistanceBetweenLocations Calculater = new CDistanceBetweenLocations();
        Entfernung1.Text = CDistanceBetweenLocations.Calc(ddlHimmelsrichtungb1.SelectedValue, Convert.ToDouble(lat1.Text), Convert.ToDouble(tbLatMM1.Text), Convert.ToDouble(tbLatSS1.Text), ddlHimmelsrichtungl1.SelectedValue, Convert.ToDouble(long1.Text), Convert.ToDouble(tbLongMM1.Text), Convert.ToDouble(tbLongSS1.Text), ddlHimmelsrichtungb2.SelectedValue, Convert.ToDouble(lat2.Text), Convert.ToDouble(tbLatMM2.Text), Convert.ToDouble(tbLatSS2.Text), ddlHimmelsrichtungl2.SelectedValue, Convert.ToDouble(long2.Text), Convert.ToDouble(tbLongMM2.Text), Convert.ToDouble(tbLongSS2.Text));
    }
    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void DropDownList4_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}


so, jetzt soll man es am besten wie folgt eingeben können :





auch wenn ich euch endlos nerve...bitte helft mir....danke schonmal für alles bisherige und danke auch für alles kommende !!!
Attachments
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo Stube,
Du hast in Deinem letztem Post vergessen zu schreiben worin Dein aktuelles Problem eigentlich besteht... Also, was klappt denn noch nicht? Wenigstens ein Hinweis, damit man sich nicht durch den ganzen Code fressen muss um nach einem Fehler zu suchen, den man nicht kennt 8o
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

oh ^^ ja also mein problem ist, dass ich nicht weiß,wie ich das so umschreiben kann,dass man es so wie in dem unten angegebenem bild eingeben kann.
Außerdem sagt er hierbei (auszug aus gps1.aspx.cs)


Entfernung1.Text = CDistanceBetweenLocations.Calc(ddlHimmelsrichtungb1.SelectedValue, Convert.ToDouble(lat1.Text), Convert.ToDouble(tbLatMM1.Text), Convert.ToDouble(tbLatSS1.Text), ddlHimmelsrichtungl1.SelectedValue, Convert.ToDouble(long1.Text), Convert.ToDouble(tbLongMM1.Text), Convert.ToDouble(tbLongSS1.Text), ddlHimmelsrichtungb2.SelectedValue, Convert.ToDouble(lat2.Text), Convert.ToDouble(tbLatMM2.Text), Convert.ToDouble(tbLatSS2.Text), ddlHimmelsrichtungl2.SelectedValue, Convert.ToDouble(long2.Text), Convert.ToDouble(tbLongMM2.Text), Convert.ToDouble(tbLongSS2.Text));

"Keine Überladung für die Methode Calc erfordert 16-Argumente"
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
Zitat
Keine Überladung für die Methode Calc erfordert 16-Argumente
Das ist klar. Die Methode Calc erwartete ja auch nur 12 Argumente -> du hast keine Übergabegabeparameter für die Sekundenanteile!!
Ansonsten ist das glaube ich schon ganz ok wie's ist. In der Methode Calc solltest Du allerdings statt

double NS1Sign = NS1.ToUpper() == "N" ? 1.0 : -1.0;
das hier verwenden:

double NS1Sign = NS1.ToUpper().StartsWith("N") ? 1.0 : -1.0;
, sonst bist Du immer auf der Südhalbkugel, weil der übergebene String nicht "N" sonder "Nord" lautet

EDIT: Hast Du Dir das Code-Beispiel aus meinem vorletzten Post mal angeschaut? Da wird Dir quasi die ganze Arbeit abgenommen!
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

danke, aber wie kann ich das denn machen,dass ich die sekundenanteile dabei habe ?
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Zitat
Original von Stube
danke, aber wie kann ich das denn machen,dass ich die sekundenanteile dabei habe ?
So:

    public static double Calc(string NS1, double Lat1, double Lat1Min, double Lat1Sec, string EW1, double Long1, double Long1Min, double Long1Sec, string NS2, double Lat2, double Lat2Min, double Lat2Sec, string EW2, double Long2, double Long2Min, double Long2Sec)
    {
        double NS1Sign = NS1.ToUpper() == "N" ? 1.0 : -1.0;
        double EW1Sign = NS1.ToUpper() == "E" ? 1.0 : -1.0;
        double NS2Sign = NS2.ToUpper() == "N" ? 1.0 : -1.0;
        double EW2Sign = EW2.ToUpper() == "E" ? 1.0 : -1.0;
        return (Calc(
            (Lat1 + (Lat1Min / 60) + (Lat1Sec/3600)) * NS1Sign,
            (Long1 + (Long1Min / 60) + (Long1Sec/3600) * EW1Sign,
            (Lat2 + (Lat2Min / 60) + (Lat2Sec/3600))  * NS2Sign,
            (Long2 + (Long2Min / 60)+ (Long2Sec/3600)) * EW2Sign
            ));[IMG]wiefolgt[/IMG]
    }
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

Dann sieht es jetzt so aus bei mir :



    public static double Calc(string NS1, double Lat1, double Lat1Min, double Lat1Sec, string EW1, double Long1, double Long1Min, double Long1Sec, string NS2, double Lat2, double Lat2Min, double Lat2Sec, string EW2, double Long2, double Long2Min, double Long2Sec)
    {
        double NS1Sign = NS1.ToUpper() == "N" ? 1.0 : -1.0;
        double EW1Sign = NS1.ToUpper() == "E" ? 1.0 : -1.0;
        double NS2Sign = NS2.ToUpper() == "N" ? 1.0 : -1.0;
        double EW2Sign = EW2.ToUpper() == "E" ? 1.0 : -1.0;
        return (Calc(
            (Lat1 + (Lat1Min / 60) + (Lat1Sec/3600)) * NS1Sign, (Long1 + (Long1Min / 60) + (Long1Sec/3600) * EW1Sign, (Lat2 + (Lat2Min / 60) + (Lat2Sec/3600))  * NS2Sign, (Long2 + (Long2Min / 60)+ (Long2Sec/3600)) * EW2Sign));
    }

    public static void Main(string[] args)
    {
        if (args.Length < 12)
        {
            System.Console.WriteLine("usage: DistanceBetweenLocations" + 
                    " N 43 35.500 W 80 27.800 N 43 35.925 W 80 28.318");
            return;
        }
        [code]System.Console.WriteLine(Calc(
            args[0], 
            System.Double.Parse(args[1]), 
            System.Double.Parse(args[2]), 
            args[3], 
            System.Double.Parse(args[4]), 
            System.Double.Parse(args[5]), 
            args[6], 
            System.Double.Parse(args[7]), 
            System.Double.Parse(args[8]), 
            args[9], 
            System.Double.Parse(args[10]), 
            System.Double.Parse(args[11])));[/code]

    }
Bei dem System.Console.WriteLine sagt er jetzt jedoch mal wieder folgendes :
"Keine Überladung für die Methode Calc erfordert 12 Argumente" hmmm


Edit: und hinter das "EW1Sign," oben soll ich ne klammer machen,sagt er

also hier :


return (Calc(
            (Lat1 + (Lat1Min / 60) + (Lat1Sec/3600)) * NS1Sign, (Long1 + (Long1Min / 60) + (Long1Sec/3600) *

 EW1Sign,  <- hier soll ne klammer hin ")"

(Lat2 + (Lat2Min / 60) + (Lat2Sec/3600))  * NS2Sign, (Long2 + (Long2Min / 60)+ (Long2Sec/3600)) * EW2Sign));
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
das liegt daran, daß du die gleiche Funktion einemal mit 12 (im Main()) und eimal mit 16 Parametern aufrufst... Dann wäre es vielleicht besser, die Funktion Calc() in beiden Varianten stehen zu lassen. Oder Du übergibst die Sekundenanteile auch an Dein Main() und rufst dann mit allen 16 Parametern auf.
Die gleiche Funktion mit verschiedener Anzahl typisierter Parameter Aufrufen geht in C# nicht, aber dafür gibts ja eben die Polymorphie
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

dankö,dankö,vielen dankö super hilfe *Thumbs Up*

danke danke danke
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

nen kleines problemchen habsch dann aber doch noch....


   public static class CDistanceBetweenLocations
{

    public static double Calc(string NS1, double Lat1, double Lat1Min, double Lat1Sec, string EW1, double Long1, double Long1Min, double Long1Sec, string NS2, double Lat2, double Lat2Min, double Lat2Sec, string EW2, double Long2, double Long2Min, double Long2Sec)
    {
        double NS1Sign = NS1.ToUpper() == "N" ? 1.0 : -1.0;
        double EW1Sign = NS1.ToUpper() == "E" ? 1.0 : -1.0;
        double NS2Sign = NS2.ToUpper() == "N" ? 1.0 : -1.0;
        double EW2Sign = EW2.ToUpper() == "E" ? 1.0 : -1.0;
        return (Calc(
            (Lat1 + (Lat1Min / 60) + (Lat1Sec/3600)) * NS1Sign, (Long1 + (Long1Min / 60) + (Long1Sec/3600)) * EW1Sign, (Lat2 + (Lat2Min / 60) + (Lat2Sec/3600))  * NS2Sign, (Long2 + (Long2Min / 60)+ (Long2Sec/3600)) * EW2Sign));
    }

    public static void Main(string[] args)
    {
        if (args.Length < 12)
        {
            System.Console.WriteLine("usage: DistanceBetweenLocations" + 
                    " N 43 35.500 W 80 27.800 N 43 35.925 W 80 28.318");
            return;
        }
        System.Console.WriteLine(Calc(
            args[0], 
            System.Double.Parse(args[1]), 
            System.Double.Parse(args[2]), 
            System.Double.Parse(args[3]), 
            args[4], 
            System.Double.Parse(args[5]), 
            System.Double.Parse(args[6]), 
            System.Double.Parse(args[7]), 
            args[8], 
            System.Double.Parse(args[9]), 
            System.Double.Parse(args[10]),
            System.Double.Parse(args[11]), 
            args[12], 
            System.Double.Parse(args[13]), 
            System.Double.Parse(args[14]), 
            System.Double.Parse(args[15])));

    }
}

Bei dem return Calc sagt er mir,dass Calc 4 Argumente fordert...was kann ich dagegen machen ?
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
Zitat
Bei dem return Calc sagt er mir,dass Calc 4 Argumente fordert...was kann ich dagegen machen ?
Du übergibst doch 4 Argumente. Ich habe Deinem Code folgende Dummyfunktion mit 4 Parametern hinzugefügt

    public static double Calc(double Lat1,double Long1,double Lat2,double Long2)
    {
      // Hier soll wohl die "eigentliche" Arbeit passieren, ich hab zum testen einfach mal 0 zurückgegeben:
      return 0;
    }
und das dann kompiliert. Keinen Fehler festgestellt, ist so gelaufen.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

Nach zahlreichem hin und her probieren gehts immernoch nit
Ich zeig euch mal grade die Klasse :


using System;
public static class CDistanceBetweenLocations
{
    //public static double Calc(double Lat1, double Long1, double Lat2, double Long2)
    //{
    //    return Math.Acos(Math.Sin(deg2rad(Lat1)) * Math.Sin(deg2rad(Lat2)) +
    //                        Math.Cos(deg2rad(Lat1)) * Math.Cos(deg2rad(Lat2)) * Math.Cos(deg2rad(Long2 - Long1))) * 6371 / 1.825;
    //}

    //private static double deg2rad(double deg)
    //{
    //    return (deg * Math.PI / 180.0);
    //}
 
    public static double Calc(string NS1, double Lat1, double Lat1Min, double Lat1Sec, string EW1, double Long1, double Long1Min, double Long1Sec, string NS2, double Lat2, double Lat2Min, double Lat2Sec, string EW2, double Long2, double Long2Min, double Long2Sec)
    { 
     
        
        double NS1Sign = NS1.ToUpper().StartsWith("N") ? 1.0 : -1.0;
        double EW1Sign = EW1.ToUpper().StartsWith("O") ? 1.0 : -1.0;
        double NS2Sign = NS2.ToUpper().StartsWith("N") ? 1.0 : -1.0;
        double EW2Sign = EW2.ToUpper().StartsWith("O") ? 1.0 : -1.0;
        return distance(
            (Lat1 + (Lat1Min / 60) + (Lat1Sec / 3600)) * NS1Sign,
            (Long1 + (Long1Min / 60) + (Long1Sec / 3600)) * EW1Sign,
            (Lat2 + (Lat2Min / 60) + (Lat2Sec / 3600)) * NS2Sign,
            (Long2 + (Long2Min / 60) + (Long2Sec / 3600)) * EW2Sign, 'N');
    }
    
    public static void Main(string[] args)
    {
        if (args.Length < 12)
        {
            System.Console.WriteLine("usage: DistanceBetweenLocations" + 
                    " N 43 35.500 W 80 27.800 N 43 35.925 W 80 28.318");
            return;
        }
        System.Console.WriteLine(Calc(
            args[0],
            System.Double.Parse(args[1]), 
            System.Double.Parse(args[2]), 
            System.Double.Parse(args[3]), 
            args[4], 
            System.Double.Parse(args[5]), 
            System.Double.Parse(args[6]), 
            System.Double.Parse(args[7]), 
            args[8], 
            System.Double.Parse(args[9]), 
            System.Double.Parse(args[10]),
            System.Double.Parse(args[11]), 
            args[12], 
            System.Double.Parse(args[13]), 
            System.Double.Parse(args[14]), 
            System.Double.Parse(args[15])));

    }
    

    private static double distance(double lat1, double long1, double lat2, double long2, char unit) {
  double theta = long1 - long2;
  double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
  dist = Math.Acos(dist);
  dist = rad2deg(dist);
  dist = dist * 60 * 1.1515;
  if (unit == 'K') {
    dist = dist * 1.609344;
  } else if (unit == 'N') {
  	dist = dist * 0.8684;
    }
  return (dist);
}

private static double deg2rad(double deg) {
  return (deg * Math.PI / 180.0);
}

private static double rad2deg(double rad) {
  return (rad / Math.PI * 180.0);
}

}
  


Das problem ist, dass er,wenn ich überall die gleichen koordinaten eingebe, trotzdem noch 172 Nautische Meilen Entfernung anzeigt... das kann ja schon gar nicht stimmen... alle anderen entfernungen werden natürlich auch falsch ausgegeben....
ich bin am verzweifeln
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo Stube,

using System;
public static class CDistanceBetweenLocations
{
  public static double Calc(double Lat1, double Long1, double Lat2, double Long2)
  {
    return Math.Acos(Math.Sin(deg2rad(Lat1)) * Math.Sin(deg2rad(Lat2)) +
                        Math.Cos(deg2rad(Lat1)) * Math.Cos(deg2rad(Lat2)) * Math.Cos(deg2rad(Long2 - Long1))) * 6371 / 1.825;
  }

  private static double deg2rad(double deg)
  {
    return (deg * Math.PI / 180.0);
  }

  public static double Calc(string NS1, double Lat1, double Lat1Min, double Lat1Sec, string EW1, double Long1, double Long1Min, double Long1Sec, string NS2, double Lat2, double Lat2Min, double Lat2Sec, string EW2, double Long2, double Long2Min, double Long2Sec)
  {


    double NS1Sign = NS1.ToUpper().StartsWith("N") ? 1.0 : -1.0;
    double EW1Sign = EW1.ToUpper().StartsWith("O") ? 1.0 : -1.0;
    double NS2Sign = NS2.ToUpper().StartsWith("N") ? 1.0 : -1.0;
    double EW2Sign = EW2.ToUpper().StartsWith("O") ? 1.0 : -1.0;
    return Calc(
        (Lat1 + (Lat1Min / 60) + (Lat1Sec / 3600)) * NS1Sign,
        (Long1 + (Long1Min / 60) + (Long1Sec / 3600)) * EW1Sign,
        (Lat2 + (Lat2Min / 60) + (Lat2Sec / 3600)) * NS2Sign,
        (Long2 + (Long2Min / 60) + (Long2Sec / 3600)) * EW2Sign);
  }

  public static void Main(string[] args)
  {
    System.Console.WriteLine(Calc(
        "N", 43, 35, 30, "W", 80, 27, 48, "N", 43, 35, 30, "W", 80, 27, 48));
    Console.ReadLine();
  }
}
liefert bei mir das gewünschte Ergebnis: Die Koordinaten sind für beide Punkte gleich, und das Ergebnis ist null. Ändert man die Parameter, erhält man einen sinnvollen Wert. Ich habe zum Beispiel auch folgende Zeile probiert:
"N", 90, 0, 0, "W", 0, 0, 0, "S", 90, 0, 0, "W", 0, 0, 0 (Nordpol und Südpol)
und erhalte korrekterweise den halben Erdumfang.
Da das alles Code ist, der bei Dir schon drin stand, weiß ich jetzt wirklich nicht mehr wie ich Dir helfen soll -> bei mir klappt alles wie's soll.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Stube
myCSharp.de - Member



Dabei seit:
Beiträge: 112
Herkunft: Wildbergerhütte

Themenstarter:

beantworten | zitieren | melden

kannst du mir evtl auch den code von deiner aspx und aspx.cs seite geben ? ich krieg zu viel.....vielen dank....
Auch anfänger haben "mal" ne frage
private Nachricht | Beiträge des Benutzers