GeoGraphics

自 Wolfram 语言 10.0 版以来,GeoGraphics 允许你使用简单和通俗的方法构建地球和其他天体的表面地图. GeoGraphics 组合了带有快速和高精度大地测量计算的强大的 Graphics 功能并可通过 Entity 框架直接访问 Wolfram 知识库.
GeoGraphics 中关于标准二维 Graphics 基础的新成分是地球表面是弯曲的这个事实,因此它们必须畸变(在纸上或计算机屏幕上)产生平面地图. 这就需要选择一个地图投影,一个函数来决定弯曲曲面上的点如何映射到平面地图上的点. GeoProjectionData 数据包提供了投影的大型集合.
GeoGraphics 还引入了新的图形基元,例如 GeoPathGeoDiskGeoHemisphere 以适应于地球的曲率,甚至还有依赖于时间的地理基元,诸如, DayHemisphereDayNightTerminator.
GeoGraphics 功能可以使用 Entity 框架方便地访问 Wolfram 知识库获取地理图形信息,提供对几十种对象类型的大量属性的均匀访问,从国家和城市到桥梁、地球和人造卫星.
GeoGraphics 完全集成了 Wolfram 语言中测地学的功能,版本 10.0 有了广泛的更新. 该功能现在更快并且精确到地球椭球表面的毫米级. GeoPosition 允许在任何 GeodesyData 椭球的大型集合上指定地球上任何的位置,例如,GPS 卫星使用的 WGS84 参考坐标系.
本教程提供 GeoGraphics 的简介以及其相关函数. 该教程先展示了如何方便地构建任意区域或地理图形实体的地图,让 GeoGraphics 选择合适的坐标范围、投影等. 然后解释如何选择所有这些选项细调你所需要的地图.
基本地图
最简单和最重要的操作是获取给定感兴趣区域的地图. Entity 框架提供快速和均一的方法获取位置信息. GeoGraphics 会选择充足的投影,一般来说,"Mercator" 投影适用于小中型规模(对角线大约小于 2000 公里).
GeoGraphics[primitives,options]
绘制地图
主要的地图命令.
法国地图. 输入 CTRL= 和单词 "France" 获取实体:
纽约市地图:
如果没有参数,默认情况下,GeoGraphics 给出由 $GeoLocation 确定的,半径为 10 英里的你本地的地图.
当前 $GeoLocation,按 GeoPosition[{lat,lon}] 对象返回:
该地理位置周边地图:
通过使用选项值 GeoRange"World" 获取整个世界的地图. 默认情况下是使用所谓的 "Equirectangular" 投影给出这种地图,其中,水平轴是经度,垂直轴是纬度. 同样, GeoRange"Country" 给出国家地图,GeoGraphics 会选择使地图具有最小失真的投影.
世界地图:
你所在国家的地图,由 $GeoLocation 决定:
探索使用的是哪个投影:
或者选择的经纬度(以度为单位)范围:
选项 GeoRangeGeoRangePaddingGeoCenterGeoZoomLevel 允许多种方法指定感兴趣的区域. 教程之后会有详细的介绍.
给出确切的经纬度范围:
在所有方向增加 10 公里的填充:
指定中心和放大范围:
在没有改变地理范围的情况下,可以改变图像的放大级别. 其结果会更加详细:
但是地图的尺寸会更大:
给出的地图显示了地理背景图像对应于给定的区域. GeoGraphics 语言提供各种称之为地理基元的对象,它可以放在地图上. 这些地理基元可以点状(PointGeoMarker)、线状(GeoPathGeoCircleLine ...)或区域状(GeoDiskGeoHemispherePolygon ...).
在南美的首都放置标记:
从智利圣地亚哥到马德里的测地曲线. 在该投影中它不是一条直线:
芝加哥周围 60 英里的圆盘,默认情况下是低不透明度,因此可以看透:
多边形覆盖美国,这里用的也是低不透明度:
有多种方式可以样式化地图. 你可以添加平行线和子午线、比例尺、或改变地理背景描绘高程数据的地形图或等高线图. 你可以改变颜色和透明度或甚至把图像放在二维地理基元中,像地理圆盘或多边形以及更多的选择.
西班牙和葡萄牙的地图,经纬线按1度分隔,比例尺用公里为单位:
同样地区的地形图显示地理高程数据:
把西班牙国旗放在国家上:
其他天体(行星和卫星)的地图也是可能的.
月球的近侧(经度 0 定义为朝向地球):
火星上的奥林帕斯山周围的地图:
地理图形位置和计算

