Страница 1 из 1
имя_shp-файла -> атрибут (пакетно, подпапки)
Добавлено: 06 дек 2010, 19:12
oleg
есть много шейпов.
как им можно добавить имя_файла в атрибуты пакетно?
спасибо.
UPD
как быстрое близкое к цели решение использовал скрипт, который пишет в поле полный путь
http://arcscripts.esri.com/details.asp?dbid=16093 (Python+cmd)
нашел еще...
attribute=filename for multiple shapefiles (VB)
http://forums.esri.com/Thread.asp?c=93& ... sgid878479
подскажите, пожалуйста, последовательность действий для запуска подобного скрипта.
Filename Insert (Python)
http://arcscripts.esri.com/details.asp?dbid=14534
требует pywin32. запустился, что-то делал, поле не добавил.
UPD: добавил в тему "подпапки"
Re: имя_shp-файла -> атрибут (?)
Добавлено: 28 мар 2011, 18:51
oleg
Есть текстовое поле с полным (путь+имя) именем файла. Вида D:\temp\name.shp
Как можно ArcGIS Field Calculator'om удалить путь (D:\temp\)? Оставить только имя (name.shp).
Подскажите, пожалуйста, как можно изменить этот скрипт, так, чтобы он только имя добавлял.
Спасибо!
Re: имя_shp-файла -> атрибут (?)
Добавлено: 29 мар 2011, 04:28
Konstantin Tokar
Я, например, ни питоном, ни другими профильными языками не владею, поэтому делаю по другому- загружаю shp в postgis, там работаю тем чем умею с базой данных, и выгружаю обратно в shp.
Re: имя_shp-файла -> атрибут (?)
Добавлено: 28 июл 2011, 10:59
oleg
Привет! Подниму тему, тк задача снова стала актуальной...
Под ArcGIS 10 перестал работать скрипт "Add complete path to multiple shapefiles" (см. выше), добавляющий в новое поле *.shp полный путь к файлу. Скрин с сообщением в аттаче. Под ArcGIS 9 - всё так же работает, но тк перешли на 10-ку нет возможности использовать.
- Просьба подсказать метод исправления для ArcGIS 10 или направления поиска.
- Подскажите, пожалуйста, альтернативные решения (предпочтительнее открытые).
Спасибо.
Re: имя_shp-файла -> атрибут (?)
Добавлено: 28 июл 2011, 12:28
Voltron
Re: имя_shp-файла -> атрибут (?)
Добавлено: 28 июл 2011, 13:57
Дмитрий Барышников
А вы для каждой геометрии дописываете путь до файла в атрибуты или только к первой?
Re: имя_shp-файла -> атрибут (?)
Добавлено: 30 июл 2011, 13:31
oleg
Voltron, подразумевал конечное решение в виде инструмента или скрипта (подобная задача, судя даже по наличию скрипта под Arc9 - распространена), чтобы можно было "запустить". Буду признателен за помощь. Спасибо, попробую покопать в ogr-направлении...
Bishop, - для каждой.
Re: имя_shp-файла -> атрибут (?)
Добавлено: 31 июл 2011, 11:32
Denis Rykov
Код: Выделить всё
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, fnmatch
from osgeo import ogr
def main():
rootPath = '/home/rda/shp'
driver = ogr.GetDriverByName('ESRI Shapefile')
fname = 'src'
for root, dirs, files in os.walk(rootPath):
shpfiles = fnmatch.filter(files, '*.shp')
if (len(shpfiles) != 0):
for filename in shpfiles:
source = driver.Open(os.path.join(root,filename), 1)
layer = source.GetLayer()
new_field = ogr.FieldDefn(fname, ogr.OFTString)
new_field.SetWidth(255)
layer.CreateField(new_field)
feat = layer.GetNextFeature()
while feat is not None:
feat.SetField(fname, filename)
layer.SetFeature(feat);
feat = layer.GetNextFeature()
source.Destroy()
return 0
if __name__ == '__main__':
main()
Re: имя_shp-файла -> атрибут (?)
Добавлено: 01 авг 2011, 18:33
oleg
DR, спасибо!
При запуске этого скритпта OSGeo4W Shell говорит о несовместимости версий python25.dll и Python (сообщение на скрине в аттаче). Подскажите, пожалуйста, как можно исправить?
Python version: 2.5.2 (r252:60911, Feb 21 2008, 13:11:45).
Ставил с помощью OSGeo4W Installer. WinXP, параметры по умолчанию.
Не получилось найти лог OSGeo4W Shell (C:\OSGeo4W\OSGeo4W.bat). Обнаружил лишь лог инсталляции (C:\OSGeo4W\var\log\setup.log). Возможно запись лога можно как-то включить?
При возможности попробую запустить скрипт на других конфигурациях и расскажу о результатах.
Re: имя_shp-файла -> атрибут (пакетно, подпапки)
Добавлено: 02 авг 2011, 08:50
Denis Rykov
Даже не знаю чем помочь, сейчас попробовал на машине с Windows - завелось без проблем. Может переустановить? Еще можно
тут спросить.
Re: имя_shp-файла -> атрибут (?)
Добавлено: 02 авг 2011, 10:38
oleg
oleg писал(а):При возможности попробую запустить скрипт на других конфигурациях и расскажу о результатах.
Попробовал на других машинах - всё ОК. Из-за чего возникают сложности с конфликтом версий (выше) пока сложно сказать - очень разные конфигурации.
DR, если не очень сложно, еще одна просьба по этому скрипту. Можно ли сюда же добавить и добавление пути? Те чтобы на выходе были отдельными полями "путь", "имя файла". Спасибо.
Re: имя_shp-файла -> атрибут (пакетно, подпапки)
Добавлено: 03 авг 2011, 05:43
Denis Rykov
Код: Выделить всё
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, fnmatch
from osgeo import ogr
def main():
rootPath = '/home/rda/shp'
driver = ogr.GetDriverByName('ESRI Shapefile')
fname = 'src'
path = 'path'
for root, dirs, files in os.walk(rootPath):
shpfiles = fnmatch.filter(files, '*.shp')
if (len(shpfiles) != 0):
for filename in shpfiles:
source = driver.Open(os.path.join(root,filename), 1)
layer = source.GetLayer()
#Create new field for file name
fname_field = ogr.FieldDefn(fname, ogr.OFTString)
fname_field.SetWidth(255)
layer.CreateField(fname_field)
#Create new field for path
path_field = ogr.FieldDefn(path, ogr.OFTString)
path_field.SetWidth(255)
layer.CreateField(path_field)
feat = layer.GetNextFeature()
while feat is not None:
feat.SetField(fname, filename)
feat.SetField(path, root)
layer.SetFeature(feat);
feat = layer.GetNextFeature()
source.Destroy()
return 0
if __name__ == '__main__':
main()
По поводу ошибки запуска скрипта - попробуйте запустить, указав не просто имя файла, а так:
Re: имя_shp-файла -> атрибут (пакетно, подпапки)
Добавлено: 11 авг 2011, 23:56
oleg
DR, спасибо!
Проверил вариант запуска с "python" - работает!