Karte exportieren

Hallo Forum,

kann mir jemand sagen wie ich unter AV 9 einen definierten Koordinatenbereich als TIF-Datei mit Weltdatei exportieren kann?

In der Daten-Ansicht erhalte ich zwar eine Weltdatei, kann aber nur im Bildschirmverhältnis exportieren.

In der Layout-Ansicht hingegen habe ich alles was ich benötige (ich kann z.B. einen Koordinatenbereich einstellen) aber ich erhalte leider keine Weltdatei!

Gruß
GisMoe
Hallo GisMoe,

das geht meines Wissens so erst mal nicht, es sei denn du passt dir den Bildausschnitt jedesmal entsprechend an, was natürlich doof und ungenau ist. Ich hab ein VBA-Skript, das einen - auf Grundlage einer selektierten Grafik - abgegrenzten Map-Bereich in ein JPEG (+ JGW Worldfile) schreibt. Willst' haben?

Gruß, Mx.
Hallo Maixilla,

ja stimmt: Doof ungenau und falsches Seitenverhältnis!

"Selektierte Grafik" bedeutet das , dass ich z.B. ein Polygon als Abgrenzung verwenden kann? Wenn ja, dann: Haben wollen....;-))

Gruß
Gismoe
fände ich auch ne feine Sache.
Vielleicht kannste das Script ja irgendwo hochladen und den Link hier posten.

Unser Dank wäre dir sicher.

Alex
Habs jetzt mal getestet. Feine Sache.
Schönen Dank nochmal.
Hallo Maxilla,
danke für das Script. Klappt ausgezeichnet! Jetzt wo ich jpg durch tif ersetzt habe, ist es genau das was ich gesucht habe....

Gruß
Gisoe
Hi,

ich hab dazu auch noch ne Frage. Habe den Code dahingehend geändert, dass ich jetzt nen GeoTIFF ausgegeben bekomme. Sieht auch alles sehr gut. Wenn ich dann aber in die Eigenschaften des erzeugten Bildes schaue, ist bei Spatial Referenz nix eingetragen. Gibts da irgendne Möglichkeit dass direkt über den VBA-Code gemacht werden oder bleibt mir nur die Möglichkeit das im Nachhinein zu tun.

MfG
Alex
Hast du

Dim pExportTiff As IExportTIFF
Set pExportTiff = pExport
pExportTiff.GeoTiff = True

gesetzt?
Ich hab den Code mal dementsprechend dazugesetzt (siehe noch mal Kartenausschnitt exportieren). Bei mir funktioniert das auf diese Weise.
Ja habe ich. Hab jetzt gerad noch mal deins getestet und das gleiche.
Nicht das wir uns falsch verstehen. Der Extent is richtig gesetzt, aber normalerweise steht doch im GeoTIFF-Tag auch das Spatial Reference System drin.
In diesem Falle steht dort Undefined. Bei deinem Code auch.

Alex
Woher soll das GeoTIFF wissen, welchem Spatial Reference System deine Referenzierung entspricht?

In den GeoTIFF-Tag werden durch das Skript nur die Image/World-Koordinaten geschrieben. Welchem Koordinatensystem (GaußKrüger, UTM,...) das entspricht, ist durch die paar Zahlen ja nicht definiert.

Wenn du also das System im Tag haben willst, musst du es explizit in den Header schreiben. Wie das über das Skript ginge, weiß ich nicht - das mach ich bei Bedarf (denn meistens ist es irrelevant) über die ArcToolbox - Define Projection...

Maxilla
ok, ich hätte gedacht, dass man das aus dem Layer auslesen kann. Geht wahrscheinlich auch. Na hab ja nächste Woche Urlaub und wenn kein Schnee liegt ...
Über die Toolbox is klar.

Alex
Naja, laut GeoTiff-Spezifikation kann auch der EPSG-Code in die Tags geschrieben werden. ESRI macht's nur nicht, obwohl die Karte in meinen Tests immer einen Raumbezug hatte!!

GisMoe
So wie ich das sehe, schreibt ArcGIS sehr wohl die Spatial Reference (und auch den EPSG-Code) in die Tags, kann sie aber dann selbst nicht auslesen. Hier ein Test dazu:

