Penso che le piattaforme 3D non possano farlo.@Paul_Nelson . Effetti 3D, satelliti, GPS mostra un modo rozzo per simulare la mappatura delle texture, ma dovresti scrivere JSL e devi reinventare assi, etichette, selezione e così via.
Potresti usare una piattaforma 2D come questa (codice alla fine, il primo 80% è configurato):
// attribution: https://simplemaps.com/data/world-cities
za = 0; // clear prev run
za = Open( "https://simplemaps.com/static/data/world-cities/basic/simplemaps_worldcities_basicv1.6.zip", "zip" );
blob = za << read( "worldcities.csv", Format( blob ) );
dt = Open(
blob,
columns(
New Column( "city", Character, "Nominal" ),
New Column( "city_ascii", Character, "Nominal" ),
New Column( "lat", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "lng", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "country", Character, "Nominal" ),
New Column( "iso2", Character, "Nominal" ),
New Column( "iso3", Character, "Nominal" ),
New Column( "admin_name", Character, "Nominal" ),
New Column( "capital", Character, "Nominal" ),
New Column( "population", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "id", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( 500 ), // there are 15,000; that's too much clutter
Year Rule( "20xx" )
)
);
dt:city << label;
gb = dt << Graph Builder(
Size( 1326, 715 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Footer( 0 ),
Variables( X( :lng ), Y( :lat ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" ), Image Export Display( Normal )} ),
Dispatch(
{},
"lng",
ScaleBox,
{Scale( "Geodesic" ), Min( -180 ), Max( 180 ), Inc( 90 ), Minor Ticks( 0 ),
Label Row( {Show Major Labels( 0 ), Show Major Ticks( 0 ), Show Minor Ticks( 0 )} )}
),
Dispatch(
{},
"lat",
ScaleBox,
{Scale( "Geodesic" ), Format( "Best", 12 ), Min( -90 ), Max( 90 ), Inc( 45 ), Minor Ticks( 1 ), Label Row(
{Show Major Labels( 0 ), Show Major Ticks( 0 ), Show Minor Ticks( 0 )}
)}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Big City Population" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "" )} ),
Dispatch(
{},
"Graph Builder",
FrameBox,
{Background Map( Boundaries( "World" ) ), Marker Size( 0 ), Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Grid Line Order( 2 ),
Reference Line Order( 4 )}
)
)
);
// add small lines
Report( gb )[framebox( 1 )] << Add Graphics Script(
Pen Color( "red" );
For( i = 1, i <= N Rows( dt ), i += 1,
Pen Size( population[i] / 1e6 );
Pixel Origin( :lng[i], :lat[i] );
Pixel Move To( 0, 0 );
Pixel Line To( 20 * population[i] / 30e6, -100 * population[i] / 30e6 );
);
// text on top
For( i = 1, i <= N Rows( dt ), i += 1,
If( population[i] >= 12e6,
Text Size( 12 );
Text( centerjustified, {:lng[i], :lat[i]}, city[i] );
)
);
);
Non proprio in 3D