GeoPosition 和地理实体

地球上的指定位置是以 GeoPosition[{lat,lon}] 对象给出的,其中经纬度坐标是按标准规定按度数给出. GeoPosition 可以把输入的其他形式转换为方便的符号,包括地理图形的 EntityEntityClass 对象.
GeoPosition[{lat,lon}]
地球表面的位置
Entity["type",name]
给定类型的实体
EntityClass["type",name]
给定类型的实体类,等价于实体列表
位置规范.
北极坐标:
也可以这样获得:
坐标可以按度-分-秒(DMS)字符串形式供给:
以任何单位的 Quantity 对象给出角度:
把地理图形 Entity 数据转换成数字坐标:
GeoPosition 内部调用 EntityValue 获取信息:
GeoPosition 也可以处理坐标数组. 这对于同时高效使用许多点会非常有用. 数组点可以不同符号给出, GeoPosition 会把它们都转换为数字坐标.
转换实体列表:
EntityClass 对象被诠释为作为成员列表的表示:
从照片中提取地理位置 EXIF 信息:
同时转换不同类型的对象:

距离和方位(角度)

除了给定地点的坐标位置,知道两点间的距离也很重要,以及从一点到另一点所要遵循的罗盘方向. 距离是沿测地线计算的,也就是说两个位置间的最短曲线. 角度是按方向给定,也就是按顺时针从北到测地线的角度(以度为单位). 在 Wolfram 语言中,地球表面的距离是用 GeoDistance 测量,方向是用 GeoDirection 计算.
GeoDistance[loc1,loc2]
俩位置间的测地距离
GeoDirection[loc1,loc2]
距离测地线 loc1 北的角度,从 loc1loc2
GeoDisplacement[loc1,loc2]
测地线 loc1 的距离和角度,从 loc1loc2
GeoDestination[loc1,displ]
displ 给定的测地线终点位置,起始为 loc1
测地线位移.
获取两个城市的近似中心位置:
这是上面点间的测地线:
它们之间的距离:
结果由带有单位的 Quantity 对象给出,单位由 $UnitSystem 确定:
使用 UnitConvert 改变为任何其他单位:
你也可以在 GeoDistance 自己的调用中改变需要的单位系统:
可以使用 Entity 对象直接计算距离,这样 Wolfram 语言函数会尽可能尝试使用多边形信息,而不是纯点似位置. 也就是说当考虑多边形的所有点时,GeoDistance 会返回最小可能的距离.
纽约和巴黎边界间的距离:
它比从中心到中心的距离更小:
中心间的距离可以使用 GeoDistanceDistanceFunction 选项计算:
下面地图显示相对于城市多边形的中心位置:
GeoDirection 计算方位. 目前该函数不处理多边形信息,只处理位置信息. 适当情况下,系统会发出警示信息.
以下是在纽约测量的从纽约到巴黎的测地线方位:
以度分秒形式表示结果:
GeoDirection 总是使用中心位置;因此,前面的结果与下面的一样:
这是相同的测地线,但是从巴黎到纽约:
GeoDisplacement 给出距离(米)和方位(度):
知道地理位移和初始位置,可能获得终点位置:

关系定位

我们经常需要知道离给定位置最短距离处的特殊类型的实体. 这是函数 GeoNearest 的角色. 如果延伸位置或实体,你可能会对包含关系感兴趣.
GeoNearest[enttype,loc]
loc 最近的 enttype 类型的实体
GeoIdentify[enttype,loc]
包含 locenttype 类型的实体
GeoEntities[reg,enttype]
enttype 类型的尸体被包含在区域 reg
GeoWithinQ[reg,loc]
检验 loc 是否包含在区域 reg
实体和位置中的距离关系.
求离你当前文职最近的海洋或海:
求离给定位置最近的四个国家,按边境的距离进行排序:
求距英国巴思10英里以内的所有城市并按距离排序:
其他关系基本上是按 GeoNearest 得出. 例如,GeoIdentify 返回所有包含给定位置的实体,默认情况下是你当前的地理位置.
包含当前地理位置的所有可用实体:
各种类型的实体:
含有 Rome 的所有行政区划:
反之亦然,GeoEntities 列出在给定的延伸实体中的列表.
一级行政区划中的二级行政区划:
达拉斯的著名建筑:
函数 GeoWithinQ 检验地理图形的位置(延伸或未延伸的)是否在地理图形区域内.
检验芝加哥是否在伊利诺伊州:
特内里费岛是在大西洋,不在地中海:
所有这些计算会发送给 Wolfram 地理服务器,然后下载结果. 在某些情况,可以使用 Nearest 进行本地操作.
该变量给出当前所在国家:
获取多边形的边界点:
找出离你当前位置最近的点:
用箭头绘制测地线:

