社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在ArcGIS Pro字段计算, 写Python代码,日期顺序,第一条记录是今天,第二条记录是明天,依次类推

GISAI • 5 月前 • 368 次点击  

在ArcGIS Pro中使用字段计算器为记录创建从今天开始的顺序日期,可以使用以下Python代码:

方法1:基于OBJECTID或FID创建顺序日期

python

from datetime import datetime, timedelta


# 基于记录顺序创建从今天开始的日期

def create_sequence_date(record_id):

    if record_id is None:

        return None

    today = datetime.now().date()

    # 第一条记录是今天(offset=0),第二条是明天(offset=1)...

    future_date = today + timedelta(days=record_id - 1)

    return future_date


# 在字段计算器中调用(使用OBJECTID或FID)

create_sequence_date(!OBJECTID!)


方法2:使用全局计数器(推荐)

from datetime import datetime, timedelta


# 使用全局计数器确保顺序正确

rec_count = 0

def sequential_dates():

    global rec_count

    today = datetime.now().date()

    future_date = today + timedelta(days=rec_count)

    rec_count += 1

    return future_date


# 在字段计算器中直接调用(不带参数)

sequential_dates()


方法3:使用行号(更可靠的方法)

from datetime import datetime, timedelta


# 使用行号创建顺序日期

counter = 0

def date_by_row():

    global counter

    today = datetime.now().date()

    target_date = today + timedelta(days=counter)

    counter += 1

    return target_date


# 在字段计算器中调用

date_by_row()


方法4:完整的预逻辑脚本代码

在字段计算器的"预逻辑脚本代码"框中输入:

from datetime import datetime, timedelta


# 初始化计数器

current_index = 0


def generate_sequence_dates():

    global current_index

    today = datetime.now().date()

    result_date = today + timedelta(days=current_index)

    current_index += 1

    return result_date

然后在"表达式"框中输入:

python

generate_sequence_dates()




方法5:基于排序字段创建日期序列

python

from datetime import datetime, timedelta


# 如果有排序字段,可以使用排序字段的值

def date_by_sort_field(sort_field):

    if sort_field is None:

        return None

    today = datetime.now().date()

    # 假设sort_field从1开始

    future_date = today + timedelta(days=sort_field - 1)

    return future_date


# 在字段计算器中调用

date_by_sort_field(!Sort_Field!)


 在字段计算器中调用date_by_sort_field(!Sort_Field!)

使用说明:

  1. 字段类型:目标字段必须是日期类型(Date)

  2. 执行顺序:代码会按照记录在属性表中的显示顺序执行

  3. 结果示例(假设今天是2024年1月15日):

  • 第1条记录:2024-01-15

  • 第2条记录:2024-01-16

  • 第3条记录:2024-01-17

  • 第4条记录:2024-01-18

推荐使用方法2或方法3

这些方法不依赖于OBJECTID,而是按照记录的处理顺序生成日期,更加可靠。确保在运行前:

  • 创建好日期类型的字段

  • 字段计算器设置为Python

  • 代码正确复制到相应区域

选择其中一种方法,根据你的具体需求调整即可。



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/193357