• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

wie ist eine shape-datei aufgebaut?

spunky

Geocacher
weiß vielleicht einer wie die koordinaten in einer shape-datei abgelegt sind? den aufbau einer shape-datei hab ich hier gefunden und scheint auch nicht sonderlich kompliziert zu sein, nur bei den koordinaten blick ich nicht durch, hat viellicht einer ein beispiel wie man die umrechnet?

http://www.wotsit.org/download.asp?f=shp

würde gern aufgezeichnete strecken und flächen selber als shape abspeichern können.

mfg.
 

-tiger-

Geowizard
Shapes lesen und selbst erzeugen kann man am einfachsten mit "shapelib":

http://shapelib.maptools.org/

Die Tools shpcreate, shpadd und dbfadd sind die einfachste Methode Shapefiles anzulegen aber langsam. Für mehr Tempo gibts Bindings für alle möglichen Sprachen.

Wenn du jetzt noch koordinaten "umrechnen" musst, d.h. Shapefiles in eine andere Projektion übertragen musst, brauchst du noch OGR aus dem GDAL Paket:

http://www.remotesensing.org/gdal/ogr/

Damit sollten sich viele Shapefile-Probleme lösen lassen.

Tiger
 
OP
spunky

spunky

Geocacher
gibt's da auch was für pocket pc? aber lieber wäre es mir schon, wenn ich wüßte wie die koordinaten aufgebaut sind (sind je 4 byte für long und lat).

...danke, ich werd mal schauen.
 
OP
spunky

spunky

Geocacher
ja, kenne ich, ist das gleiche wie ganz oben der link. steht leider nichts drin, wie dort die koordinaten abgelegt werden, bzw. wie man sie in grad usw. zurückrechnen kann.
 

Bilbowolf

Geowizard
Lat Lon stehen nicht in der shape datei, sondern in der dbf.

Möchtest Du ein Programm schreiben, oder suchst Du ein Program?
 

sherlok

Geocacher
Bilbowolf schrieb:
Lat Lon stehen nicht in der shape datei, sondern in der dbf.
Das ist so nicht richtig, die Koordinaten stehen in der shape Datei und zwar als double. In der dbf Datei stehen im Regelfall Zusatzinformationen. Wenn man z.B. gpx Dateien ins Esri Shapeformat umwandelt steht in der dbf der Waypoint, die Beschreibung, der Typ des Caches usw.
Und noch als Hinweis an den Ausgangsposter, das Koordinatensystem wird in den shapefiles nicht festgelegt. Eine Shapedatei kann also durchaus auch Gaus Krüger oder UTM Koordinaten enthalten. Will man diese Koordinaten umrechnen ist eine eigenständige Koordinatentransformation notwendig. Dies leistet z.B. das Programm transdat, dieses Programm kann aus einer vorhandenen shapedatei eine neue mit einem anderen Koordinatensystem kreieren (in der Demoversion sind bis zu 1000 Punkte in einer Datei umrechenbar).
 
OP
spunky

spunky

Geocacher
ich möchte selbst was schreiben. in der dbf (normale excel-datenbank) stehen keine koordinaten, nur infos und beschreibungen zur jeweiligen shape.

hier mal ein einfaches viereck: http://rapidshare.de/files/18932293/viereck.rar.html (kann man z.b. mit arcpad anschauen, http://www.esri.com)

vielleicht hat jemand mal zeit zu schauen, wie man die koordinaten umrechnen kann.

edit:

mit "umrechnen" meine ich nicht in ein anderes koordinatensystem, sondern wie ich überhaupt die shape daten (2x8byte pro punkt) in koordinaten (lan, lot) darstellen kann.

in der shape steht z.b.: 85EB510065375141 000000E8A4B15541
das müßten dann diese GK sein: 4513172.005 5686931.625

aber wie kann man das nun umrechnen?

naja, notfalls muß ich mich damit abfinden und fertige programme benutzen.

danke erstmal
 

sherlok

Geocacher
spunky schrieb:
in der shape steht z.b.: 85EB510065375141 000000E8A4B15541
das müßten dann diese GK sein: 4513172.005 5686931.625
aber wie kann man das nun umrechnen?
naja, notfalls muß ich mich damit abfinden und fertige programme benutzen.
danke erstmal
Du willst also die Hexdarstellung einer Floatingpoint Zahl wieder in eine menschlich lesbare dezimalzahl umwandeln. Einen Tip dazu inkl. VB Code gibt es z.B. hier http://www.vbarchiv.net/archiv/tipp_details.php?pid=911%5C
Mal als kleiner Einstieg wenn du die 64 Bit Zahl in binärer Notation aufschreibst ergibt sich folgendes:
Bit 1 : Vorzeichen (0=+, 1=-)
Bit 2-11: Exponent
Rest: Mantisse

Nachtrag: so wird z.B. aus (Ausgabe von od -t x -j112 -w28 arbeitsliste_cs4_wpt.shp)
0000160 45e4e69f 40203826
0000170 8dc981bf 404a4522

die Werte (Ausgabe von od -t f8 -j112 -w28 arbeitsliste_cs4_wpt.shp)
0000160 8,109667000000000e+00
0000170 5,254011700000000e+01

od ist ein kleines Unix Kommandozeilenprogramm zur darstellung binärer Dateien.
-t gibt den Typ an (x = Hexadezimaldarstellung; f8 = Fließkommazahl mit 8 Bytes)
-j steht für den Dateioffsett (hier 112 Bytes)
-w gibt die Anzahl Bytes je Zeile an (hier 28 Bytes)

Nachtrag 2: Wenn du mit C bzw. C++ entwickelst kannst du es dir einfach machen, wenn deine interne Floatingpointdarstellung mit der Dateidarstellung übereinstimmt (64 Bit double).
Zum schreiben, nimmst du einfach die double Werte so wie sie bei dir intern gespeichert werden.
Also z.B. für C++:
double d;
ausgabe.write((char *)&d, sizeof(d));
Und zum lesen läuft es analog:
eingabe.read((char *)&d, sizeof(d));
 
Oben