| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3,6 +3,7 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import os | 
					 | 
					 | 
					 | 
					import os | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import time | 
					 | 
					 | 
					 | 
					import time | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import numpy as np | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from cffi import FFI | 
					 | 
					 | 
					 | 
					from cffi import FFI | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from common.ffi_wrapper import suffix | 
					 | 
					 | 
					 | 
					from common.ffi_wrapper import suffix | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -16,7 +17,7 @@ def get_ffi(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ffi = FFI() | 
					 | 
					 | 
					 | 
					  ffi = FFI() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ffi.cdef(""" | 
					 | 
					 | 
					 | 
					  ffi.cdef(""" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void* map_renderer_init(); | 
					 | 
					 | 
					 | 
					void* map_renderer_init(char *maps_host, char *token); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void map_renderer_update_position(void *inst, float lat, float lon, float bearing); | 
					 | 
					 | 
					 | 
					void map_renderer_update_position(void *inst, float lat, float lon, float bearing); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void map_renderer_update_route(void *inst, char *polyline); | 
					 | 
					 | 
					 | 
					void map_renderer_update_route(void *inst, char *polyline); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void map_renderer_update(void *inst); | 
					 | 
					 | 
					 | 
					void map_renderer_update(void *inst); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -40,20 +41,19 @@ def wait_ready(lib, renderer): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def get_image(lib, renderer): | 
					 | 
					 | 
					 | 
					def get_image(lib, renderer): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  buf = lib.map_renderer_get_image(renderer) | 
					 | 
					 | 
					 | 
					  buf = lib.map_renderer_get_image(renderer) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  r = list(buf[0:3 * WIDTH * HEIGHT]) | 
					 | 
					 | 
					 | 
					  r = list(buf[0:WIDTH * HEIGHT]) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  lib.map_renderer_free_image(renderer, buf) | 
					 | 
					 | 
					 | 
					  lib.map_renderer_free_image(renderer, buf) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # Convert to numpy | 
					 | 
					 | 
					 | 
					  # Convert to numpy | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  r = np.asarray(r) | 
					 | 
					 | 
					 | 
					  r = np.asarray(r) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return r.reshape((WIDTH, HEIGHT, 3)) | 
					 | 
					 | 
					 | 
					  return r.reshape((WIDTH, HEIGHT)) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					if __name__ == "__main__": | 
					 | 
					 | 
					 | 
					if __name__ == "__main__": | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  import matplotlib.pyplot as plt | 
					 | 
					 | 
					 | 
					  import matplotlib.pyplot as plt | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  import numpy as np | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ffi, lib = get_ffi() | 
					 | 
					 | 
					 | 
					  ffi, lib = get_ffi() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  renderer = lib.map_renderer_init() | 
					 | 
					 | 
					 | 
					  renderer = lib.map_renderer_init(ffi.NULL, ffi.NULL) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  wait_ready(lib, renderer) | 
					 | 
					 | 
					 | 
					  wait_ready(lib, renderer) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  geometry = r"{yxk}@|obn~Eg@@eCFqc@J{RFw@?kA@gA?q|@Riu@NuJBgi@ZqVNcRBaPBkG@iSD{I@_H@cH?gG@mG@gG?aD@{LDgDDkVVyQLiGDgX@q_@@qI@qKhS{R~[}NtYaDbGoIvLwNfP_b@|f@oFnF_JxHel@bf@{JlIuxAlpAkNnLmZrWqFhFoh@jd@kX|TkJxH_RnPy^|[uKtHoZ~Um`DlkCorC``CuShQogCtwB_ThQcr@fk@sVrWgRhVmSb\\oj@jxA{Qvg@u]tbAyHzSos@xjBeKbWszAbgEc~@~jCuTrl@cYfo@mRn\\_m@v}@ij@jp@om@lk@y|A`pAiXbVmWzUod@xj@wNlTw}@|uAwSn\\kRfYqOdS_IdJuK`KmKvJoOhLuLbHaMzGwO~GoOzFiSrEsOhD}PhCqw@vJmnAxSczA`Vyb@bHk[fFgl@pJeoDdl@}}@zIyr@hG}X`BmUdBcM^aRR}Oe@iZc@mR_@{FScHxAn_@vz@zCzH~GjPxAhDlB~DhEdJlIbMhFfG|F~GlHrGjNjItLnGvQ~EhLnBfOn@p`@AzAAvn@CfC?fc@`@lUrArStCfSxEtSzGxM|ElFlBrOzJlEbDnC~BfDtCnHjHlLvMdTnZzHpObOf^pKla@~G|a@dErg@rCbj@zArYlj@ttJ~AfZh@r]LzYg@`TkDbj@gIdv@oE|i@kKzhA{CdNsEfOiGlPsEvMiDpLgBpHyB`MkB|MmArPg@|N?|P^rUvFz~AWpOCdAkB|PuB`KeFfHkCfGy@tAqC~AsBPkDs@uAiAcJwMe@s@eKkPMoXQux@EuuCoH?eI?Kas@}Dy@wAUkMOgDL" | 
					 | 
					 | 
					 | 
					  geometry = r"{yxk}@|obn~Eg@@eCFqc@J{RFw@?kA@gA?q|@Riu@NuJBgi@ZqVNcRBaPBkG@iSD{I@_H@cH?gG@mG@gG?aD@{LDgDDkVVyQLiGDgX@q_@@qI@qKhS{R~[}NtYaDbGoIvLwNfP_b@|f@oFnF_JxHel@bf@{JlIuxAlpAkNnLmZrWqFhFoh@jd@kX|TkJxH_RnPy^|[uKtHoZ~Um`DlkCorC``CuShQogCtwB_ThQcr@fk@sVrWgRhVmSb\\oj@jxA{Qvg@u]tbAyHzSos@xjBeKbWszAbgEc~@~jCuTrl@cYfo@mRn\\_m@v}@ij@jp@om@lk@y|A`pAiXbVmWzUod@xj@wNlTw}@|uAwSn\\kRfYqOdS_IdJuK`KmKvJoOhLuLbHaMzGwO~GoOzFiSrEsOhD}PhCqw@vJmnAxSczA`Vyb@bHk[fFgl@pJeoDdl@}}@zIyr@hG}X`BmUdBcM^aRR}Oe@iZc@mR_@{FScHxAn_@vz@zCzH~GjPxAhDlB~DhEdJlIbMhFfG|F~GlHrGjNjItLnGvQ~EhLnBfOn@p`@AzAAvn@CfC?fc@`@lUrArStCfSxEtSzGxM|ElFlBrOzJlEbDnC~BfDtCnHjHlLvMdTnZzHpObOf^pKla@~G|a@dErg@rCbj@zArYlj@ttJ~AfZh@r]LzYg@`TkDbj@gIdv@oE|i@kKzhA{CdNsEfOiGlPsEvMiDpLgBpHyB`MkB|MmArPg@|N?|P^rUvFz~AWpOCdAkB|PuB`KeFfHkCfGy@tAqC~AsBPkDs@uAiAcJwMe@s@eKkPMoXQux@EuuCoH?eI?Kas@}Dy@wAUkMOgDL" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -73,6 +73,6 @@ if __name__ == "__main__": | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print(f"{pos} took {time.time() - t:.2f} s") | 
					 | 
					 | 
					 | 
					    print(f"{pos} took {time.time() - t:.2f} s") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    plt.subplot(2, 2, i + 1) | 
					 | 
					 | 
					 | 
					    plt.subplot(2, 2, i + 1) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    plt.imshow(get_image(lib, renderer)) | 
					 | 
					 | 
					 | 
					    plt.imshow(get_image(lib, renderer), cmap='gray') | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  plt.show() | 
					 | 
					 | 
					 | 
					  plt.show() | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
  |