问题描述
我们可以通过ogr2ogr 这个工具将shp转成sqlite数据库,如:
for file in $(ls $1/*.dbf)
do
echo $file is file path \! ;
ogr2ogr -append -f "SQLite" $2/sq3_out/out.db $file
done
但是这个数据的输出的geometry字段确无法被spatialite解析,执行如下查询将会得到null。
select geomfrowWKB(geometry) from polyline1;
通过查看数据的十六进制的前5个字节,结果为:
0102000080
其中,01代表小端模式,余下的是一个32位的int型整数:0x80000002 (十进制数为:-2147483646)
实际是spatialite对这个数字对应的类型已经在spatialite/gg_const.h 这个头文件中定义了,如下:
/* constants that defines GEOS-WKB 3D CLASSes */
/** GEOS-WKB 3D CLASS: POINT Z */
#define GAIA_GEOSWKB_POINTZ -2147483647
/** GEOS-WKB 3D CLASS: LINESTRING Z */
#define GAIA_GEOSWKB_LINESTRINGZ -2147483646
/** GEOS-WKB 3D CLASS: POLYGON Z */
#define GAIA_GEOSWKB_POLYGONZ -2147483645
问题出在:// spatialite.c 中check_wkb函数,在做类型判断的