Laden...

Gps Koordinaten eingeben und entfernung bestimmen

Erstellt von Stube vor 17 Jahren Letzter Beitrag vor 16 Jahren 18.636 Views
S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren
Gps Koordinaten eingeben und entfernung bestimmen

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 😁

S
8.746 Beiträge seit 2005
vor 17 Jahren
S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

😜 ich glaub ich habs mit google nicht drauf, deprimierend !

Auch anfänger haben "mal" ne frage 😁

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

D
222 Beiträge seit 2004
vor 17 Jahren

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);

3.170 Beiträge seit 2006
vor 17 Jahren

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

3.170 Beiträge seit 2006
vor 17 Jahren

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 😉

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

B
1.529 Beiträge seit 2006
vor 17 Jahren

@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.
563 Beiträge seit 2004
vor 17 Jahren

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

100 Beiträge seit 2006
vor 17 Jahren

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.

3.170 Beiträge seit 2006
vor 17 Jahren

@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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

@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 😁

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

D
222 Beiträge seit 2004
vor 17 Jahren
  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 )

3.170 Beiträge seit 2006
vor 17 Jahren

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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 !!!

Auch anfänger haben "mal" ne frage 😁

3.170 Beiträge seit 2006
vor 17 Jahren

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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,

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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

danke, aber wie kann ich das denn machen,dass ich die sekundenanteile dabei habe ?

Auch anfänger haben "mal" ne frage 😁

3.170 Beiträge seit 2006
vor 17 Jahren

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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

3.170 Beiträge seit 2006
vor 17 Jahren

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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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

danke danke danke 🙂

Auch anfänger haben "mal" ne frage 😁

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,

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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

3.170 Beiträge seit 2006
vor 17 Jahren

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

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

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 😁

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,

kannst du mir evtl auch den code von deiner aspx und aspx.cs seite geben ? ich krieg zu viel.....vielen dank.... 😠

hab ich nicht. hab nur die reine Funktion getestet, mit der Main() die in der Klasse steht 😦

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

Könntest du evtl probieren obs bei dir mit folgenden codes funktioniert :
Aspx:



<%@ 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 Aspx.Cs



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)).ToString();
    }
    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)
    {

    }
}
  


Auch anfänger haben "mal" ne frage 😁

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
hatte gar nicht gesehn dass Du eine MasterPage verwendest. Postest Du die bitte auch?

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren
 

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Unbenannte Seite</title>
</head>
<body>
                        <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
                        </asp:contentplaceholder>
</body>
</html>



oups 😁

Auch anfänger haben "mal" ne frage 😁

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
Du hast in der aspx-Datei die ID's für ddlHimmelsrichtungb2 und ddlHimmelsrichtungl2 vertauscht 😉
Sowas sollte man mit dem Debugger aber eigentlich finden 🤔

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
Stube Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

*kopfschüttel* oh man...danke marsstein marsstein ist hier glaubsch mein retter 😁 hab dir noch ne pm geschickt 🙂

Auch anfänger haben "mal" ne frage 😁

R
206 Beiträge seit 2007
vor 16 Jahren

Hallo...

Habe mir eine Klasse geschrieben (auch mit Hilfe eures Codes Gps Koordinaten eingeben und entfernung bestimmen - danke!) die Entfernungen usw ausrechnet...

Die Koordinaten, Postleitzahlen usw befinden sich in einer Datenbank.

ich möchte jetzt die 2 Punkte auf einer Karte (wie hier: http://www.koordinaten.de/cgi-ko/stadt_entfernung.cgi) anzeigen...

wie kann ich das realisieren.

Brauche das nicht fürs Web sondern normale Windows Anwendung...

Vielen Dank schonmal

100 Beiträge seit 2006
vor 16 Jahren

Hallo,

find ich lustig, dass dieser "alte" Thread wiederbelebt wurde 🙂

Ich habe mir damals eine (mehr schlecht als rechte) Funktion geschrieben, die als Eingabeparameter zwei Klassen erwartet, die im Grunde nur die zwingend notwendigen Daten kapseln.

GeoPoint point = Geographischer Punkt aus deiner Datenbank mit Längen- und Breitengrad.

GeoMap map = Geographische Daten deiner ausgewählten Karte. Desto genauer du die Extremwerte der Karte bezüglich Längen- und Breitengrad weißt, desto genauer sollte der angezeigte Punkt in der Karte werden.


        public static Point ScaleToScreen(GeoPoint point, GeoMap map)
        {
            double diff = map.Max.Longtitude - map.Min.Longtitude;
            double fact = map.SizeX / (diff);
            double plocal = (point.Longtitude - map.Min.Longtitude);
            double x = plocal * fact;

            diff = map.Max.Latitude - map.Min.Latitude;
            fact = map.SizeY / (diff);
            plocal = (point.Latitude - map.Min.Latitude);
            double y = plocal * fact;

            return new Point(Convert.ToInt32(x), Convert.ToInt32(y));
        }

R
206 Beiträge seit 2007
vor 16 Jahren

klingt gut...

nur wo bekomme ich so ne map her oder lege die daten dahinter?

100 Beiträge seit 2006
vor 16 Jahren

Wie ist diese Frage gemeint?

Wenn du beispielsweise mit deinem Programm Orte auf einer Deutschlandkarte anzeigen willst, dann mußt du dir eine passende Karte besorgen.
Man sollte sich bei "geliehenen" Grafiken jedoch auf freie Versionen beschränken sonst fängt man sich auch noch eine Klage ein.

Wikipedia.org bietet freie Grafiken, aber für Geobelange eine sehr magere Auswahl.
Beispielsweise eine Deutschlandkarte

Und dann entsprechend die Maxima der Karte (Links, Rechts,Oben,Unten) in deinem Programm mitgeben, damit eine Skalierung erfolgen kann.

R
206 Beiträge seit 2007
vor 16 Jahren

OK danke... Werds mal versuchen...

R
206 Beiträge seit 2007
vor 16 Jahren

Um das zu realisieren benötige ich ja dann die 4 extremwerte von Deutschland oder?

Also den westlichsten Punkt mache ich dann an y = 0 fest, den Südlichsten an x = 0 den Nördlichsten an z.b. y = 400 und den Östlichsten an x = 400.

Und dann kann ich meine Koordinaten richtig einzeichnen weil die Daten ja im richtigen Verhältniss an der Karte (oder nur weiße Fläche - is ja egal) hängen.

Oder hab ich was falsch verstanden?

Wie hänge ich die Infos an die Karte/Fläche?

MfG

edit


passt schon.. erstmal richtig ueberlegen 😁

R
206 Beiträge seit 2007
vor 16 Jahren

Hat super geklappt.....

Werd die Klasse fertig machen und dann posten..

Danke

100 Beiträge seit 2006
vor 16 Jahren

Glückwunsch 😉

Woher beziehst du die Stammdaten für dein Geographieprogramm?

Benutzt du vielleicht OpenGeoDB oder eher was kommerzielles?

R
206 Beiträge seit 2007
vor 16 Jahren

Genau!

OpenGeoDB!
Hab von OpenGeoDB die mySQL Daten verwendet...

Funktioniert alles sehr gut - Danke nochmal...

186 Beiträge seit 2007
vor 16 Jahren

Hallo,

ich beschäftige mich auch gerade ein wenig mit GPS und der Bestimmung von Entfernungen. Insbesondere interessiere ich mich für die Genauigkeit der Ergebnisse.

Wenn ich die Angaben von Längen- und Breitgrad in Grad, Minute und Sekunde habe, kann die maximale Genauigkeit 30m betragen kann. Der Grund: ein Grad (edit: Sekunde natürlich) entspricht etwa 30m. Meine Frage ist nun, geben die GPS-Empfänger auch genauere Informationen über die Position aus, als die GPS-Software anzeigt - oder geht es nicht genauer?

Vielen Dank
nordside