2013-05-06 2 views
0

Я запускаю этот код, но получаю ошибку с отступом. В чем проблема? Я бегал так много раз. Когда я запускаю код через IDLE, я получаю эту коробку, которая говорит:ARCGIS python, ошибка отступа?

Syntax Error: There's and error in your program: expected an indented block

Код:

import arcpy 
from arcpy import env 
import math 
folder_path = r"J:\sanda" 
# Define workspace as your folder path 
env.workspace = folder_path 
# Allow overwriting output files 
arcpy.env.overwriteOutput = True 

#parameters as text 
input_lake = arcpy.GetParameterAsText(0) 
input_cities = arcpy.GetParameterAsText(1) 
output_lake = arcpy.GetParameterAsText(2) 

city= "CITY_NAME" 
cntry= "CITY_CNTRY" 
admin= "ADMIN_NAME" 
pop_city= "Population" 
dist_km= "Distance" 
x_coord= "X_CORD" 
y_coord= "Y_CORD" 


#copy lakes shapefile 
arcpy.CopyFeatures_management(input_lake, output_lake) 

#Add fields (city_name, x coord, y coord, etc) 
arcpy.AddField_management(output_lake, city, "TEXT") 
arcpy.AddField_management(output_lake, cntry , "TEXT") 
arcpy.AddField_management(output_lake, admin, "TEXT") 
arcpy.AddField_management(output_lake, pop_city, "DOUBLE") 
arcpy.AddField_management(output_lake, dist_km, "DOUBLE") 
arcpy.AddField_management(output_lake, x_coord, "DOUBLE") 
arcpy.AddField_management(output_lake, y_coord, "DOUBLE") 


#create empty lists 
citylist_city_name = [] 
citylist_X = [] 
citylist_Y = [] 
city_name = [] 
city_cntry = [] 
admin_name = [] 
dist_km= [] 
pop= [] 

#populate these lists with values 
city_cursor= arcpy.SearchCursor(input_cities) 
for city in city_cursor: 
    geom = city.Shape 
    citylist_X.append(geom.firstPoint.X) 
    citylist_Y.append(geom.firstPoint.Y) 
    citylist_city_name.append(city.CITY_NAME) 
    city_cntry.append(city.CNTRY_NAME) 
    admin_name.append(city.ADMIN_NAME) 
    pop.append(city.Population) 

#get the number of cities 
city_length = len(citylist_X) 

#read lake geometries 
lake_cursor = arcpy.UpdateCursor(output_lake) 

#loop through each lake 
for lake in lake_cursor: 
    lake_geom = lake.Shape 

#initiate lake distances 
city_dist_list = [] 

#loop through each city 
for cityID in range(0, city_length - 1): 

#get x and y for the current city 
cityX=citylist_X[cityID] 
cityY=citylist_Y[cityID] 

#get x and y for the current lake 
lakeX = lake_geom.centroid.X 
lakeY = lake_geom.centroid.Y 

     #calculate the distance 
dist = math.sqrt((cityX-lakeX)**2 +(cityY-lakeY)**2 
city_dist_list.append(dist) 

    closest = min(city_dist_list) 
    closestID = city_dist_list.index(closest) 

    #set values into the new lake feature 
    lake.CITY_NAME = citylist_city_name[closestID] 
    lake.X_CORD = citylist_X [closestID] 
    lake.Y_CORD = citylist_Y [closestID] 
    lake.Distance = closest*(0.001) 
    lake.ADMIN_NAME = admin_name [closestID] 
    lake.Population = pop [closestID] 
    lake.city_cntry = city_cntry [closestID] 
    lake_cursor.updateRow(lake) 

#kill the cursors 
del city_cursor, lake_cursor, lake, city, cityID, geom, lake_geom 

print "Done" 
+0

Похоже, ваша петля 'для cityID в диапазоне (0, city_length - 1):' после этого не имеет отступом. Однако это трудно понять, потому что вы не опубликовали полное сообщение об ошибке. – BrenBarn

+0

Отредактируйте свой код правильно. –

ответ

3

для-петли в коде, не отступ должным образом, это должно быть так:

for cityID in range(0, city_length - 1): 
    #get x and y for the current city 
    cityX=citylist_X[cityID] 
    cityY=citylist_Y[cityID] 

    #get x and y for the current lake 
    lakeX = lake_geom.centroid.X 
    lakeY = lake_geom.centroid.Y 

     #calculate the distance 
    dist = math.sqrt((cityX-lakeX)**2 +(cityY-lakeY)**2) 
    city_dist_list.append(dist) 

    closest = min(city_dist_list) 
    closestID = city_dist_list.index(closest) 

    #set values into the new lake feature 
    lake.CITY_NAME = citylist_city_name[closestID] 
    lake.X_CORD = citylist_X [closestID] 
    lake.Y_CORD = citylist_Y [closestID] 
    lake.Distance = closest*(0.001) 
    lake.ADMIN_NAME = admin_name [closestID] 
    lake.Population = pop [closestID] 
    lake.city_cntry = city_cntry [closestID] 
    lake_cursor.updateRow(lake) 

Во-вторых вы отсутствовали закрывающий ) на этой линии:

dist = math.sqrt((cityX-lakeX)**2 +(cityY-lakeY)**2) 
Смежные вопросы