Poniżej znajduje się sposób na uzyskanie dostępu do współrzędnych kształtu i szerokości geograficznej ESRI, między innymi bitami informacji, takimi jak odniesienie przestrzenne, atrybuty pola, wartości pola itp., Za pomocą Pythona. Poniższy kod działa tylko dla wielokątów i punktów (ponieważ nie zająłem się pisaniem kodu dla polilinii). Zasadniczo zebrałem trochę kodu, który znalazłem rozrzucony wokół ArcGIS Desktop Help 9.3, dodałem trochę moich i połączyłem w jedną funkcję. Został napisany w ArcGIS 9.3. Powinieneś być w stanie przekazać plik kształtu wielokąta lub punktowego, a logika odpowiednio go pokieruje.
def get_shapefile( shape_file ):
# Import native arcgisscripting module
import arcgisscripting
# Create the geoprocessor object
gp = arcgisscripting.create(9.3)
# Identify the geometry field
desc = gp.Describe( shape_file )
shapefieldname = desc.ShapeFieldName
# Get shapefile Name
print
print 'Shapefile Name: ', desc.Name
# Get the spatial reference
spatial_reference = desc.SpatialReference.Name
print 'Spatial Reference: ', spatial_reference
print
# Create search cursor
rows = gp.SearchCursor( shape_file )
row = rows.Next()
# Enter while loop for each feature/row
while row:
# Create the geometry object
feat = row.GetValue(shapefieldname)
print '*' * 30
print
print 'Geometry related Information'
print
# Get Geometry Type
geometry_Type = feat.Type
print 'Geometry Type: ', geometry_Type
# Get the area of the feature
geometry_Area = feat.Area
print 'geometry_Area; ', geometry_Area
# Get the centroid for the feature
geometry_Centroid = feat.Centroid
print 'geometry_Centroid:', geometry_Centroid
# Get the extent for the feature
geometry_Extent = feat.Extent
print 'geometry_extent: ', geometry_Extent
print
print 'Get Attribute Table Information'
# Get all the fields for the feature class
fields = desc.Fields
total_number_of_fields = len( fields )
print 'Total number of fields: ', total_number_of_fields
print
print 'List attribute table related information:'
print
field_num_cntr = 0
# Loop through all the fields in the feature class
for field in fields:
print '*'*5, field_num_cntr, '*'*5
print
print 'field Type: ', field.Type
print 'Scale: ', str(field.Scale)
print 'Precision: ', str(field.Precision)
print field.Name, '=> ', row.GetValue( field.Name )
print
field_num_cntr += 1
if geometry_Type == 'polygon':
# Variable to keep track of how many multipart polygons are in
# featureclass
partnum = 0
# Count the number of points in the current multipart feature
partcount = feat.PartCount
print
print 'Number of polygons in feature class: ', partcount
print
# Enter while loop for each part in the feature (if a singlepart feature
# this will occur only once)
while partnum < partcount:
# Print the part number
print "Part ", str(partnum), "of", partcount, ":"
print
part = feat.GetPart(partnum)
pnt = part.Next()
pntcount = 0
# Enter while loop for each vertex
while pnt:
# Print x,y coordinates of current point
print 'X coord:', pnt.x, 'Y coord:', pnt.y
pnt = part.Next()
pntcount += 1
# If pnt is null, either the part is finished or there is an interior ring
if not pnt:
pnt = part.Next()
if pnt:
print "Interior Ring:"
partnum += 1
print
print 'Number of coordinates in feature class: ', pntcount - 1
print
elif geometry_Type == 'point':
feat = row.GetValue(shapefieldname)
# Get coords
pnt = feat.GetPart()
# Print x,y coordinates of current point object
print 'X coord:', pnt.x, 'Y coord:', pnt.y
row = rows.Next()
your_shapefile = 'Path\To\Your\Shapefile.shp'
get_shapefile( your_shapefile )