地理实体变种

有些时候,你只想要一个国家主要区域的地图,不包括很远的小岛或附属地. 或许你可能需要包括所有领地的地图. 对于这些情况,Wolfram 语言使用标头 GeoVariant 指定其他信息.
GeoVariant[entity,variant]
一个实体的地理图形变种
地理实体变种.
美国的默认地图只包括相连接的州:
以下地图包括所有区域:
介于它们之间的是由变体 "PrincipalArea" 和下采样格式 "SimplifiedArea" 给出. 在这种情况下,美国地图包括阿拉斯加和夏威夷:
地图中的默认变体是"DefaultMapArea"
其他地理函数也可以处理地理实体变种. 但是,默认的不必一样. 例如,GeoNearest 默认的变体有时比对应的 GeoGraphics 中的默认更大.
GeoNearest 中的默认地理变体是 "PrincipalArea"
因此当你改变变体时,结果是不同的:

$GeoLocation 和 FindGeoLocation

Wolfram 语言使用 GeoIP 信息确定你的近似位置. 这可用 FindGeoLocation 实现,结果存于全局变量 $GeoLocation. 变量 Here 是访问当前地理位置的其他方式. 如果没有提供位置信息,与 GeoGraphics 相关的许多函数会使用当前地理位置信息. 你可以手动设置 $GeoLocation 为任何你想要的其他位置,这样你的 Wolfram 语言会话会使用该信息. 设置 $GeoLocation 的值后,变量 $GeoLocationCity$GeoLocationCountry 将自动分配给包含 $GeoLocation 的城市和国家/地区,或最近的可能城市和国家/地区. 注意,改变 $GeoLocation 不会自动改变 $TimeZone.
$GeoLocation
包含你当前地理位置的可重置变量
Here
获取当前地理位置的更简单的方式
$GeoLocationCity
离您当前地理位置最近的城市
$GeoLocationCountry
离您当前地理位置最近的国家/地区
FindGeoLocation[]
使用 GeoIP 信息获取当前地理位置
当前位置.
当前 $GeoLocation
这是等价的对象:
因此,GeoGraphics[] 默认使用该位置:
$GeoLocation 改变为其他位置:
现在,本地地图是纽约的地图:
变回当前位置:
使用 FindGeoLocation 找到地址的近似位置:
坐标和投影的范围

纬度和经度:GeoRange

指定经纬度坐标地图覆盖的区域的最常用的方法是使用选项 GeoRange{{latmin,latmax},{lonmin,lonmax}}. 一如既往,角度是按标准规定,以度给出. 任何其他地理区域规范,在内部最终会转换成这种范围规范,或许延伸为由 GeoRangePadding 选项确定.
GeoRange
指定地图范围的 GeoGraphics 选项
地理范围规范.
GeoBounds 计算任何地理图形区域的经纬度:
使用 "Equirectangular" 投影的地图会显示带有对应于坐标范围的轴的区域. 当使用指定的数值地理范围,没有添加填充:
"World" 地理范围对应于整个世界,默认为 {{-90,90},{-180,180}}
世界的两半部分:
经度 {lonmin,lonmax} 可以任何界定给出. lonmaxlonmin 大模360:
在经度范围中使用的界定会保留在结果中,但只适用于圆柱投影(参见下面的投影类型):

GeoCenter

