Sha256: 75a4e9e3e9c0cf45814a783fc641d32f08f4c33365b96415b7f87ce30aae781c

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

from chardet.universaldetector import UniversalDetector
import os.path
import sys
import dbfUtils
import sys
from osgeo import osr
from urllib import urlencode
from urllib2 import urlopen
import json
import subprocess

shp_file = sys.argv[1]
name = sys.argv[2]

dbf_file = shp_file[0:-4] + '.dbf'
prj_file = shp_file[0:-4] + '.prj'

#Try detecting the SRID
if os.path.isfile(prj_file):
  prj_filef = open(prj_file, 'r')
  prj_txt = prj_filef.read()
  prj_filef.close()
  srs = osr.SpatialReference()
  srs.ImportFromESRI([prj_txt])
  srs.AutoIdentifyEPSG()
  code = srs.GetAuthorityCode(None)
  if code:
    srid = code
  else:
    #Ok, no luck, lets try with the OpenGeo service
    query = urlencode({
        'exact' : True,
        'error' : True,
        'mode' : 'wkt',
        'terms' : prj_txt})
    webres = urlopen('http://prj2epsg.org/search.json', query)
    jres = json.loads(webres.read())
    if jres['codes']:
      srid = int(jres['codes'][0]['code'])

#Try to detect the encoding
dbf = open(dbf_file, 'rb')
db = dbfUtils.dbfreader(dbf)

detector = UniversalDetector()
for row in db:
  detector.feed(str(row))
  if detector.done: break
detector.close()
dbf.close()

encoding = detector.result["encoding"]
if encoding=="ascii":
    encoding="LATIN1"

print " -r %s -s 4326 -e -i -I -g the_geom -W %s %s %s" %(srid,encoding,shp_file,name)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cartodb-importer-0.2.3 misc/shp_normalizer.py