Dies ist der Header eines mit meinem Code geschriebenen GeoTiffs:

------------------------------------
Geotiff_Information:
Version: 1
Key_Revision: 1.0
Tagged_Information:
ModelTiepointTag (2,3):
0 0 0
2506549.99 5626895.42 0
ModelPixelScaleTag (1,3):
0.59243679 0.59158295 0
End_Of_Tags.
Keyed_Information:
End_Of_Keys.
End_Of_Geotiff.

Corner Coordinates:
Upper Left ( 2506549.986, 5626895.422)
Lower Left ( 2506549.986, 5626477.765)
Upper Right ( 2506992.536, 5626895.422)
Lower Right ( 2506992.536, 5626477.765)
Center ( 2506771.261, 5626686.593)
------------------------------------

Die Datei ist über die Eckkoordinaten vernünftig georeferenziert, das Koordinatensystem aber nicht getagged. In den ArcGIS-Properties des GeoTIFFs ist die Spatial Reference undefiniert. Wenn man das Koordinatensystem nun in ArcCatalog über den Properties-Dialog der Datei definiert, sieht der Header so aus:

------------------------------------
Geotiff_Information:
Version: 1
Key_Revision: 1.0
Tagged_Information:
ModelTiepointTag (2,3):
0 0 0
2506549.99 5626895.42 0
ModelPixelScaleTag (1,3):
0.59243679 0.59158295 0
End_Of_Tags.
Keyed_Information:
GTModelTypeGeoKey (Short,1): ModelTypeProjected
GTRasterTypeGeoKey (Short,1): RasterPixelIsArea
GTCitationGeoKey (Ascii,236): "IMAGINE GeoTIFF Support
Copyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved
@(#)$RCSfile: egtf.c $ $Revision: 1.11.2.3 $ $Date: 2004/11/24 09:12:56EST $
Projection Name = WGS_1984_UTM_Zone_12N
Units = meters
GeoTIFF Units = meters"
ProjectedCSTypeGeoKey (Short,1): PCS_WGS84_UTM_zone_12N
PCSCitationGeoKey (Ascii,205): "IMAGINE GeoTIFF Support
Copyright 1991 - 2001 by ERDAS, Inc. All Rights Reserved
@(#)$RCSfile: egtf.c $ $Revision: 1.11.2.3 $ $Date: 2004/11/24 09:12:56EST $
UTM Zone 12N
Ellipsoid = WGS 84
Datum = WGS 84"
ProjLinearUnitsGeoKey (Short,1): Linear_Meter
End_Of_Keys.
End_Of_Geotiff.

PCS = 32612 (name unknown)
Projection = 16012 ()
Projection Method: CT_TransverseMercator
ProjNatOriginLatGeoKey: 0.000000 ( 0d 0' 0.00"N)
ProjNatOriginLongGeoKey: -111.000000 (111d 0' 0.00"W)
ProjScaleAtNatOriginGeoKey: 0.999600
ProjFalseEastingGeoKey: 500000.000000 m
ProjFalseNorthingGeoKey: 0.000000 m
GCS: 4326/WGS 84
Datum: 6326/World Geodetic System 1984
Ellipsoid: 7030/WGS 84 (6378137.00,6356752.31)
Prime Meridian: 8901/Greenwich (0.000000/ 0d 0' 0.00"E)
Projection Linear Units: 9001/metre (1.000000m)

Corner Coordinates:
Upper Left ( 2506549.986, 5626895.422)
Lower Left ( 2506549.986, 5626477.765)
Upper Right ( 2506992.536, 5626895.422)
Lower Right ( 2506992.536, 5626477.765)
Center ( 2506771.261, 5626686.593)
------------------------------------

Auch jetzt ist das GeoTIFF noch durch die selben Eckkordinaten georeferenziert, der Tag benennt nun aber zusätzlich auch die Spatial Reference. Schaut man jetzt mit ArcGis in die Properties des GeoTIFFs ist die Spatial Reference belegt.

ArcGIS liest diese aber nun offenbar nicht aus dem GeoTIFF-Header, sondern aus dem nebenbei erzeugten AUX-File. Das merkt man, wenn man das AUX einfach löscht. Dann ist die Spatial Reference für ArcGIS wieder 'Undefined', obwohl sie ja eigentlich ausführlich im GeoTIFF-Header steht. Coole Sache...

Wenn das alles so stimmt, wäre das Fazit: Schulzibabe muss in seinem Urlaub den Code so umbasteln, dass ein AUX-File mitexportiert wird.

Maxilla
Hallo Maxilla,

was muss man machen damit die Spatial Reference mit getagged wird? Ich hatte dem Datenrahmen und dem Layer einen Raumbezug mitgegeben. Trotzdem brachte mir listgeo nur die Eckkoordinaten für die exportierte Tif-Datei.

Oder hast du dieser neuen Tif-Datei nachträglich noch einen Raumbezug gegeben?

Gruß
Gismoe
Hallo Gismoe,

ich habe - wie gesagt - nachträglich im ArcCatalog die Properties des GeoTIFFs geöffnet und dort die Spatial Reference zugewiesen (wahrscheinlich geht's auch über das 'Define Projection'-Tool, hab ich aber net ausprobiert). Um die Änderungen zuzuweisen, ist es am Besten ArcCatalog danach komplett zu schließen.

ListGeo hat mir entsprechend dieses Vorgehens vorher den einen, nachher den anderen der oben geposteten Header angezeigt.

Ich wollte damit nur sagen:
ArcGis tagged das Koordinatensystem grundsätzlich schon, NICHT aber über das pExportTiff.GeoTiff = True. Und: ArcGis tagged das Koordinatensystem im GeoTIFF, liest den Tag dann aber nicht aus.

Wie auch immer, mir ist's wurscht denn meistens reicht mir - wie vom Skript geschrieben - die reine Georeferenzierung im Tag oder im Worldfile.

Hier aber noch ein ganz interessanter Artikel dazu: Using ArcCatalog ... to Complete and Correct GeoTIFF Headers

Mx.
Hast vollkommen recht, reicht ja auch.
Und mit dem Code basteln war nur nen Spass. Bin da nich so die große Leuchte und schon ganz stolz auf mich nen GeoTiff rausbekommen zu haben.

Alex
Noch nen kleiner Nachtrag. Hab jetzt nochmal deine Schritte nachvollzogen. Aber selbst wenn ich die *.aux bei mir lösche bleibt die Spatial Reference im GeoTiff-Header erhalten. Mit listgeo und ArcMap und ArcCatalog getestet.

Alex
Hallo Alex,

AV geht in der folgenden Reihenfolge vor:

1. Header
2. AUX-File
3. World-File

Das bedeutet meines Erachtens: Aux gelöscht (Info steht weiterhin im Header) - TIF-Datei wird geladen, dann wird automatisch eine neue Aux erstellt.

Gruß
GisMoe
Hallo zusammen,

ich habe Maxillas Codes heruntergeladen und als *.txt gespeichert. Wie wende ich sie nun aber an? Muss man Scripte als VBA speichern oder so?
Wie man in AV 3.X Scripte einließt weiß ich, wie mache ich das aber in ArcGIS 9? Habe leider beim Suchen nichts gefunden, sonst würde ich nicht fragen.

Gruß Carsten
Hallo Maxilla,

beim Kompilieren erhalte ich die Fehlermeldung:

"Mehrdeutiger Name: FlipLineVersion" in der Zeile:

Public Property Get FlipLineVersion() As UID

Was kann das bedeuten?

Gruß Carsten
Ömm, dieser Text kommt in meinem Code gar nicht vor. Wie hast du's denn gemacht?
Also, den Text von Uwe Lange kopiert und als *.txt-Datei gespeichert.

Eine *.mxd geladen und im Menü: Werkzeuge > Makros > Makros geöffnet;
Name vergeben, erstellen geklickt. Anschließend deinen Text hinein kopiert.

Fortsetzen klicken = "Fehler End Sub erwartet"

Zeile: "End Sub" ganz am Ende gelöscht. Dann wieder kompiliert.

Zeile : Sub Test ganz am Anfang gelöscht. Dann wieder kompiliert.

Fehler =
"Mehrdeutiger Name: FlipLineVersion" in der Zeile:
Public Property Get FlipLineVersion() As UID

Hierbei wird allerdings die normal.mxd geöffnet.

Gruß Carsten

PS: Ist halt das erste Mal, dass ich sowas ausprobiere!!!
Ja, so kann man das u.A. machen, da gibt es zahlreiche Möglichkeiten. Dennoch: Der Text "Public Property Get FlipLineVersion()" kommt in meinem Code nicht vor. Woher kommt der? Startest du da evtl. ein ganz anderes Makro aus der Liste?

Sonst probier's mal so:

- Die Dateierweiterung des Codes in .bas ändern
- In ArcMap den Visual Basic Editor öffnen
- Dort im 'Projekt'-Fenster das gewünschte Projekt wählen
- Mit Rechtsklick - Import file - die BAS-Datei importieren
- Den VB-Editor schließen
- Über 'Tools - Macros - Macros' auswählen und ausführen
Hallo Maxilla,

bei mir wird beim Kompilieren immer die normal.mxt gestartet. Ich glaube, ich habe eine Erweiterung geladen, die vielleicht nicht für die Version 9.2 gedacht ist. Wie kann man denn eine defekte Erweiterung entfernen? Hinzufügen ist leicht, aber entfernen.

Gruß Carsten
Häufig muss die zugehörige DLL deregistriert werden. Das geht am einfachsten, wenn du zuvor die Datei register_in_menu.reg im Programmverzeichnis ..\ArcGIS\DeveloperKit\Tools doppelklickst. Daraufhin kannst du DLLs in deinem Dateimanager mit der rechten Maustaste traktieren und 'Unregister' anwählen.

Bei 'alten' Erweiterungen, die vor dem 9.2 Update nicht deinstalliert worden sind, gibt es aber anscheinend Probleme, siehe hier.
DeveloperKit habe wir nicht installiert. Die beiden *.reg-Dateien die sich im Ordner befinden, sind es leider nicht. Kann ich den Eintrag auch mit "regedit" suchen?

Gruß Carsten
So, habe die Erweiterung deinstallieren können und das Script als Button in der Menüleiste unterbringen können. Leider schon wieder Probleme.

Habe in ArcMap shapes geladen ein Rechteck gezeichnet es aktiviert und dem Datenrahmen ein Koordinatensystem zugewiesen. Wenn ich nun das Script ablaufen lassen. Kommt folgende Fehlermeldung:

Error in ExportMap2_GraphDelimited: Fehler bei Dateierstellung

Gruß Carsten
Der Dateipfad ist auf "D:/Temp" festgelegt. So einen Ordner hast du wahrscheinlich nicht.

Du kannst das im Code verändern, und zwar an dieser Stelle:

'----- MODIFY FILENAME AND OUTPUT PATH? -----
pathname = "d:\temp"
filename = "Exp_" & pMap.Name & ".jpg"
Was man alles so machen kann....

Super, vielen Dank - schon wieder viel gelernt!

Gruß Carsten
Hallo zusammen,

würde diesen Forumseintrag gern nochmal aufwärmen.
Habe das Script damals erfolgreich genutzt, jetzt aber Probleme bekommen.
Kann das daran liegen, das ich jetzt die Version 9.2 verwende?

Also ich habe ein SRTM-Raster, dem ich eine Colortable zugewiesen habe und ein Hillshade(60%). Diese beiden Layer möchte ich nun exportieren.

Habe also das Fenster aufgezogen usw.. Funktioniert auch alles.

Wenn ich dann allerdings das erzeugte Tiff wieder in ArcMap einlade, stellt sich mir folgendes Phänomen dar.
Der Extent ist fast richtig. Er sollte zwischen dem hellgrünen und dem dunklen sein. Ist allerdings der innere Rahmen. Was mich jetzt stört ist, dass ich an der linken und der rechten Seite einen weißen Rand hab der zu meinem exportierten Bild gehört. Siehe URL.

http://img523.imageshack.us/my.php?image=exportem8 .jpg

Kann ich das irgendwie verhindern?

Geändert habe ich folgenes:

Dim pExportTiff As esriOutput.IExportTIFF
Set pExportTiff = pExport
pExportTiff.GeoTiff = True
pExportTiff.CompressionType = esriTIFFCompressionLZW

sowie die Input und Outputresolution.

schönen Gruß
Alex