提供地理范围的其他方法是给出中心点和距离半径,定义地球表面的地理圆盘. 地理范围是完全包围地理圆盘的在 {lat,lon} 坐标中的长方形. 这可以用选项 GeoCenterGeoRange 实现,后者只含有距离半径.
GeoCenter
指定地图中心的 GeoGraphics 选项
地理中心规范.
都柏林 100 英里区域的地图:
GeoCenter 选项可用于选择地图的中心点,它的 GeoRange 是自动从输入中获取. 如果选项 GeoRange 明确指定一个区域,它会覆盖由 GeoCenter 提供的任何其他信息.
以慕尼黑为中心的德国地图:
如果明确指定 GeoRange 选项,那么将忽略 GeoCenter
GeoCenter 还允许你选择 "World" 地理范围的中心经度:

地图区域的其他规范

GeoGraphics 接受输入中的位置信息,而不是地理基元中的. 该信息有助于地图范围的规范,但没有在与之关联的地图上渲染. 当只有中心信息可用时,地图的默认半径标尺是大约 10 英里.
给定位置的周边地图. 地图上没有绘制任何东西:
以下显示了地图的标尺:
你可以任意改动默认范围:
当使用一个 Entity 对象时,GeoGraphics 咨询 EntityValue 是否存在关于位置和多边形的信息. 如果可以获得地理多边形,那么就意味着有一个清晰的标尺概念. 如果不能获得多边形,可以用中心位置和前面的默认标尺进行处理.
这是西雅图周边的多边形. 它包含一个 GeoPosition 对象,其中含有多个 {lat,lon} 数据对:
该地图被缩放以便包含该多边形:
其他地图具有大约 10 英里的标准尺度:
当前没有罗马的多边形信息,因此两个地图覆盖同样的范围:

投影坐标

对于大区域,默认的投影是 "Equirectangular",其中地图坐标直接是经纬度. 然而,对于小一些的区域,选择其他投影会更方便减小失真. 地图坐标不会有直接的角度意义. 例如,对于小尺度(对角线大约小于 2000 公里),默认投影为 "Mercator",它会保留形状. 在这种情况下,水平轴仍然代表经度,但是垂直轴不再是纬度.
墨卡托投影经常用于网络中的地图服务. 但是,它高度扭曲了地级附近的距离和面积. 事实上,地级沿着垂直轴进行无限远映射,因此,墨卡托投影无法在地图上显示整个世界. GeoGraphics 允许你选择需要的投影,数据包 GeoProjectionData 提供最广泛的可用投影集合之一. 当没有指明明确的投影时,GeoGraphics 会给予地图的尺度和中心为你选择合适的投影.
GeoProjection
GeoGraphics 的选项,指明制图投影
地理投影规范.
以下是柏林的经纬度坐标:
然而,Mercator 投影中的德国地图用不同的坐标显示柏林:
这是在地图中使用的投影, Mercator 投影,带有自适应 "Centering""GridOrigin" 参数,因此水平轴仍然代表真正的经度:
GeoGridPosition 将在所选的投影中给出确切的坐标:
你可以在同样的地图中强制使用投影,获取同样的结果:
在其他地图中,默认投影会不一样:
对于中等规模的地图,默认投影为 "LambertAzimuthal". 按照经纬度角度,坐标值没有直接的意义.
美国地图. 注意北边界(近似纬线 49)是如何弯曲的:
在该投影中,纬线或经线都不是直线:
比较美国的 Mercator 地图,显示同样的经纬线:

地理投影简介

