Abaixo está uma maneira de acessar as coordenadas de latitude e longitude do arquivo shap ESRI, entre outras informações, como referência espacial, atributos de campo, valores de campo etc. usando Python. O código abaixo funciona apenas para polígonos e pontos (porque não comecei a escrever o código para polilinhas). Basicamente, juntei alguns códigos que encontrei espalhados pela Ajuda do ArcGIS Desktop 9.3, adicionei alguns dos meus e os reuni em uma única função. Está escrito com o ArcGIS 9.3. Você deve passar um shapefile de polígono ou shapefile de ponto e a lógica o direcionará de acordo.
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 )