2014-01-15 52 views
0

我已經看到了幾個與此技術相關的類似帖子,但我仍然遇到問題。以下腳本旨在選擇一個shape文件中位於第二個多邊形shapefile邊界內的所有點,然後編輯選定的點數到其中一個多邊形字段中。儘管從錯誤消息看來它是正確的,但我還是無法使where子句聲明正常工作。這兩個shape文件都位於文件地理數據庫和要素圖層中,爲了使用選擇功能而創建這兩個圖層。在for語句中使用Where語句中的變量使用屬性進行選擇

arcpy.MakeFeatureLayer_management("treatment_maps",'maps') 
arcpy.MakeFeatureLayer_management("points_2014",'points') 
cursor=arcpy.UpdateCursor("treatment_maps") 

for row in cursor: 
    map=row.getValue('map_name') 
    where='"map_name"' + '=' + '\'' + str(map) + '\'' 
    arcpy.SelectLayerByAttribute_management("maps","NEW_SELECTION",where) 
    arcpy.SelectLayerByLocation_management("points","COMPLETELY_WITHIN","maps") 
    count=arcpy.GetCount_management("points") 
    row.setValue('DI_Count', count) 
    cursor.updateRow(row) 

錯誤消息:

Executing: SelectLayerByAttribute maps NEW_SELECTION "map_name"='Airport' 
Start Time: Wed Jan 15 13:00:56 2014 
ERROR 000358: Invalid expression 
Cannot acquire a lock. 
Cannot acquire a lock. 
Failed to execute (SelectLayerByAttribute). 
Failed at Wed Jan 15 13:00:56 2014 (Elapsed Time: 0.00 seconds) 

的treatment_maps特徵類包含位於每個多邊形內的點,這需要更新多邊形和計數(DI_Count)。我希望讓這個腳本能夠正常工作,因爲我有大約100個多邊形要更新。感謝您的任何幫助或建議!

更新: 經過對每一行的實驗後,我發現select by屬性'where'語句正常工作,但select by屬性函數在光標設置在同一對象上時不起作用。但我仍然需要一個解決方案。

回答

0

我不確定。但ArcGIS幫助示例中的字段表達式是:[map_name],而不是「map_name」。 嘗試用下面的命令替換第6行:
where='[map_name]' + '=' + '\'' + str(map) + '\''
祝您好運!

+0

[]爲個人地理數據庫,引用其他所有內容。 – M4rtini

+0

我試過了,但它給出了相同的錯誤信息。我也相信,對於文件地理數據庫,arcpy使用「Field」=語法,而[Field] =適用於其他數據源。 – user3174452

相關問題