Arcgis中经常要使用到利用json数据转要素层的办法,在10.5版本下对于导入的json数据要求比较苛刻,此文章主要解决10.5版本以下的geojson的导入问题。
由于Arcgis的debug机制较差,导致在转入错误时,无法定位错误产生的原因,笔者建议大家按照文章书写顺序进行逐一排查。
一、常规设置问题
1.字段长度
网上主要流行三种方式生成geojson,在线转换工具、java、python。笔者都尝试过,也都有转换的代码,如有需要可以私。此问题主要出现在后两种方法中,一般在线工具会根据内容进行字段长度设置,而利用java、python等方法需要自己设置字段长度。Arcgis中设置字段长度如下图所示,在一般的简易的计算中,汉字约等于两个字符长度。导入中若字段中内容超过设定长度,转换会失败。
在geojson中负责设置字段长度的部分如下图所示,设置名称、类型、长度。在日常的应用中设置为200足够,若遇到需要存储巨量字段信息的情况,可以设置为4000以上。
"fields": [
{
"name": "name",
"type": "esriFieldTypeString",
"alias": "name",
"length": 50
}]
2.图层要素
Arcgis中主要包含点线面三种类型的shp数据,在geojson中控制图层的部分主要是以下部分代码:下面代码依次为点线面的设置参数。导入之前检查此参数是否对应。
"geometryType": "esriGeometryPoint"
"geometryType": "esriGeometryPolyline"
"geometryType": "esriGeometryPolygon"
3.字段信息
字段设置完成后,需要输入字段的具体信息,此信息一般放置在geojson的以下部分,需要和字段设置进行对应。常见错误为漏写了一两个字段的信息,导致导入不成功。
"features": [
{
"attributes": {
"name": "111",
"id": "df_14",
}
"fields": [
{
"name": "id",
"type": "esriFieldTypeString",
"alias": "ID",
"length": 200
},
{
"name": "name",
"type": "esriFieldTypeString",
"alias": "NAME",
"length": 255
},
4.空间信息格式
geojson中空间信息一般储存在geometry中,但点线面的储存格式不同,以下依次为点线面的储存格式。格式需要和图层要素设置中的类型对应。
"geometry": {
"x": 120.3,
"y": 31.6
}
"geometry": {
"paths": [
[
[
120.2,
31.8
],
[
120.2,
31.8
],
[
120.2,
31.8
]
]
]
}
"geometry": {
"rings": [
[
[
117.1,
34.2
],
[
117.1,
34.2
],
[
117.1,
34.2
],
[
117.1,
34.2
]
]
]
}
二、编码问题
在10.5以上基本修复了因为编码格式而导致的中文导入失败问题,在10.5以下需要对导入的编码格式进行修改。常用的工具有notepad++和vscode,本文使用vscode进行举例。
用vscode打开geojson文件,发现默认编码格式为utf-8,需要将此格式转换为gb2312,大部分10.2版本均只支持此种编码格式。
1.首先点击编码处
2.选择通过编码保存
3.输入需要编码的格式,2312,选择。然后另存为文件即可