Shapefile与字符集编码设置之ArcGIS for Server

         最近刚刚巧儿,连续碰到几个Shapfile中文乱码的问题,参照kikita博主在博客空间慕名ArcGIS中的博文《shapefile与字符集编码设置》,通过在注册表中导航到计算机 > HKEY_CURRENT_USER > Software > ESRI > Desktop10.3,依次新建项Common,项CodePage,字符串值dbfDefault,设置键值为oem(或936),并重启ArcMap,从而完美地解决了ArcMap端的显示问题。

    ArcMap中Shapefile中文乱码

 ArcMap中文编码注册表设置     

ArcMap中文乱码正确显示

        原以为这一乱码问题就这么着彻底掀篇了,小编还小小地得意了一把,终于没我Server啥事儿了。结果,真相曝露的那一瞬——纳尼?竟然是这样的!!!

ArcGIS for Server标注中文乱码

ArcGIS for Server Query中文乱码

        当然,我们确实可通过将shapefile导入file geodatabase而后重新加载以绕开这一问题。然而,个性如我,就是不愿意走这条康庄寻常路。于是,新一轮的尝试再次启动。

        首先,老老实实地邯郸学步呗。参照ArcGIS for Desktop的解决方案,小编尝试在注册表 HKEY_CURRENT_USER > Software > ESRI > Server10.3 下新建项Common、CodePage及字符串值dbfDefault,设置键值为oem(或936),并重启 ArcGISfor Server。

注册表字符编码设置1

        其次,邯郸学步第二式。在注册表 HKEY_LOCAL_MACHINE > SOFTWARE> ESRI > Server10.3 下新建Common,CodePage及dbfDefault,输入oem键值,重启 ArcGIS for Server。

注册表字符编码设置2

        接下来,尝试修改ArcGIS for Server内置tomcat(默认路径[ArcGIS Server安装目录] \framework\runtime\tomcat\conf)下的server.xml文件,在6080的Connector中添加URIEncoding项并设置为中文简体编码,如GBK或gb2312。虽然心里明白标注中的中文乱码显然和这项设置没关系,但是实在无法,只能硬着头皮死马当活马医啦。

server.xml页面字符编码设置

        上述诸方法的多次尝试和确认后,乱码的问题依然未获得解决。小编都要忍不住放弃了。

崩溃ing

        最后,不得不开始放大招了。小编利用微软提供的Windows实用工具Process Monitor监控所查看服务的ArcSOC进程的PID值,终于发现,当服务执行ExportMap操作时,服务进程将读取*.cpg文件和注册表项 HKU\S-1-5-21-3961182117-3494339963-1454951688-1002\SOFTWARE\ESRI\Server10.3\Common\CodePage。由此可推测Server端编码的获取将分为两个步骤,首先,读取随数据存储的cpg文件以获取编码信息;当检测到cpg不存在时,则读取 HKU\S-1-5-21-3961182117-3494339963-1454951688-1002\SOFTWARE\ESRI\Server10.3 下的CodePage。对于当前数据而言,cpg文件必然是不存在的。通过检查,此处所指向的CodePage也是不存在的。因此,为了解决这一问题,小编尝试访问注册表,依次导航到HKU即 HKEY_USERS > S-1-5-21-3961182117-3494339963-1454951688-1002 >Software > ESRI > Server10.3,新增Common项,CodePage项,以及字符串值dbfDefault,并将键值设置为oem。

ProcessorMonitor中监控

注册表ArcGIS for Server字符编码设置

        重启ArcGIS for Server。耶!问题成功解决。

ArcGIS for Server端中文标注正确显示

 ArcGIS for Server的查询中文显示正确     

        为什么CodePage信息会存储在HKEY_USERS下的S-1-5-21-3961182117-3494339963-1454951688-1002中呢?利用PsGetsid进行检测,发现-1-5-21-3961182117-3494339963-1454951688-1002实质对应的就是ArcGIS for Server账户arcgis。

SID账户的获取

        综上,简言之,ArcGIS for Server字符编码的获取将受限于其账户arcgis的字符编码的设置。也就是说,实质是在用户环境变量中设置这一字符编码并确保其生效。

        OK。今天絮絮叨叨了一大堆,希望读者尚未厌烦。那么,小编的分析就“咔哒”一声戛然而止吧。



### 连接至数据库 在开始将ArcGIS数据导出为Shapefile格式之前,首先需要连接至包含这些数据的数据库。可以通过ArcMap或ArcCatalog完成这一操作。在软件中找到数据库连接选项,建立目标数据库的连接。这一过程允许访问存储在数据库中的各种数据集,包括要素类等地理空间数据[^1]。 ### 要素批量转shp 一旦成功连接至数据库并定位到希望导出的要素数据集,下一步就是执行批量转换操作。选择数据库或具体的要素数据集,然后右键点击选择“导出”选项,从中挑选“转为shapefile(批量)”。这一操作会引导用户指定一个目标文件夹,用于存放转换后的Shapefile数据。确认设置后,系统会自动处理转换任务,生成符合要求的Shapefile文件[^1]。 ### 处理常见错误 在尝试导出数据时,可能会遇到一些常见的问题,例如错误代码000354,这通常表明数据表中存在无效字符。解决此类问题的方法之一是检查并清理数据表中的特殊字符,如将空格替换为连字符“-”。执行这样的清理操作后,重新尝试导出过程,通常可以解决问题并成功生成Shapefile文件[^4]。 ### 使用Python脚本进行自动化处理 对于希望利用Python脚本自动化处理ArcGIS数据导出任务的用户,可以使用arcpy模块中的SearchCursor函数读取shp文件的属性表,并进一步处理或输出数据。虽然arcpy本身不直接支持将数据输出为Excel格式,但可以通过其他Python库实现这一功能,例如pandas,结合ExcelWriter对象来保存数据。不过,需要注意的是,具体实现可能依赖于所使用的ArcGIS版本及其对Python的支持情况[^3]。 ### 示例代码 以下是一个简单的Python脚本示例,展示如何使用arcpy模块读取Shapefile的属性表: ```python import arcpy # 设置工作空间 arcpy.env.workspace = "C:/data" # 使用SearchCursor读取Shapefile的属性表 with arcpy.da.SearchCursor("your_shapefile.shp", ["*"]) as cursor: for row in cursor: print(row) ``` 此代码片段展示了如何遍历Shapefile的属性表,但要将其导出为其他格式,如Excel,还需要额外的步骤和可能的第三方库支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值