ARCGIS 时间类型

ArcGIS中的日期类型有别于其他数据类型,处理起来比较麻烦。本文将从存储、显示、查询、Flex/java调用及转换方面,探讨日期类型的机理并对常见问题进行汇总,希望对读者能有所帮助。
 
存储
  1. shapefile或coverage存储的日期格式为:yyyy-mm-dd。需要注意的是,这两种数据类型只能存储日期,不能存储时间,时间部分会被截掉;如果要根据时间做时态数据的显示和分析,请使用geodatabase
  2. geodatabase(地理数据库)存储的日期格式为:yyyy-mm-dd hh:mm:ss AM或PM。
  3. 企业级数据库因数据库而异,可参考此处
显示
ArcMap中日期字段随数据源类型的不同而有所差异,其 显示格式取决于系统而不是数据源本身
可在Windows的系统区域设置(控制面板->区域和语言)中设置ArcMap中的日期显示格式。ArcMap使用系统短日期格式显示日期,使用长时间来显示时间。

查询
在ArcMap中新建shapefile格式的点图层和geodatabase的点图层(FeatureClass)各一个,以便进行测试。下面是其属性表的截图,每个图层中只有两个点,西安和北京,其中geodatabase的点图层中存储了时间信息。
shapefile格式的点图层的属性表
 
geodatabase中的点图层的属性表
 
ArcMap中时间字段的查询方法为:"Date" = date '2012-01-10'
 
ArcGIS Server发布成服务后的查询方法:将点图层通过ArcGIS Server发布成Map Service服务,然后在浏览器输入服务地址,进入Query操作页面。 在Where中输入查询条件(输入1=1,可得到所有内容),在Out Fields中输入*(用于将所有的字段都显示出来,当然也可指定字段),便可以得到查询结果。
 
查询结果为:
 
where处的查询语句:
经过测试,对于shapefile格式的数据发布的点图层,以下查询语句都可通过:
Date = date '01-10-2012 00:00:00'
Date = date '01-10-2012"
Date = date '01/10/2012"
Date = date '1/10/2012"
Date = date '1-10-2012"
Date = date '2012-1-10"
 
对于geodatabase中点图层发布的服务,以下查询语句可通过:
Date = date '01-10-2012 10:10:10'
Date = date '2012-1-05 8:20:20 pm'
Date = date '2012-1-05 20:20:20'
 
大整数问题:
但是我们发现查询结果中时间字段为一个 大整数(Format选择了HTML),网上有 服务的查询结果是时间格式(目前不清楚如何发布数据以便在Rest页面中能正确显示为时间而非大整数)。不过我们在代码中调用时通常使用json格式,它返回的都是一个大整数。 这个大整数的含义是:自 1970 年 1 月 1 日起已经过的毫秒数( 如果晚于1970年1月1日,则为正数,否则为负数 )。下文会对大整数的处理进行探讨。
 
Flex/Java中调用 
参见《 利用ArcGIS Server REST API实现对Feature的编辑操作》和《 Java中调用ArcGIS Server REST API》两篇文章,完成利用ArcGIS REST API获取日期信息。完成对结果的解析后,会得到一个大整数,这里以西安为例,得到的数值是1326190210000。
flex中
Flex中可利用构造函数完成从大整数到日期类型的转换:
var date:Date = new Date(1326190210000). 
 
日期转换为大整数:
第一种:var date1:Number = Date.parse("2012/01/10 18:10:10 GMT+0800");//注意时区
第二种:var date2:Number = Date.UTC(2012,0,10,10,10,10,0);//月份范围是0-11. 
利用Rest API实现新增功能时,如需构造时间字段,可将日期类型转成大整数,完成日期的添加。
部分服务也可利用这种形式("Date" : "09\/19\/2009"),但有些不行,赞不清楚原因。  
 
java中 
大整数转换为日期:
String str = "1326190210000";         
Long lng = Long.parseLong(str);
Date date = new Date(lng);
 