在 Wolfram 语言中有很多函数和参数控制制图投影和投影坐标. 该章节将给出简要的介绍. 请参见文档 GeoProjectionGeoProjectionData 获取详细的信息.
制图投影函数是把地球表面上的点投影到平面地图表面上的点,该过程总是包括某种程度上的畸变. 这种函数有很多选择,实际的选择取决于结果的实用性和美观效果,诸如在某种程度上的最小化失真. 这将导致投影的多种可能分类.
许多投影是用几何方法,例如把球面上的点映射到切平面(方位投影)、切柱面(圆柱投影)、或切线锥面(圆锥投影)进行定义. 对于相应的正割情况,可以很容易产生公式. 在基本情况中,圆柱和圆锥的轴是与球的极轴对齐的.
制图投影在所有规模中都是相关的,当使用世界地图时,它们的不同之处会更明显. 该节将只使用世界地图的例子.
可用的圆柱投影:
在圆柱投影中,经纬线是直的正交线:
可用的圆锥投影:
在圆锥投影中,经线是直线,纬线是圆弧:
可用的方位投影:
方位投影例子,默认情况下,以各种点为中心:
这些基本类型的投影有多种变体. 例如,如果纬线是水平的直线,但是经线可以是任意曲线,其结果是伪圆柱投影. 没有特殊类型的投影通常被归类为其他.
可用的伪圆柱投影:
其他投影的范例:
其他分类投影的重要方法是使用它们保留的几何属性,主要是角度(正形投影),距离(等距投影),或面积(等面积等积博格斯投影) . 没有投影可以同时保留一切.
墨卡托投影是唯一的圆柱和正形投影:
阿伯斯投影是圆锥和等面积投影:
立体投影是方位和正形投影,并通过透视映射构建的:
地理投影带有参数. GeoProjectionData[projname] 给出投影参数的默认值.
选择投影的中心点:
选择圆锥投影中的正割纬线:
改变默认地图尺度,使用公里(对于墨卡托投影,真距离只在赤道上):

填充

带有明确数值的经纬度范围的 GeoRange 选项返回确切的所需区域地图. 如果不是圆柱投影,地图的边界会是曲线,对应于指定的纬线和经线.
GeoRangePadding
GeoGraphics 的选项,指定地理范围填充
地理范围填充规范.
这是美国大陆纬度和经度的限制:
使用 GeoRangePaddingNone 完成长方形地图:
由地理图形 EntityEntityClass 对象指定的地图构建,首先是用 GeoBounds 计算对象的经纬度边界,然后添加小的填充,最后高效使用 GeoRangePadding->Full 完成长方形绘制范围.
澳大利亚地图:
这是由 GeoGraphics 选择的地理范围:
澳大利亚的经纬度限制实际上更小:
获取上面的限制,需要延伸 5%:
最后,获取原始地图,用 Full 组合填充规范:
GeoRangePadding 选项很灵活. 它允许你对地图的四条边指定独立的填充,并允许使用不同的方法指定实际的填充:整个地图的距离、角度或缩放比例. 点击其名字的链接探索所有的可能性.

GeoZoomLevel 和 ImageSize

另外一种提供地理范围的方法是通过选择点(例如,使用 GeoCenter 或给出 GeoGraphics 的第一个参数中的点似对象)和缩放级别. GeoGraphics 会选择地理范围半径,这样,地理背景图像用 256×256 像素的小数字图块(一般是 10 左右)进行构建. 通过增加地图的 ImageSize 选项可能获取更大的地理范围.
GeoZoomLevel
GeoGraphics 选项,指定缩放级别
ImageSize
指定最终地图上的像素大小的选项
缩放和图像大小规范.
缩放级别为 5 的巴黎周围地图:
这是选择的相关地理范围:
你可以获取同样区域的更大图像(缩放也相应增加):
地理基元

点和标记

最简单的基元是 Point. 它表示地图上的点,带有 Graphics 中的标准灵活性,控制大小、颜色、透明度等.
GeoMarker[loc,icon]
使用给定的图标在位置 loc 的标记基元
Point[loc]
在位置 loc 的点基元
零维地理基元.
获取超级火山的列表:
这是它们的分别位置:
在每个位置上画点:
用不同的颜色画更大的点. 注意,你也可以使用 Point,无需把它映射到位置列表:
Point 内使用 GeoPosition 会保证点正确的放置在任何投影的地图上:
你也可以直接使用实体列表. GeoGraphics 内部会使用 EntityValue 获取它们的位置:
甚至可以使用 EntityClass 对象本身,因为它代表其成员列表:
GeoMarker 基元添加了在给定位置放置任何对象的灵活性.
这是默认的地理标记:
获取火山的图像:
在每个位置使用. 你可以使用图像本身,而不是图标 Entity 对象:

路径

