回答編集履歴
4
バグの発生箇所を追記
test
CHANGED
@@ -36,13 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
また下記のような記事を見つけました。
|
40
|
-
|
41
|
-
- [ESRI不具合 BUG-000110602](https://support.esri.com/ja/bugs/nimbus/QlVHLTAwMDExMDYwMg==)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
#### 参考情報
|
46
40
|
|
47
41
|
C++から直接GDALのAPIを呼び出しても同じように`ュ`がデコードされません。下記のソースコードはシェープファイルにフィールド名メッシュをUTF-8指定で作成し、読み出すだけのプログラムです。
|
48
42
|
|
@@ -179,3 +173,21 @@
|
|
179
173
|
メッシ�: 0xe3 0x83 0xa1 0xe3 0x83 0x83 0xe3 0x82 0xb7 0xe3
|
180
174
|
|
181
175
|
```
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
#### バグの発生箇所
|
180
|
+
|
181
|
+
UTF-8を指定した際のバグの発生箇所を特定しました。
|
182
|
+
|
183
|
+
[https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrsf_frmts/shape/shapefil.h](https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrsf_frmts/shape/shapefil.h)
|
184
|
+
|
185
|
+
の515行目で下記の定義がされています。
|
186
|
+
|
187
|
+
```c
|
188
|
+
|
189
|
+
#define XBASE_FLDNAME_LEN_WRITE 10
|
190
|
+
|
191
|
+
```
|
192
|
+
|
193
|
+
これはフィールド名に使えるのは10バイトであることを意味しています。「メッシュ」はUTF-8では12バイト(1文字3バイト)、SJISでは8バイト(1文字2バイト)になります。したがってUTF-8を指定した場合、10文字制限で最後の2バイトが切り取られ、文字列として不完全になりエラーとなっていました。
|
3
Windowsに対する追記
test
CHANGED
@@ -15,6 +15,34 @@
|
|
15
15
|
```
|
16
16
|
|
17
17
|
|
18
|
+
|
19
|
+
[追記]
|
20
|
+
|
21
|
+
Windowsでは上記の対策ではNGでしたので、シェープファイルを作るだけであれば下記の対応で可能です(根本的な解決ではないです)。上記の代わりにフィールド名を全て英語名に変換します。
|
22
|
+
|
23
|
+
```python
|
24
|
+
|
25
|
+
df1.columns = ["mesh", "utilization", "type", "datetime", "geometry"]
|
26
|
+
|
27
|
+
```
|
28
|
+
|
29
|
+
その上で書き出す際に`utf-8`を指定して下さい。
|
30
|
+
|
31
|
+
```python
|
32
|
+
|
33
|
+
df1.to_file("土地利用区分追加.shp", driver="ESRI Shapefile", encoding="utf-8")
|
34
|
+
|
35
|
+
```
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
また下記のような記事を見つけました。
|
40
|
+
|
41
|
+
- [ESRI不具合 BUG-000110602](https://support.esri.com/ja/bugs/nimbus/QlVHLTAwMDExMDYwMg==)
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
[参考情報]
|
18
46
|
|
19
47
|
C++から直接GDALのAPIを呼び出しても同じように`ュ`がデコードされません。下記のソースコードはシェープファイルにフィールド名メッシュをUTF-8指定で作成し、読み出すだけのプログラムです。
|
20
48
|
|
2
tupleをリストに変更
test
CHANGED
@@ -6,9 +6,9 @@
|
|
6
6
|
|
7
7
|
```python
|
8
8
|
|
9
|
-
columns = df1.columns
|
9
|
+
columns = df1.columns.tolist()
|
10
10
|
|
11
|
-
columns[
|
11
|
+
columns[columns.index('メッシュ')] = 'メッシ'
|
12
12
|
|
13
13
|
df1.columns = columns
|
14
14
|
|
1
typoを修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
内部で使用しているGDALのAPIに問題があるようです。調べた結果、メッシュの最後の文字`ュ`がNGです。最後の行の`f1.to_file()`の前に以下のコードを入れてメッシュを「メッシ」にすると動くと思います。
|
5
|
+
内部で使用しているGDALのAPIに問題があるようです。調べた結果、メッシュの最後の文字`ュ`がNGです。最後の行の`df1.to_file()`の前に以下のコードを入れてメッシュを「メッシ」にすると動くと思います。
|
6
6
|
|
7
7
|
```python
|
8
8
|
|