имя_shp-файла -> атрибут (пакетно, подпапки)

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

имя_shp-файла -> атрибут (пакетно, подпапки)

Сообщение oleg » 06 дек 2010, 19:12

есть много шейпов.
как им можно добавить имя_файла в атрибуты пакетно?
спасибо.

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: добавил в тему "подпапки"
Последний раз редактировалось oleg 01 авг 2011, 23:56, всего редактировалось 1 раз.

oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

Re: имя_shp-файла -> атрибут (?)

Сообщение oleg » 28 мар 2011, 18:51

Есть текстовое поле с полным (путь+имя) именем файла. Вида D:\temp\name.shp
Как можно ArcGIS Field Calculator'om удалить путь (D:\temp\)? Оставить только имя (name.shp).

Подскажите, пожалуйста, как можно изменить этот скрипт, так, чтобы он только имя добавлял.

Спасибо!
UPD
как быстрое близкое к цели решение использовал скрипт, который пишет в поле полный путь
http://arcscripts.esri.com/details.asp?dbid=16093 (Python+cmd)

Konstantin Tokar
Активный участник
Сообщения: 178
Зарегистрирован: 16 июл 2008, 09:56
Репутация: 1
Откуда: Москва

Re: имя_shp-файла -> атрибут (?)

Сообщение Konstantin Tokar » 29 мар 2011, 04:28

Я, например, ни питоном, ни другими профильными языками не владею, поэтому делаю по другому- загружаю shp в postgis, там работаю тем чем умею с базой данных, и выгружаю обратно в shp.

oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

Re: имя_shp-файла -> атрибут (?)

Сообщение oleg » 28 июл 2011, 10:59

Привет! Подниму тему, тк задача снова стала актуальной...

Под ArcGIS 10 перестал работать скрипт "Add complete path to multiple shapefiles" (см. выше), добавляющий в новое поле *.shp полный путь к файлу. Скрин с сообщением в аттаче. Под ArcGIS 9 - всё так же работает, но тк перешли на 10-ку нет возможности использовать.

- Просьба подсказать метод исправления для ArcGIS 10 или направления поиска.
- Подскажите, пожалуйста, альтернативные решения (предпочтительнее открытые).

Спасибо.
Вложения
gp.AddField_managemen_AttributeError.png
gp.AddField_managemen_AttributeError.png (10.65 КБ) 12532 просмотра

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: имя_shp-файла -> атрибут (?)

Сообщение Voltron » 28 июл 2011, 12:28


Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: имя_shp-файла -> атрибут (?)

Сообщение Дмитрий Барышников » 28 июл 2011, 13:57

А вы для каждой геометрии дописываете путь до файла в атрибуты или только к первой?

oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

Re: имя_shp-файла -> атрибут (?)

Сообщение oleg » 30 июл 2011, 13:31

Voltron, подразумевал конечное решение в виде инструмента или скрипта (подобная задача, судя даже по наличию скрипта под Arc9 - распространена), чтобы можно было "запустить". Буду признателен за помощь. Спасибо, попробую покопать в ogr-направлении...

Bishop, - для каждой.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: имя_shp-файла -> атрибут (?)

Сообщение Denis Rykov » 31 июл 2011, 11:32

Код: Выделить всё

#!/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()
Spatial is now, more than ever, just another column- The Geometry Column.

oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

Re: имя_shp-файла -> атрибут (?)

Сообщение oleg » 01 авг 2011, 18:33

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). Возможно запись лога можно как-то включить?

При возможности попробую запустить скрипт на других конфигурациях и расскажу о результатах.
Вложения
version_conflict.png
version_conflict.png (15.34 КБ) 12373 просмотра

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: имя_shp-файла -> атрибут (пакетно, подпапки)

Сообщение Denis Rykov » 02 авг 2011, 08:50

Даже не знаю чем помочь, сейчас попробовал на машине с Windows - завелось без проблем. Может переустановить? Еще можно тут спросить.
Spatial is now, more than ever, just another column- The Geometry Column.

oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

Re: имя_shp-файла -> атрибут (?)

Сообщение oleg » 02 авг 2011, 10:38

oleg писал(а):При возможности попробую запустить скрипт на других конфигурациях и расскажу о результатах.
Попробовал на других машинах - всё ОК. Из-за чего возникают сложности с конфликтом версий (выше) пока сложно сказать - очень разные конфигурации.

DR, если не очень сложно, еще одна просьба по этому скрипту. Можно ли сюда же добавить и добавление пути? Те чтобы на выходе были отдельными полями "путь", "имя файла". Спасибо.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: имя_shp-файла -> атрибут (пакетно, подпапки)

Сообщение Denis Rykov » 03 авг 2011, 05:43

Код: Выделить всё

#!/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()


По поводу ошибки запуска скрипта - попробуйте запустить, указав не просто имя файла, а так:

Код: Выделить всё

python path2field.py
Spatial is now, more than ever, just another column- The Geometry Column.

oleg
Завсегдатай
Сообщения: 460
Зарегистрирован: 03 фев 2005, 11:46
Репутация: 15
Контактная информация:

Re: имя_shp-файла -> атрибут (пакетно, подпапки)

Сообщение oleg » 11 авг 2011, 23:56

DR, спасибо!
Проверил вариант запуска с "python" - работает!

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость