import json,math,urllib.parse
R=20037508.34/180.0
def my(lat): return math.log(math.tan((90+lat)*math.pi/360))/(math.pi/180)*R
spec=json.load(open('row_spec200.json'))
dx=spec['dx']; step=dx*R
D=253.5
out={}
for r in spec['rows']:
    row=r['row']; lon0=r['lon0']; k=int(round((r['lon1']-lon0)/dx))+1
    x0=round(lon0*R); L=round(k*step); xe=x0+L; y=round(my(r['lat']))
    assert math.ceil(L/D)==k, (row,k,L/D)
    u='https://elevation.nationalmap.gov/arcgis/rest/services/3DEPElevation/ImageServer/getSamples?geometryType=esriGeometryPolyline&sampleDistance=%s&f=json&geometry={"paths":[[[%d,%d],[%d,%d]]]}'%(D,x0,y,xe,y)
    # expected sample x positions
    out[row]={'k':k,'n':r['n'],'lon0':lon0,'x0':x0,'stepa':L/k,'url':u,'enc':len(urllib.parse.quote(u,safe=':/?&='))}
json.dump(out,open('plan200.json','w'))
print('rows',len(out),'maxk',max(v['k'] for v in out.values()),'maxenc',max(v['enc'] for v in out.values()))
