doppelte Daten löschen

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
Hallo,

Also 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
Hallo,
mir ist beim Schreiben ein kleiner Fehler unterlaufen, ich wollte eigentlich nur im ArcGis8-Forum posten.
Danke aber trotzdem.
Gruß Kreutz
Hallo Kreutz,

wo 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
Vielleicht hilft ja eine visuelle Kontrolle weiter:

Die 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
Hallo, auch ich bin daran interessiert,
ich 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
Hallo Petra,

du 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
Hallo Petra,

Uwes 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...
Hallo,

habe 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
Hallihallo h9140028,

sende 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
Hallo erneut,

hier 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
hallo uwe,

vielen dank
das funktioniert jetzt perfekt.

grüße aus wien

petar
Hallo,
danke 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
Hallo Kreutz,

es 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