ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS for Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

ArcMap

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Erweiterungen

Zuordnen von Eingabefeldern zu Ausgabefeldern

  • FieldMap
  • Fieldmappings
  • Beispiele

Ein häufig benötigter Geoverarbeitungs-Task besteht darin, viele Datasets in einem neuen oder vorhandenen Dataset zusammenzuführen, um ein einziges Dataset für eine größere Fläche oder eine Tabelle mit einer größeren Anzahl von Datensätzen zu erhalten. Häufig sind die Attribute oder Felder für alle in einem Zusammenführungs- und Anhängevorgang verwendeten Eingaben identisch. Gelegentlich stimmen sie jedoch nicht überein, und die Felder mit unterschiedlichen Namen und Typen müssen zugeordnet werden. Ein Beispiel für Feldzuordnungen liefert das Werkzeug Zusammenführen (Merge) in der Toolbox "Data Management"; es ermöglicht das Zuordnen von Beziehungen, sodass Daten mit den richtigen Werten in den gewünschten Ausgabefeldern platziert werden.

FieldMap

Das FieldMap-Objekt stellt eine Felddefinition und eine Liste von Eingabefeldern aus einer Reihe von Tabellen oder Feature-Classes bereit, die die entsprechenden Werte verfügbar machen.

Die Eigenschaften des FieldMap-Objekts enthalten die Anfangs- und die Endposition eines Eingabetextwertes, sodass ein neuer Ausgabewert mit einem Teil eines Eingabewertes erstellt werden kann. Wenn ein FieldMap-Objekt mehrere Eingabefelder aus derselben Tabelle oder Feature-Class enthält, werden die Werte aller Datensätze unter Verwendung der Eigenschaft MergeRule zusammengeführt. Dies ist eine benutzerfreundliche Möglichkeit zum Verbinden von Werten, beispielsweise eines Straßennamens in einem Feld und einer Straßenart, die in einem anderen Feld enthalten ist (z. B. "Eureka" und "Street"). Der joinDelimiter-Eigenschaft eines FieldMap-Objekts wird verwendet, wenn der mergeRule-Wert Join angegeben wird. Als Trennzeichen können beliebige Zeichen verwendet werden, beispielsweise Leerzeichen. Im obigen Beispiel würde damit der Wert "Eureka Street" erstellt.

Fieldmappings

Das FieldMappings-Objekt ist eine Sammlung von FieldMap-Objekten und wird als Parameterwert für Werkzeuge für die Feldzuordnung verwendet, beispielsweise Zusammenführen (Merge). Sie können am einfachsten mit diesen Objekten arbeiten, indem Sie zuerst ein FieldMappings-Objekt erstellen und dann die zugehörigen FieldMap-Objekte initialisieren, indem Sie die zu kombinierenden Eingabe-Feature-Classes oder Tabellen hinzufügen. Wenn alle Eingaben bereitgestellt wurden, enthält das FieldMappings-Objekt ein FieldMap-Objekt (bzw. ein Ausgabefeld) für jeden eindeutigen Feldnamen aus allen Eingaben. Sie können diese Liste ändern, indem Sie neue Felder hinzufügen, die Eigenschaften und/oder den Inhalt von Ausgabefeldern ändern oder unerwünschte Ausgabefelder entfernen.

Beispiele

Im folgenden Beispiel werden eine Reihe von Feature-Classes mit US-Volkszählungsdaten zusammengeführt, sodass eine neue Feature-Class entsteht. Eines der Eingabeattribute, das in allen Eingaben enthalten ist, ist das Zahlenfeld STFID. Dieser 15-stellige Wert ist eine eindeutige ID für alle Volkszählungsblöcke in den USA. Der Wert kann in vier Komponenten unterteilt werden. Die ersten zwei Stellen geben den Code für den Bundesstaat an, die nächsten drei den Landkreis, die folgenden sechs geben den Zählbezirk und die letzten vier den Volkszählungsblock an. Der Wert 360899912001006 stellt den Volkszählungsblock (1006) dar, der die State University of New York zu Potsdam im Bundesstaat New York (36) in den Zählbezirk 991200 des Landkreises St. Lawrence (089) enthält. Im Skriptbeispiel werden diese Feature-Classes zusammengeführt. Außerdem werden zwei neue Felder (TRACTID und BLOCKID) erstellt, da die Eingabedaten nur das Attribut STFID aufweisen. Hierzu wird das FieldMappings-Objekt mit der addTable-Methode initialisiert, um die einzelnen Eingaben anzugeben. Anschließend wird das FieldMappings-Standardobjekt geändert, indem zwei neue FieldMap-Objekte erstellt werden. Deren Eigenschaften werden festgelegt, und sie werden dem FieldMappings-Objekt hinzugefügt.

import arcpy
from arcpy import env