GeoPath 基元表示在投影到平面地图之前的地球表面上的任何线段. 也就是说,GeoPath 对象是一个在地球曲面上具有几何意义的轨迹. 目前,支持三种这样的线段类型:"Geodesic"(两个给定点间的最短路径)、 "Loxodrome"(穿越所有具有同样方位或角度的经线的曲线)和 "GreatCircle"(通过其中心平面切割地球获得的曲线). 经线总是斜航线和大图圈. 纬线总是斜航线,但不必是大图圈. 赤道是唯一的又是大图圈的纬线.
GeoPath[locs,pathtype]
pathtype 类型路径连接给定位置的基元
一维地理基元.
GeoPath 对象的默认类型是 "Geodesic". 这是大地线:
Lambert azimuthal 投影代表几乎直线的大地线. 对同样的地图比较 equirectangular 和 Mercator 投影:
这是从布宜诺斯-艾利斯到里斯本的斜航线或恒向线:
它跨越所有具有这个角度的经线,是在地球表面测量的,不是在地图上测量的:
在两个给定点间,比较 GeoPath 的三个类型:
大地线和大图圈几乎是一样的,但不完全,这是因为地球是椭圆的. 在冰岛附近放大:
上面的红曲线比绿曲线更短,这看起来有点怪. orthographic 投影解释了为什么不同:
你已经看到了点对间的地理路径的范例. GeoPath[{p1,p2,,pn},type] 给出了由连续点 pi 间给定类型的线段形成的连续线,但是,完整的线一般不是那种类型.
在多个城市间画最短的路线. 整个线段不是初始点和终点间的大地线:
用同样类型的其他线段连接终点到初始点:
地理路径的命名类型,包括:{"Parallel",lat}{"Meridian",lon} 以及特殊情形,例如,"Equator""PrimeMeridian""DateLineMeridian".
绘制多条纬线:
绘制部分纬线,从西到东或从东到西. 使用 Arrow 在地理路径中添加箭头:
重要的已命名的地理线:
绘制国际日期线:

圆和圆盘

中心为 p 且半径为 r 的地理圆是一个围绕 p 的闭合线,所有点距离 p 的地理距离为 r. 由于地球的曲率,地理圆的总长会小于 2π r,事实上,如果 r 继续增长,地理圆会开始减小尺寸,聚焦于 p 的对跖点.
GeoDisk[loc,r]
中心为 loc,半径为 r 的测地线圆盘
GeoCircle[loc,r]
中心为 loc,半径为 r 的测地线圆
类圆盘似地理基元.
芝加哥周围半径为 500 公里的地理圆:
同样地方 5000 公里的地理圆. 看上去不是 equirectangular 投影的圆形:
如果地理圆穿过极点,则如下所示:
如果更大,就会开始聚焦于对跖点:
以 1000 公里为步长,画出全部:
由于地球是椭圆的,序列中的最后一个地理圆如下:
地理圆盘是地理圆的二维内部. 地理圆(像任何闭合曲线一样)把地球表面分成两个有限的部分. 内部是包含中心点的部分,面积上不必要比外部更小.
芝加哥附近半径为 500 公里的地理圆盘:
同样地点周围 5000 公里的地理圆盘:
如果地理圆盘穿过极点,则如下所示:
如果变得更大,它会覆盖地球的大部分,除了对跖点周围的小区域:

半球

半球正好覆盖地球表面的一半,被穿过地球中心的平面所分隔. 因此半球的边界是一一个大圆(实际上是大椭圆,因为我们使用了地球的椭圆体模型). Wolfram 语言为半球提供两种类型的地理基元:一方面是曲面 p 点周围的半球 GeoHemisphere[p],另一方面是尤其重要的半球 DayHemisphere[date]NightHemisphere[date],由给定日期太阳的位置决定. GeoHemisphere[p] 的边界是线 GeoHemisphereBoundary[p]. 昼夜半球的边界是 DayNightTerminator[date].
GeoHemisphere[loc]
中心在 loc 的半球
DayHemisphere[date]
给定日期的昼半球
NightHemisphere[date]
给定日期的夜半球
GeoHemisphereBoundary[loc]
中心在 loc 的半球边界
DayNightTerminator[date]
date 的昼夜半球间的明暗界线
半球相关的地理基元.
东京周围的半球:
叠加其边界线:
使用中心在东京的方位投影:
北半球:
昼夜半球只是 GeoHemisphere 对于太阳在地球表面位置或其对跖点的投影的应用. 为了避免模糊性,日期必须用明确的 TimeZone 规范指明.
北半球冬至时地球的白天和晚上部分:
春分时地球的白天和晚上部分:

某个高度的可见区域

