Join Now

Juletip #8: Tegn dine egne kort i SAS® Visual Analytics

by SAS Employee sdkcjn on ‎12-10-2015 04:52 AM (525 Views)

Så blev det endelig tid til at åbne den 10. låge i årets julekalender, og dermed får du nu det 8. juletip.

Bag denne låge gemmer der sig fortællingen om, hvordan du får de bedste kort i SAS® Visual Analytics.

 

Nogle har allerede egne polygonkort, og så er man allerede over halvvejs. Andre er knapt så heldige. Hvis ikke man har adgang til egne polygonkort, kan det være værd at slå et smut forbi http://www.qgis.org/da/site/, her kan man downloade det gratis, Open Source GIS værktøj QGIS. Med QGIS er det muligt, via OpenStreetMap API, at finde mange forskellige polygonkort i netop dit område. Hvis man er ekstra sej, kan man i QGIS også tegne sine egne kort eller figurer og indlæse disse i SAS® Visual Analytics.

 

Når du har fået dine polygonkort i en shapefil, kan du via simpel SAS kode få tegnet dine kort ind i SAS® Visual Analytics.

 

Nedenfor et eksempel på et eksempel på tegning af et polygonkort indeholdende bygninger i et begrænset område af Valby:

 

ValbyPolygons.jpg

 

Forudsætninger:

 

  1. Opret en fysisk folder på en placering man ønsker at have sit polygondata liggende.
  2. Lav et pre-assigned libname til foldes ved at tilføje følgende libname statement i autoexecen:

 

*sti til autoexec-fil: <config-dir>/Lev1/SASApp/appserver_autoexec_usermods.sas;

libname MAPSCSTM 'C:\sasfolders\VA\Maps';

3. Når koden er kørt, skal SASServer1_1 genstartes

  • På linux:

 

<config-dir>/Lev1/Web/WebAppServer/SASServer1_1/bin/tcruntime-ctl.sh stop
<config-dir>/Lev1/Web/WebAppServer/SASServer1_1/bin/tcruntime-ctl.sh start

 

 

  • På windows:
Control Panel\All Control Panel Items\Administrative Tools\services\SAS [Config94-Lev1] SASServer1_1 - WebAppServer

Og nu endelig til noget kode:

 

%let shapefile = C:\Projekter\VA\Shapefiler\ValbyBuildings\ValbyBuildings.shp;
%let tmp_out = work.building;
%let id = id_num;
%let type = Building;
%let polygon_name = Building;

*Importer shapefil;
proc mapimport datafile="&shapefile" out=&tmp_out.;
run;

*Lav unikt ID for hver bygning, bestående af &type.-||put(&id.,8.).
Eksempel id_num = 1223 --> id = Building-1223;

data &tmp_out.;
	set &tmp_out.;
	ID = compress("&type.-"||put(&id.,8.));
run;

*Lav libname til lookup-tabeller;

libname valib 'C:\SAS\Config94\Lev1\SASApp\Data\valib';

*Indsæt værdier fra den importerede shapefile i attrlookup tabellen;

proc sql;
	insert into valib.attrlookup;
	select distinct 
		strip(&polygon_name.),                               
		ID, 
		strip(&polygon_name.),                             
		"Denmark",                             
		"",                                    
		"208",                                 
		"DENMARK",                               
		compress(&polygon_name.) || "|Denmark",           
		"DK",                                    
		"",                                     
		"",                                      
		"",                                      
		1                                       
	from &tmp_out.
	;
quit;

*Indsæt værdier fra den importerede shapefile i centlookup tabellen;

proc sql;
	insert into valib.centlookup
		select distinct 
			"MAPSCSTM.VAEUROPE1" as mapname,
			ID,
			avg(x) as x,
			avg(y) as y
		from &tmp_out.
			group by id;
quit;

*Kopier VAEUROPE1 tabellen fra MAPSGFK libnamet til MAPSCSTM;

proc copy in=mapsgfk out=mapscstm;
	select VAEUROPE1;
run;

*indsæt værdier fra den importerde shapefil til MAPSCSTM.VAEUROPE1 tabellen;
proc sql;
	insert into MAPSCSTM.VAEUROPE1
		select 	
			ID,	
			SEGMENT,
			X,	
			Y,	
			X,	
			Y,		
			"208",        
			DENSITY,	
			1,		
			0,		
			"DK",		
			"regions",	
			&polygon_name.     
		from &tmp_out.
	;
quit;