env.workspace = "C:/Data/CityBlocks.gdb"
outfc = "C:/Data/CityBlocks.gdb/AllBlocks"

# Each of the input Feature classes has an STFID, which is the
#   combination of the Tract ID and Block ID for each block. 
#   Separate these values out from this field into two new
#   fields, TRACTID and BLOCKID.
#

# Create a fieldmappings and two new fieldmaps.
#
fieldmappings = arcpy.FieldMappings()
fldmap_TRACTID = arcpy.FieldMap()
fldmap_BLOCKID = arcpy.FieldMap()

# List all the feature classes in the workspace that start with 
#   'block' in their name and are of polygon feature type.
#
fcs = arcpy.ListFeatureClasses("block*", "Polygon")

# Create a value table that will hold the input feature classes to Merge
#
vTab = arcpy.ValueTable()
for fc in fcs:
    # Adding a table is the fast way to load all the fields from the
    #   input into fieldmaps held by the fieldmappings object.
    #
    fieldmappings.addTable(fc)

    # In this example also create two fieldmaps by 'chopping up'
    #   an input field. Feed the chopped field into the new fieldmaps.
    #
    fldmap_TRACTID.addInputField(fc, "STFID")
    fldmap_BLOCKID.addInputField(fc, "STFID")
		
    # Populate the input value table with feature classes
    #
    vTab.addRow(fc)

# Set the starting and ending position of the fields going into the
#   TractID fieldmap. This is the location in the STFID field where the
#   TractID falls.
#
for x in range(0, fldmap_TRACTID.inputFieldCount):
    fldmap_TRACTID.setStartTextPosition(x, 5)
    fldmap_TRACTID.setEndTextPosition(x, 10)

# Set the Name of the Field output from this field map.
#
fld_TRACTID = fldmap_TRACTID.outputField
fld_TRACTID.name = "TRACTID"
fldmap_TRACTID.outputField = fld_TRACTID

# Set the starting and ending position of the fields going into the
#   BlockID fieldmap. This is the location in the STFID field where the
#   blockID falls.
#
for x in range(0, fldmap_BLOCKID.inputFieldCount):
    fldmap_BLOCKID.setStartTextPosition(x, 11)
    fldmap_BLOCKID.setEndTextPosition(x, 16)

# Set the Name of the Field output from this field map.
#
fld_BLOCKID = fldmap_BLOCKID.outputField
fld_BLOCKID.name = "BLOCKID"
fldmap_BLOCKID.outputField = fld_BLOCKID

# Add the custom fieldmaps into the fieldmappings object.
#
fieldmappings.addFieldMap(fldmap_TRACTID)
fieldmappings.addFieldMap(fldmap_BLOCKID)

# Run the Merge tool.
#
arcpy.Merge_management(vTab, outfc, fieldmappings)

Im nächsten Beispiel wird veranschaulicht, wie ein FieldMap-Objekt nach dem Erstellen mit der addTable-Methode des FieldMappings-Objekts geändert wird. Dies ist wichtig, wenn die Eingaben Felder mit unterschiedlichen Namen aufweisen, sie jedoch in logischer Hinsicht dieselben Werte enthalten.

import arcpy

outfc = "C:/data/CityData.gdb/AllBlocks"

# Want to merge these two feature classes together. Have a field
#   that has the same content but the names are slightly different:
#   Blocks1 has TRACT2000 and Blocks2 TRACTCODE. Name the output
#   the same as Blocks1.
#
fc1 = "C:/data/CityData.gdb/Blocks1"
fc2 = "C:/data/CityData.gdb/Blocks2"

# Create a new fieldmappings and add the two input feature classes.
#
fieldmappings = arcpy.FieldMappings()
fieldmappings.addTable(fc1)
fieldmappings.addTable(fc2)

# First get the TRACT2000 fieldmap. Then add the TRACTCODE field
#   from Blocks2 as an input field. Then replace the fieldmap within
#   the fieldmappings object.
#
fieldmap = fieldmappings.getFieldMap(fieldmappings.findFieldMapIndex("TRACT2000"))
fieldmap.addInputField(fc2, "TRACTCODE")
fieldmappings.replaceFieldMap(fieldmappings.findFieldMapIndex("TRACT2000"), fieldmap)

# Remove the TRACTCODE fieldmap.
#
fieldmappings.removeFieldMap(fieldmappings.findFieldMapIndex("TRACTCODE"))

# Create a value table that will hold the inputs for Merge.
#
vTab = arcpy.ValueTable()
vTab.addRow(fc1)
vTab.addRow(fc2)

# Run the Merge tool.
#
arcpy.Merge_management(vTab, outfc, fieldmappings)

Verwandte Themen

  • FieldMappings
  • FieldMap
  • Verwenden des Steuerelements "Feldzuordnung"

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS Plattform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Esri Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2019 Esri. | Datenschutz | Rechtliches