地理半球可以被考虑为沿着某个方向可见的很远(实际是无限距离)的地球部分. 该节将介绍当视点在椭圆地球的表面的有限高度时的概念. 所获得的区域总是小于半球. 但是,几何结构非常相似:可见性区域由正割平面决定,但是不穿过地球的中心.
GeoVisibleRegion[loc]
隆起位置 loc 处的可见区域
GeoVisibleRegionBoundary[loc]
隆起位置 loc 处可见区域的边界
可见性区域.
从国际空间站目前可见的区域:
在点 {0,0} 的同步轨道上的可见区域的边界:

线、多边形以及其他标准图形基元

标准的非地理图形基元,像 LinePolygonCircle 等可被用于 GeoGraphics, 但是,是在平面地图而不是地球的表面,它们被诠释为基元. 它们具有在 Graphics 中一样的标准属性,任何两个连贯点间的 LinePolygon 的线段都是直线.
获取4个地理位置:
在每个投影中,Line 基元连接4点总是为直边,但是,用 GeoPath 连接一般是弯曲的边:
另外,测地线的点是唯一定义的,Line 点则不是. 对于某些投影,黑线通过巴西,其他的则不是:
在所有情况下,一条测地线线段通过莫桑比克和马达加斯加,但是对应的 Line 线段对于不同的投影会穿过非洲的不同国家:
可以在标准的非地理基元中直接使用投影坐标,但是需要考虑使用何种投影. 这对于在地图上添加其他图形元素有用,但并不与地球表面存在的元素直接相关.事实上,你甚至可以使用与地球表面上任何点都不相关的坐标. 当使用这些时,高度建议在输入中明确定义投影,以避免 GeoGraphics 在添加更多基元时选择不同的投影.
"Bonne" 投影中给地图添加箭头和文本. 注意,GeoPosition 规范是如何与某些 Line 基元中的投影坐标相混合的:
使用不同的投影会自动修改用 GeoGraphics 指定的位置,但不是由投影坐标给出的位置:
PlotRangeGeoRange 完全是独立的选项. 一般,是指定 GeoRange,允许 GeoGraphics 选择选择合适的 PlotRange,但是你总是可以选择两者. GridLinesGeoGridLines 也是独立的:

高级用法:GeoGraphics 结果的结构

GeoGraphics 输入表达式的输出也具有标头 GeoGraphics,但是其第一个自变量现在是 Graphics 对象,实际显示为地图的图形对象. 该输出 GeoGraphics 总是包含带有绝对值的选项序列,在输入中给定的选项以及由 GeoGraphics 决定的选项.
分析输出中 GeoGraphics 的结构:
输出仍然具有标头 GeoGraphics
第一个自变量是 Graphics 对象,然后是选项序列:
特别值得注意的是,关于投影和参数的信息:
选择的放大级别:
或者选择的地理范围和中心:
你也能看见为地球选择的椭圆模型,默认的是 "ITRF00"
包含在 Graphics 对象自身中的一个重要选项是 PlotRange
要想提取结果中的图像(此处为背景图像和一些路牌),请使用以下指令:

高级用法:地理基元的地理计算

