MapInfo 数据帧导入方法

我们拿到的数据基本上是shp 格式或者 mapinfo的tab 格式的。所以要经过5个过程的转换才能送到PostGIS 里面。

1. #mapinfo 文件转换成 ERSI shp 格式: 结果文件放在前面,这个有点特殊。

ogr2ogr -f  "ESRI Shapefile" 花都.shp  ./花都楼高.tab

2#转换坐标系:原来是4326 的,转换成google的900913 坐标系。

ogr2ogr -t_srs EPSG:900913 -s_srs EPSG:4326 花都_9.shp 花都.shp

3 #转换成sql 语句

shp2pgsql -s 900913 花都_9.shp huadu > huadu.sql

4 #转换成utf-8编码, 这个是利用mac自带下的 iconv 命令可以批量完成转换。Windows 下有其他的转换方法。比较常用的是利用Uedit32的另存为,然后选择UTF-8的格式。

find *.sql -exec sh -c "iconv -f GB18030 -t UTF8 {} > {}.u" \;

5. #然后再用用psql 导入到数据库中
psql -d GZ125 -f  .\huadu.sql.u


补充说明:

用ogr2ogr  需要安装GDAL/Proj/Geos. Linux 和 Mac 可以通过 sudo apt-get 或者mac ports 获得。
Windows 下面比较方便的就是安装MS4W。然后手工增加 900913 的坐标投影。

如果安装的是ms4w, 设置坐标系,EPSG:90013
在Dos下执行这个命令:
echo ^<900913^> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs ^<^> >> \ms4w\proj\nad\epsg
就可以了。


#如果发生错误,可能是900913没有定义
那么执行:
INSERT into spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) values (900913 ,'EPSG',900913,'GEOGCS["WGS 84", DATUM["World Geodetic System
1984", SPHEROID["WGS 84", 6378137.0, 298.257223563,AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], NIT["degree",0.017453292519943295], AXIS["Longitude", EAST], AXIS["Latitude", NORTH],AUTHORITY["EPSG","4326"]], PROJECTION["Mercator_1SP"],PARAMETER["semi_minor", 6378137.0],
PARAMETER["latitude_of_origin",0.0], PARAMETER["central_meridian", 0.0], PARAMETER["scale_factor",1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0],UNIT["m", 1.0], AXIS["x", EAST], AXIS["y", NORTH],AUTHORITY["EPSG","900913"]] |','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m
+nadgrids=@null +no_defs');



你可能感兴趣的:(sql,linux,windows,dos,Google)