Skip to content

Instantly share code, notes, and snippets.

@xslogic
Created December 8, 2010 07:05
Show Gist options
  • Select an option

  • Save xslogic/732986 to your computer and use it in GitHub Desktop.

Select an option

Save xslogic/732986 to your computer and use it in GitHub Desktop.
problem2 mod
grid_id(Lat, Long, XMax, YMax) ->
{X, Y} = scale(Long, Lat, XMax, YMax),
grid_id(X, Y, XMax div 2, YMax div 2, []).
grid_id(_, _, X, Y, Val) when (X < 1) andalso (Y < 1)->
list_to_integer(lists:reverse(Val));
grid_id(X, Y, XTh, YTh, Val) when (X > XTh) andalso (Y > YTh) ->
grid_id(X - XTh, Y - YTh, XTh div 2, YTh div 2, [$4|Val]);
grid_id(X, Y, XTh, YTh, Val) when (X > XTh) andalso (Y =< YTh) ->
grid_id(X - XTh, Y, XTh div 2, YTh div 2, [$3|Val]);
grid_id(X, Y, XTh, YTh, Val) when (X =< XTh) andalso (Y > YTh) ->
grid_id(X, Y - YTh, XTh div 2, YTh div 2, [$2|Val]);
grid_id(X, Y, XTh, YTh, Val) ->
grid_id(X, Y, XTh div 2, YTh div 2, [$1|Val]).
scale(X, Y, XMax, YMax) ->
{((X + 180.0) / 360.0) * XMax, ((Y + 90.0) / 180.0) * YMax}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment