Sha256: 146050f021d74c3d7e95c5ed413c30b88938d8e47dc6b1a8e09eeef230579d20

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 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'

srid = 4326
#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 "%s,%s,%s,%s" % (srid,encoding,shp_file,name)

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
cartodb-importer-0.2.6 misc/shp_normalizer.py
cartodb-importer-0.2.5 misc/shp_normalizer.py
cartodb-importer-0.2.4 misc/shp_normalizer.py