Hallo,
ich habe ein shapefile, das ich irgendwie mit dem "geoprocessing wizard", warscheinlich aus einem layer, vor längerer Zeit erzeugt habe. Jetzt sind alle Daten/Objekte doppelt vorhanden. Wie kann ich die doppelten Datensätze wieder löschen? Für eine manuelle Vorgehensweise sind es leider viel zu viele.
Danke schon jetzt
Kreutz
ich habe ein shapefile, das ich irgendwie mit dem "geoprocessing wizard", warscheinlich aus einem layer, vor längerer Zeit erzeugt habe. Jetzt sind alle Daten/Objekte doppelt vorhanden. Wie kann ich die doppelten Datensätze wieder löschen? Für eine manuelle Vorgehensweise sind es leider viel zu viele.
Danke schon jetzt
Kreutz
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Andreas Wolf am Fr., 19.11.2004 - 09:13
PermalinkAlso in ArcView 3.x kannst du die Doppelten Datensätze mit den Memotools
rausfiltern und dann löschen.
Ich weiß nicht womit du arbeitest, da du in beiden Foren gepostet hast.
Memotools
Gruß Andreas
Gespeichert von Kreutz am Fr., 19.11.2004 - 10:23
Permalinkmir ist beim Schreiben ein kleiner Fehler unterlaufen, ich wollte eigentlich nur im ArcGis8-Forum posten.
Danke aber trotzdem.
Gruß Kreutz
Gespeichert von uwelangehh am Fr., 19.11.2004 - 22:39
Permalinkwo wir aber gerade beim Thema sind, vielleicht geht es so:
' Autor: Uwe Lange, 2004
theFTab = av.getactivedoc.GetActiveThemes.Get(0).GetFTab
theShpfield = theFTab.FindField("Shape")
aListOfRecs = {}
For each rec1 in theFTab
myShape1= theFTab.ReturnValue(theShpField, rec1)
For each rec2 in theFTab
If (rec2 > rec1) Then
myShape2 = theFTab.ReturnValue(theShpField, rec2)
If (myShape1 = myShape2) Then
aListOfRecs.Add(rec2)
Msgbox.Info(rec2.AsString,"")
End
End
End
End
Msgbox.Info(aListOfRecs.Count.AsString + " Features werden geloescht!","")
theFTab.SetEditable(True)
For each rec in aListOfRecs
theFTab.RemoveRecord(rec)
End
theFTab.SetEditable(False)
Ohne Gewaehr, daher vorher bitte eine Kopie anlegen.
Gruss
Uwe.Lange(at)DB-GIS.de
Gespeichert von HeinzJ am Fr., 19.11.2004 - 22:48
PermalinkDie eine Hälfte der Datensätze markieren, in ein neues Thema, Shapedatei überführen und mit dem aktuellen Thema überlagern. Vielleicht, wenn es sich um polygone handelt noch ein Ausschneiden mit dem Geoprocessing anwenden.
Gruß, Heinz GISWiki-Forum / GISWiki
Gespeichert von h9140028 am Mo., 22.11.2004 - 10:38
Permalinkich würde gerne polygone und linien überprüfen - da mir aufgefallen ist, dass manchmal beim verschneiden fehler passieren.
daher meine frage - wie funktioniert das bei den memo-tools (ich habe die erweiterung 5.0).
ich habe extra 2 klein testfiles angelegt - in denen ich die fehler kenne - aber die M-Tools bieten nur doppelte punkte an, bzw. bei Shape.Clean passiert auch nichts.
uwelangehh: wie geht man mit deinem skript um?
danke
petra
Gespeichert von uwelangehh am Mo., 22.11.2004 - 11:16
Permalinkdu musst in einem View ein Feature-Thema aktivieren. Das Skript ist entweder ueber einen Button zu verknuepfen oder:
1. View aufrufen
2. Thema aktivieren
3. Ueber Window -> Mein Skript direkt in das Skript wechseln
4. Skript kompilieren
5. Skript laufen lassen
Gruss
Uwe
Gespeichert von Maxilla am Mo., 22.11.2004 - 11:38
PermalinkUwes Skript (das ich wirklich Klasse finde*) sucht dir Objekte raus, die exakt gleich sind. Mit den Memo-Tools kannst du z.B. Überlappungen zwischen Polygonen raussuchen und die überlappenden Bereiche genau lokalisieren.
Du solltest allerdings wirklich mal ein Update installieren: Memo Tools 5.6. Seit der 5.0er Version hat sich doch einiges getan...
Die besten Bereinigungs-Funktionen gibt's m.M.n. in den EditTools von Ianko Tchoukanski.
Maxilla
* Das sofortige Entfernen der Objekte würde ich allerdings vorsichtshalber durch eine Selektion ersetzen...
Gespeichert von h9140028 am Mo., 22.11.2004 - 13:53
Permalinkhabe natürlich sofort abgedatet - für polygone geht das ja super, aber für linien bin ich auf uwe's skript angewiesen.
daher folgende fragen:
wie schriebt man das sofortige entfernen in selektion um?
außerdem funktioniert das mit dem löschen bei mir nicht ganz einwandfrei. - ich habe ein testfile mit 5 linen, wobei ich 2 davon doppelt habe (also insgesamt 7 datensätze). im 1. durchgang wird einer der doppelten datensätze gelöscht, der zweite bleibt allerdings. erst im nächsten durchgang gehts dann weiter - kann man da eine schleife machen? (ich kenne mich in der skriptsprache leider überhaupt nicht aus)
lg
petra
Gespeichert von uwelangehh am Mo., 22.11.2004 - 14:07
Permalinksende gerne mal dein Shapefile an mich, damit ich das Skript an einem konkreten Beispiel testen kann, bei dem es nicht funktioniert.
Danke und bis denne
uwe.lange(at)db-gis.de
Gespeichert von uwelangehh am Mo., 22.11.2004 - 22:58
Permalinkhier eine ueberarbeitete Version des Skriptes:
' Autor: Uwe Lange, 2004
theFTab = av.getactivedoc.GetActiveThemes.Get(0).GetFTab
theShpfield = theFTab.FindField("Shape")
aListOfRecs = {}
For each rec1 in theFTab
myShape1= theFTab.ReturnValue(theShpField, rec1)
For each rec2 in theFTab
If (rec2 > rec1) Then
myShape2 = theFTab.ReturnValue(theShpField, rec2)
' Shapes identisch und rec noch nicht erfasst?
If ((myShape1 = myShape2) and
(aListOfRecs.Find(rec2) = -1)) Then
' Die Liste muss den Wert speichern, nicht die Referenz auf rec2!
aListOfRecs = aListOfRecs.Add(rec2.Clone)
End
End
End
End
Msgbox.Info(aListOfRecs.Count.AsString + " Features werden geloescht!","")
theFTab.SetEditable(True)
' Die recs absteigend sortieren
aListOfRecs.Sort(False)
For each rec in aListOfRecs
theFTab.RemoveRecord(rec)
Msgbox.Info(rec.AsString,"")
End
theFTab.SetEditable(False)
Die neuen Zeilen habe ich kommentiert. Es werden im uebrigen auch alle "doppelten" Datensaetze geloescht, wenn eine Geometrie mehr als zweimal vorkommt.
Danke fuer den Hinweis!
Gruss
Uwe
Gespeichert von h9140028 am Di., 23.11.2004 - 09:49
Permalinkvielen dank
das funktioniert jetzt perfekt.
grüße aus wien
petar
Gespeichert von Kreutz am Do., 25.11.2004 - 15:23
Permalinkdanke für die vielen Antworten, verstehe aber leider nicht alles.
Bezieht sich das "Skript" auf ArcView3 oder ArcGis8?
Wenn es sich auf ArcGis8 bezieht, was muß ich mit diesem Skript machen? Wo muß ich es einfügen , schreiben, etc.?
Ein ahnungsloser Gruß
Kreutz
Gespeichert von uwelangehh am Do., 25.11.2004 - 15:32
Permalinkes ist leider nur ArcView 3 gemeint. Allgemein gilt:
1. Wer Skript sagt, meint damit Avenue-Skript bzw. ArcView 3.x und wer ArcView 8.x oder hoeher meint, der sagt in der Regel VBA, Modul oder Prozedur.
2. Ausnahmen bestaetigen ...
Gruss
Uwe