Wechat: yu389741| Email: gisdqy@163.com

Shop:https://www.giserdqy.com/shop

使用GDAL的ogr2ogr.py将shapefile插入到mysql中(二)



上一节提到,安装了编译好的gdal python模块,不知道这个编译好的版本有没有ogr2ogr的命令,从gdal-2.1.3的源代码文件夹中gdal-2.1.3\swig\python\samples下可以找到ogr2ogr.py。

打开命令行,cd定位到ogr2ogr.py所在的文件夹,运行命令

python ogr2ogr.py -f MySQL MySQL:pathanalysis,host=localhost,user=root,password=000000 C:\Users\Administrator\Desktop\hi\newbusstop.shp -nln bus -update 
-overwrite  -lco engine=MYISAM

注意:
格式为:

python ogr2ogr.py -f MySQL MySQL:数据库名,主机名(或IP地址),用户名,密码 文件路径地址 -nln 表名 -update -overwrite -lco engine=MYISAM

其中表名和文件路径地址不能为中文否则报错(如果在gdal的c++→python编译过程中设置好应该就不会了。

如果不报错,应该就储存进入数据库了。
如果报out of range for colum XXX at row 1错误:

ERROR 1: MySQL error message:
Out of range value for column 'east' at row 1 
Description: INSERT INTO `bus` (`SHAPE` , `bus_stop`, `stopid`, `east`, `north`, `point_oid`) 
    VALUES (GeometryFromText('POINT (48518.3512246999 19706.3768905791)',1) , '骞垮ぇ鐢熸椿鍖虹珯', 'B002', 48518.40000000000, 48518.40000000000, 0)
Terminating translation prematurely after failed
translation of layer newbusstop (use -skipfailures to skip errors)

则说明ogr2ogr.py创建的表中,字段的大小容纳不下插入的数据,这时候进入数据库将报错字段长度改大。
然后在将第一条命令中的“-overwrite”改成“-append”:

python ogr2ogr.py -f MySQL MySQL:数据库名,主机名(或IP地址),用户名,密码 文件路径地址 -nln 表名 -update -append -lco engine=MYISAM

如果报Incorrect string value: ‘\xE5’ for column X’X’X at row 1 XXX错误,说明在shapefile中该字段储存的汉字编码是gbk,但是在数据库中该字段的编码是utf-8,进入mysql修改该字段的字符集为gbk,再运行上一条命令即可。

python ogr2ogr.py -f MySQL MySQL:数据库名,主机名(或IP地址),用户名,密码 文件路径地址 -nln 表名 -update -append -lco engine=MYISAM
python ogr2ogr.py -f MySQL MySQL:数据库名,主机名(或IP地址),用户名,密码 文件路径地址 -nln 表名 -update -append -lco engine=MYISAM

转载自:https://blog.csdn.net/qq_23560347/article/details/64132271