日期转换为大整数: 
第一种:long lng2 = Date.UTC(2012-1900,0,10,10,10,10);//年数需要减去1900 
第二种:Calendar calendar = Calendar.getInstance();
calendar.set(2012,0,10, 18, 10, 10);
calendar.set(Calendar.MILLISECOND, 0);//设置下毫秒为0,否则得到的结果后三位不确定
long lng1 =calendar.getTimeInMillis(); 
第三种:Date.parse()和DateFormat类也可以。 


### 如何在 ArcGIS 中处理或获取土地类型数据 #### 创建渔网并分配唯一标识 为了统计特定区域内不同土地利用类型的分布情况,在ArcGIS中可以通过创建渔网来划分研究区域。通过`Create Fishnet`工具能够按照指定的行列数和单元大小生成网格,之后为每一个网格赋予唯一的标识符以便后续的数据关联与查询[^2]。 ```python import arcpy # 设置工作空间环境 arcpy.env.workspace = "C:/data" # 定义输出要素类路径及参数 outFeatureClass = "fishnet.shp" originCoordinate = "389260 4174720" yAxisCoordinate = "389260 4175220" cellSizeWidth = "1000" cellSizeHeight = "1000" numRows = "" numColumns = "" oppositeCorner = "400260 4184720" labels = "NO_LABELS" templateExtent = "#" geometryType = "POLYGON" # 执行创建渔网命令 arcpy.CreateFishnet_management(outFeatureClass, originCoordinate, yAxisCoordinate, cellSizeWidth, cellSizeHeight, numRows, numColumns, oppositeCorner, labels, templateExtent, geometryType) print("渔网已成功创建") ``` #### 提取土地利用类型并计算面积比例 完成上述步骤后,下一步是从原始的土地覆盖图层中提取落入各个网格内的土地用途信息,并依据这些信息来进行面积测量。这一步骤涉及到多边形叠加分析(`Union`)、字段计算器(Field Calculator)的应用等技术手段,最终目的是得到每种地物所占的比例数值。 ```sql -- SQL语句用于更新表中的新列以存储各用地类型的百分比值 UPDATE fishnet_with_landuse SET percent_residential = (Shape_Area / total_area)*100 WHERE land_use_type='Residential'; ``` #### 加载历史时期土地利用类型数据集 对于那些希望对比多年间变化趋势的研究者来说,加载来自不同时期的地图资料是非常重要的环节之一。例如,当拥有某地区两个时间点上的土地利用状况记录时,则可分别导入这两个版本的数据文件到项目当中去进一步开展差异性探讨活动[^3]。 ```python from arcgis.gis import GIS from arcgis.mapping import WebMap # 登录至ArcGIS Online平台 gis = GIS('https://www.arcgis.com', 'username', 'password') # 查找并打开包含所需年代土地利用数据的地图服务项 search_result = gis.content.search(query="title:Henan_Land_Use_2000", item_type="Feature Layer") if search_result: layer_item = search_result[0] else: raise Exception("未能找到匹配的历史土地利用数据") web_map = WebMap() web_map.add_layer(layer_item.layers[0]) print(f"地图已添加{layer_item.title}图层") ``` #### 获取栅格形式下的土地类型边界线 有时用户可能更倾向于操作基于像素表达的空间对象而非矢量图形;此时就需要掌握从离散化的像元集合里勾勒出连续轮廓的技术——即所谓的“矢量化”。借助于Spatial Analyst扩展模块里的相应功能选项即可轻松实现这一转换过程[^4]。 ```python in_raster = r"C:\path\to\raster.tif" out_polygon_features = r"C:\output\polygon_from_raster.shp" arcpy.RasterToPolygon_conversion(in_raster, out_polygon_features, "SIMPLIFY", "VALUE") print("已完成由栅格向面状要素转化的过程") ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值