mirror of
https://github.com/wassname/PyCRS.git
synced 2026-06-27 16:10:29 +08:00
fcc463fa76
Also just need to expand to more projection name, datum name, and ellipsoid name definitions, and also additional special parameters. After that, test, and move onto from_wkt()...
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
import urllib2
|
|
import re
|
|
|
|
def build_crs_table(savepath):
|
|
|
|
# create table
|
|
outfile = open(savepath, "wb")
|
|
|
|
# create fields
|
|
fields = ["codetype", "code", "proj4", "ogcwkt", "esriwkt"]
|
|
outfile.write("\t".join(fields) + "\n")
|
|
|
|
# make table from url requests
|
|
for codetype in ("epsg", "esri", "sr-org"):
|
|
print(codetype)
|
|
|
|
# collect existing proj list
|
|
print("fetching list of available codes")
|
|
codelist = []
|
|
page = 1
|
|
while True:
|
|
try:
|
|
link = 'http://spatialreference.org/ref/%s/?page=%s' %(codetype,page)
|
|
html = urllib2.urlopen(link).read()
|
|
codes = [match.groups()[0] for match in re.finditer(r'/ref/'+codetype+'/(\d+)', html) ]
|
|
if not codes: break
|
|
print("page",page)
|
|
codelist.extend(codes)
|
|
page += 1
|
|
except:
|
|
break
|
|
|
|
print("fetching string formats for each projection")
|
|
for i,code in enumerate(codelist):
|
|
|
|
# check if code exists
|
|
link = 'http://spatialreference.org/ref/%s/%s/' %(codetype,code)
|
|
urllib2.urlopen(link)
|
|
|
|
# collect each projection format in a table row
|
|
row = [codetype, code]
|
|
for resulttype in ("proj4", "ogcwkt", "esriwkt"):
|
|
try:
|
|
link = 'http://spatialreference.org/ref/%s/%s/%s/' %(codetype,code,resulttype)
|
|
result = urllib2.urlopen(link).read()
|
|
row.append(result)
|
|
except:
|
|
pass
|
|
|
|
print("projection %i of %i added" %(i,len(codelist)) )
|
|
outfile.write("\t".join(row) + "\n")
|
|
|
|
# close the file
|
|
outfile.close()
|
|
|
|
|
|
def crscode_to_string(codetype, code, format):
|
|
link = 'http://spatialreference.org/ref/%s/%s/%s/' %(codetype,code,format)
|
|
result = urllib2.urlopen(link).read()
|
|
return result
|
|
|
|
def crsstring_to_string(string, newformat):
|
|
# search string, if string is correct there should only be one correct match
|
|
link = 'http://spatialreference.org/ref/?search=%s' %string
|
|
searchresults = urllib2.urlopen(link).read()
|
|
# pick the first result
|
|
# ...regex...
|
|
# go to its url, with extension for the newformat
|
|
link = 'http://spatialreference.org/ref/%s/%s/%s/' %(codetype,code,newformat)
|
|
result = urllib2.urlopen(link).read()
|
|
return result
|
|
|
|
|
|
if __name__ == "__main__":
|
|
build_crs_table("crstable.txt")
|
|
|
|
|