"Equirectangular" 投影中,地理基元被转换为标准的基元,因此可以很容易用 Graphics 显示.
使用 GeoCircle 上的 Geographics`GeoEvaluate,把它转换为包含 {lon,lat} 对的列表的 Line 对象:
GeoGraphics`GeoEvaluate 的第二个自变量指定使用的球体的模型,要么是米数,要么是 Quantity 距离,表示一个球体的半径,或者是旋转椭圆的半轴 {a,b} 对,也以米数或 Quantity 长度给出. 现在的结果是不一样的.
同样的地理圆,但是在半径为 2000 公里的球体上. 结果是不一样的:
GeoGraphics`GeoEvaluate 的第三个自变量以米指定需要的分辨率距离. 当数字越小,地理基元会用更多的点求解,以保证邻域比那个距离更近.
使用只有 100 米的分辨率. 同样的地理圆用更多的点求解:
地理样式

地图样式

GeoGraphics 继承 Graphics 的大量指令,可制作风格化的地图,包括颜色、透明度、纹理等. 它还可以添加地图特征的新元素,自动响应所使用的投影. 其中最重要的新元素是 GeoStyling[mapstyle,directive],它指定如何样式化地图的任意区域;这可能是用在特定的地理背景中.
GeoGraphics 提供多个预定义的地图样式,例如 "StreetMap""ReliefMap""ContourMap",并且只允许你在多边形上放置任意图像.
GeoStyling[mapstyle]
使用 mapstyle 样式化二维地理基元的内部
GeoBackground
GeoGraphics 的选项,指定背景地图样式
地图样式.
默认样式地图为 "StreetMap"
显示同样的区域,但是没有标签:
显示高程的地势地图:
或对应的等高线地图. 使用选项控制结果:
显示卫星图像:
显示有国家边界的轮廓图:
GeoStylingTexture 一样有效工作,指定把什么放在下面的二维基元中,像地理圆盘或多边形. 在这个意义上,GeoBackground 选项被认为是指定在整个地图上放置什么的特殊情况.
带有默认样式的地图上的秘鲁地势图:
GeoStyling 可用于显示限制在给定区域边界的地图:
两种灵活的地图样式:{"Image",image}{"GeoImage",image} 允许你在地图上放置任意图像和图形. 不同之处是,第一种情况,图像会无变化的(或许只是改变宽高比)放置在给定区域,后一种情况,图像会沿着地图区域投影. 因此 "GeoImage" 自适应地放置地图片于其他地图上.
获取高斯的地图:
把它放置在默认的 "Mercator" 投影的德国地图上:
使用 "Image" 地图样式,在任何投影中图像会保留其定向:
获取巴西的古老地图并剪裁其边界:
使用 "GeoImage" 地图样式,会恰当地投影在任何地图上:

不透明度和颜色

Graphics 二维基元默认情况下是模糊的,因为一般情况下,背景是空的,因此可以被覆盖. 然而,GeoGraphics 一般包含地图图像作为地理背景,它不应该完全被基元覆盖. 因此,二维基元的默认不透明度很小:0.2. 这对于 GeoGraphics 中如何处理不透明度有些轻微的扭曲,二维基元的不透明度需要区别于其他基元(点和线)的不透明度,它们在默认情况下仍然是模糊的. 这可以通过再次使用 GeoStyling 来完成.
带有厚蓝色边界的渥太华周边的地理圆盘. 地理圆是模糊的,但是圆盘不是:
标准的不透明度规范会影响所有基元,二维基元除外:
使用 GeoStyling[opacity] 改变圆盘的不透明度,它不会影响厚的地理圆:
一般颜色会影响所有基元:
但是放置在 GeoStyling 内的颜色优先于二维基元,甚至是这之后给出的颜色:
GeoStyling[Automatic] 撤销任何先前 GeoStyling 规范行为并恢复为默认:

地理网格线和比例尺

绘制经纬线对于理解地图上的元素总是有用的,甚至是当使用非圆柱形投影. 选项 GeoGridLines 以及其样式部分 GeoGridLinesStyle 为绘制所谓的格子线提供灵活的界面.
GeoScaleBar
GeoGraphics 选项,开启用户的比例尺
GeoGridLines
GeoGraphics 选项,开启格子线的使用
GeoGridLinesStyle
GeoGraphics 选项,指定地理网格线的样式
其他地图样式选项.
"Equirectangular" 投影中,经纬线是直线(像所有圆柱投影一样)且是等间距的. 让系统选择线:
这里使用的经纬线,是多个完美的整数角度:
在任何投影中分别指定使用的大概线数:
Quantity 角度指定格子线细分尺寸:
可以使用 GeoScaleBar 选项读取地图中的比例. 对于大型地图,点到点的距离比例因子可能不一样,因此,比例尺只表示平均值.
在法国地图上使用带有公制单位的比例尺:
其他天体
所有上面的天体都是以地球为代表的,但是也可以应用于存在卫星图像的其他天体,例如,火星、冥王星或月球. GeoGraphics 使用由 GeoModel 选项值确定的适当的背景瓦片.
GeoModel
GeoGraphics 的选项指定基面或天球仪
地理模型规范.
摩尔魏特投影中月球的地图:
月球上的一个浅谷:
哥白尼环形山:
彭纳投影中的火星地图:
显示一个空间探测器的着陆位置:
火星上其他有趣的区域:
使用正交投影的冥王星视图: