PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Messwerte mit GPS Daten verknüpfen und Visualisieren. Wie???



wkrug
17.07.2011, 12:58
Hallo Leute,

ich möchte gerne Messwerte von Flächen ( Pflanzen- Bestandseigenschaften ) mit den dazugehörigen GPS Koordinaten verknüpfen und abspeichern.
Die Daten sollen gleich bei der Messung auf eine SD Karte geschrieben werden um sie dann am heimischen PC auszuwerten.
Das ich dazu einen ( Mikro- ) Controller, einen GPS Empfänger und die nötigen Messwertaufnehmer brauche ist mir klar.

Ich hätte diese Daten dann gerne als farbige Linien ( je nach Messwert ) am liebsten als Overlay über ein Satellitenbild gelegt.

Ich denke mal, das das mit Google Earth gehen müsste. Hat da schon jemand von Euch Erfahrung mit sowas?
Wäre so ein Vorhaben mit .kml Dateien möglich, die lokal auf dem Rechner sind?
Gibt es zu diesem Thema einfach zu verstehende Anleitungen wie man so eine .kml Datei erstellt.
Was ich bisher zu diesem Thema gefunden habe hat mich mehr verwirrt, als mir geholfen.

Richard
17.07.2011, 16:40
Hallo Leute,

ich möchte gerne Messwerte von Flächen ( Pflanzen- Bestandseigenschaften ) mit den dazugehörigen GPS Koordinaten verknüpfen und abspeichern.
Die Daten sollen gleich bei der Messung auf eine SD Karte geschrieben werden um sie dann am heimischen PC auszuwerten.
Das ich dazu einen ( Mikro- ) Controller, einen GPS Empfänger und die nötigen Messwertaufnehmer brauche ist mir klar.

Ich hätte diese Daten dann gerne als farbige Linien ( je nach Messwert ) am liebsten als Overlay über ein Satellitenbild gelegt.

Ich denke mal, das das mit Google Earth gehen müsste. Hat da schon jemand von Euch Erfahrung mit sowas?
Wäre so ein Vorhaben mit .kml Dateien möglich, die lokal auf dem Rechner sind?
Gibt es zu diesem Thema einfach zu verstehende Anleitungen wie man so eine .kml Datei erstellt.
Was ich bisher zu diesem Thema gefunden habe hat mich mehr verwirrt, als mir geholfen.

Ich habe einen Bluetooth GPS Empfänger und speichre die Daten in einer .TXT Datei, die sollte man auch umbenennen können. Wie das mit Google Earth gemacht wird? Soll aber gehen.

Gruß Richard

wkrug
17.07.2011, 18:14
Ich habe einen Bluetooth GPS Empfänger und speichre die Daten in einer .TXT Datei, die sollte man auch umbenennen können. Wie das mit Google Earth gemacht wird? Soll aber gehen.
Ich vermute mal, das Du da einfach die NMEA Daten in diese Textdatei schreibst.
Das wär ja im Prinzip auch so in Ordnung. Nur wie krieg ich da meine Messwertdaten unter, damit ich das mit einem Satellitenbild koppeln und visualisieren kann?

Richard
17.07.2011, 18:45
Ich vermute mal, das Du da einfach die NMEA Daten in diese Textdatei schreibst.
Das wär ja im Prinzip auch so in Ordnung. Nur wie krieg ich da meine Messwertdaten unter, damit ich das mit einem Satellitenbild koppeln und visualisieren kann?

Ja, stimmt. Wie Du jetzt (Deine Flächen) einfärben kannst? Google hat aber eine API heraus gebracht mit der man irgendwie "Einfluss" nehmen kann. Aber da bin ich wirklich überfragt.

Gruß Richard

holzi
18.07.2011, 05:53
Guten morgen,
mit txt-Dateien kannst du mit GoogleEarth nichts werden. Solch eine TXT-Datei musst du ins KML-Format konvertieren. Erst dann versteht sie Google. Mittels der GoogleEarth-AP und einem Java-Programm kannst du dann Polygone zeichnen für deine Flächen. Unter der GoogleEarth-Hilfe findest du dafür genug Beispiele. Für die Konvertierung ins KML-Format frag mal Dr.Google.

Tschüss Peter

wkrug
29.04.2012, 00:08
Ok, hab nach langer Zeit eine Lösung gefunden.
Eventuell gibt es da was, das noch optimaler ist.
Meine Dateien sehen jetzt folgendermassen aus:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>ReipData</name>
<description>Reip Datas from specified Crop. Note that the tessellate tag is by default
set to 0. If you want to create tessellated lines, they must be authored
(or edited) directly in KML.</description>
<Style id="705_26">
<LineStyle>
<color>ff2500DB</color>
<width>2</width>
</LineStyle>
</Style>
<Placemark>
<name>705_26</name>
<description>Reip 705,9 Deck 26%</description>
<styleUrl>#705_26</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>
<altitudeMode>clampToGround</altitudeMode>
<coordinates>
11.560925,49.023080,369
11.560925,49.023080,369
</coordinates>
</LineString>
</Placemark><Style id="706_26">
<LineStyle>
<color>ff2800D8</color>
<width>2</width>
</LineStyle>
</Style>
<Placemark>
<name>706_26</name>
<description>Reip 706,4 Deck 26%</description>
<styleUrl>#706_26</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>
<altitudeMode>clampToGround</altitudeMode>
<coordinates>
11.560925,49.023080,369
11.560928,49.023078,369
</coordinates>
</LineString>
</Placemark>
></Document>
</kml>
Damit ist es nun möglich 2 Messwerte mit Farbe und Breite einer Linie darzustellen.
Ein Codeschnipsel zu Erzeugen des Strings hab ich mal hier:

void handlelog(void)
{
unsigned char low=0,high=0;
unsigned int buffer=0,ui_i=0;
unsigned char text[400];
unsigned char sametext[14],reiptext[14];
switch (logstate)
{
case logoff:
if(LOGSW==0)
{
logstate=logstart;
}
break;

case logstart:
logstate=writeheader1;
logtimer=6;
break;

case writeheader1:
strcpyf(text,header1);
for (ui_i=0;ui_i<strlen(text);ui_i++)
{
putchar(text[ui_i]);
}
logstate=writeheader2;
break;

case writeheader2:
strcpyf(text,header2);
for (ui_i=0;ui_i<strlen(text);ui_i++)
{
putchar(text[ui_i]);
}
logstate=writeheader3;
break;

case writeheader3:
strcpyf(text,header3);
for (ui_i=0;ui_i<strlen(text);ui_i++)
{
putchar(text[ui_i]);
}
if(LOGSW==0)
{
oldlatx=latx;
oldlath=lath;
oldlatl=latl;
oldlongx=longx;
oldlongh=longh;
oldlongl=longl;
logstate=writedata;
}
else
{
logstate=writecloser;
}
break;

case writedata:
/* Hier müssen noch die REIP Daten für das File generiert
und an den SD CARD Reader übergeben werden
*/
/*
<Style id="720_50">
<LineStyle>
<color>ff800080</color>
<width>5</width>
</LineStyle>
</Style>
<Placemark>
<name>720-50</name>
<description>Reip 720, Deck 50</description>
<styleUrl>#720_50</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>
<altitudeMode>clampToGround</altitudeMode>
<coordinates>
11.561936,49.023278,2357
11.561935,49.023277,2357
11.561930,49.023277,2357
11.561927,49.023281,2357
</coordinates>
</LineString>
</Placemark>
*/
strcpyf(text,"<Style id=\"");
high=reip/10;
itoa(high,sametext),
strcpyf(reiptext,"7");
if(high<10){strcatf(reiptext,"0");}
strcat(reiptext,sametext);
strcatf(reiptext,"_");
itoa(deck,sametext);
strcat(reiptext,sametext);
strcat(text,reiptext);
strcatf(text,"\">\r\n");
strcatf(text,"<LineStyle>\r\n<color>ff");
buffer=reip*100;
buffer/=157;
high=buffer>>4;
low=buffer&0x0F;
if(high<10)
{
high+=0x30;
}
else
{
high+=0x37;
}
if(low<10)
{
low+=0x30;
}
else
{
low+=0x37;
}
sametext[0]=high;
sametext[1]=low;
sametext[2]='0';
sametext[3]='0';
buffer=256-buffer;
high=buffer>>4;
low=buffer&0x0F;
if(high<10)
{
high+=0x30;
}
else
{
high+=0x37;
}
if(low<10)
{
low+=0x30;
}
else
{
low+=0x37;
}
sametext[4]=high;
sametext[5]=low;
sametext[8]=0;
strcat(text,sametext);
strcatf(text,"</color>\r\n<width>");
low=deck/10;
if(low<1){low=1;}
itoa(low,sametext);
strcat(text,sametext);
strcatf(text,"</width>\r\n</LineStyle>\r\n</Style>\r\n<Placemark>\r\n<name>");
strcat(text,reiptext);
strcatf(text,"</name>\r\n<description>Reip 7"); //720, Deck 50</description>"
buffer=reip/10;
itoa(buffer,sametext);
if(buffer<10){strcatf(text,"0");}
strcat(text,sametext);
strcatf(text,",");
buffer=reip%10;
itoa(buffer,sametext);
strcat(text,sametext);
strcatf(text," Deck ");
itoa(deck,sametext);
strcat(text,sametext);
strcatf(text,"%</description>\r\n<styleUrl>#");
strcat(text,reiptext);
strcatf(text,"</styleUrl>\r\n<LineString>\r\n<extrude>1</extrude>\r\n<tessellate>1</tessellate>\r\n<altitudeMode>clampToGround</altitudeMode>\r\n<coordinates>\r\n");
if(oldlongx=='W'){strcatf(text,"-");}
itoa(oldlongh,sametext);
strcat(text,sametext);
strcatf(text,".");
ltoa(oldlongl,sametext);
if(oldlongl<100000){strcatf(text,"0");}
if(oldlongl<10000){strcatf(text,"0");}
if(oldlongl<1000){strcatf(text,"0");}
if(oldlongl<100){strcatf(text,"0");}
if(oldlongl<10){strcatf(text,"0");}
strcat(text,sametext);
strcatf(text,",");
if(oldlatx=='S'){strcatf(text,"-");}
itoa(oldlath,sametext);
strcat(text,sametext);
strcatf(text,".");
ltoa(oldlatl,sametext);
if(oldlatl<100000){strcatf(text,"0");}
if(oldlatl<10000){strcatf(text,"0");}
if(oldlatl<1000){strcatf(text,"0");}
if(oldlatl<100){strcatf(text,"0");}
if(oldlatl<10){strcatf(text,"0");}
strcat(text,sametext);
strcatf(text,",");
buffer=height/10;
itoa(buffer,sametext);
strcat(text,sametext);
strcatf(text,"\r\n");
if(longx=='W'){strcatf(text,"-");}
itoa(longh,sametext);
strcat(text,sametext);
strcatf(text,".");
ltoa(longl,sametext);
if(longl<100000){strcatf(text,"0");}
if(longl<10000){strcatf(text,"0");}
if(longl<1000){strcatf(text,"0");}
if(longl<100){strcatf(text,"0");}
if(longl<10){strcatf(text,"0");}
strcat(text,sametext);
strcatf(text,",");
if(latx=='S'){strcatf(text,"-");}
itoa(lath,sametext);
strcat(text,sametext);
strcatf(text,".");
ltoa(latl,sametext);
if(latl<100000){strcatf(text,"0");}
if(latl<10000){strcatf(text,"0");}
if(latl<1000){strcatf(text,"0");}
if(latl<100){strcatf(text,"0");}
if(latl<10){strcatf(text,"0");}
strcat(text,sametext);
strcatf(text,",");
buffer=height/10;
itoa(buffer,sametext);
strcat(text,sametext);
strcatf(text,"\r\n");
strcatf(text,"</coordinates>\r\n</LineString>\r\n</Placemark>");
for(ui_i=0;ui_i<strlen(text);ui_i++)
{
putchar(text[ui_i]);
}
//Prepare for next data record
oldlatx=latx;
oldlath=lath;
oldlatl=latl;
oldlongx=longx;
oldlongh=longh;
oldlongl=longl;
if(LOGSW!=0)
{
logstate=writecloser;
}
break;

case writecloser:
strcpyf(text,closer);
for (ui_i=0;ui_i<strlen(text);ui_i++)
{
putchar(text[ui_i]);
}
logstate=fileclosed;
logtimer=32;
break;
}
}
Ist sicher noch nicht optimal das Ganze, aber ein funktionierender Anfang.