5
$\begingroup$

I have tried to create a map using GeoGraphics, and I have not been able to get one with the same quality as the result Wolfram|Alpha gave me.

WolframAlpha["distance between eeuu and north korea", {{"Map", 1}, "Content"}] 

enter image description here

GeoGraphics[
 GeoPath[{Entity["Country", "UnitedStates"], 
   Entity["Country", "China"]}], GeoBackground -> "VectorMonochrome", 
 GeoProjection -> "AzimuthalEquidistant"]

enter image description here

Can I create a similar map with the same quality (the Wolfram|Alpha image is, for example, vectorized) to the one Wolfram|Alpha gave me using GeoGraphics directly?

In fact, this question is related to others that I've seen some people ask on other sites and never got an answer: If I get a result from Wolfram|Alpha, is there any way to, from that result, get the code I can write in Mathematica to generate it? That is, given the image map, how do I get Mathematica to give me the code for that image?

$\endgroup$
2
  • 1
    $\begingroup$ No, I don't think it is possible to get the "raw" code which is used internally in Wolfram|Alpha to generate such plots. However, I don't think it's that difficult to recreate the map. Can you please show us what you've tried so far? For example: even a simple loc1 = Entity["Country", "UnitedStates"];loc2 = Entity["Country", "NorthKorea"]; GeoGraphics[{{FaceForm[Orange], Polygon[loc1], Polygon[loc2]}, Red, Darker@Red, Arrow[GeoPath[{loc1, loc2}]]}, GeoBackground -> "CountryBorders"] comes very close. $\endgroup$
    – Domen
    Commented Feb 29 at 16:51
  • $\begingroup$ Thanks. This is the code I wrote and noticed that the vectorized graphic lost quality when using GeoProjection: GeoGraphics[ GeoPath[{Entity["Country", "UnitedStates"], Entity["Country", "China"]}], GeoBackground -> "VectorMonochrome", GeoProjection -> "AzimuthalEquidistant"] $\endgroup$ Commented Feb 29 at 16:58

3 Answers 3

7
$\begingroup$

Here is a rough approximation. First, you generate a temporary GeoGraphics just to get correct positioning (GeoCenter, GeoRange ...). Then, you can get a high quality world map from Polygon[Entity["GeographicRegion", "World"]].

loc1 = Entity["Country", "UnitedStates"]; 
loc2 = Entity["Country", "NorthKorea"]; 

(* Temporary GeoGraphics *)
geo = GeoGraphics[{Polygon[loc1], Polygon[loc2], 
   Arrow[GeoPath[{loc1, loc2}]]}];

GeoGraphics[{{EdgeForm[Gray], FaceForm[LightGray], 
   Polygon[Entity["GeographicRegion", "World"]], GeoStyling[Orange], 
   Polygon[loc1], Polygon[loc2]}, Darker@Red, Thick, 
  Arrow[GeoPath[{loc1, loc2}]], Red, PointSize[Large], 
  Point[{loc1, loc2}]}, GeoBackground -> None, 
 Sequence @@ Options[geo]]

enter image description here

$\endgroup$
9
$\begingroup$

This is pretty close, I think:

GeoGraphics[{{GeoStyling[Orange], 
   Polygon /@ {Entity["Country", "UnitedStates"], 
     Entity["Country", "NorthKorea"]}}, {Red, 
   Arrow[GeoPath[{Entity["Country", "UnitedStates"], 
      Entity["Country", "NorthKorea"]}]]}}, 
 GeoBackground -> {"CountryBorders", "Land" -> GrayLevel[0.95], 
   "Ocean" -> White}]

enter image description here

$\endgroup$
1
  • 2
    $\begingroup$ Ah, GeoStyling instead of FaceForm for vivid colors, thanks! $\endgroup$
    – Domen
    Commented Feb 29 at 17:13
7
$\begingroup$

Perhaps something like this:

usa = Entity["Country", "UnitedStates"];
korea = Entity["Country", "NorthKorea"];

GeoGraphics[{
   {GeoStyling[Append[Orange, 0.8]], Polygon[GeoVariant[usa, "AllAreas"]], Polygon[korea]},
   {ColorData[112, 1], AbsoluteThickness[2], Arrow[GeoPath[{usa, korea}]]},
   {Red, PointSize[Large], Point[{usa, korea}]}
  },
  GeoBackground -> {{"CountryBorders", "Land" -> GrayLevel[0.9], 
    "Ocean" -> None, "Border" -> GrayLevel[0.7]}},
  GeoProjection -> "LambertAzimuthal",
  GeoRange -> GeoBounds[GeoGroup[{usa, korea}]],
  PlotRangePadding -> Scaled[.06],
  AspectRatio -> 1/GoldenRatio
]
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.