【ArcGIS Runtime SDK for Android-09】Spatial references

空间参考是几何图形的一个特征,它标识出其坐标与真实空间的关系。这对于确保不同图层、图形覆盖(graphic overlays)和要素集(feature sets)中的空间数据可以一起使用以进行准确的查看(viewing)或分析(analysis)非常重要。空间参考可以由一个已知的ID (WKID)引用——一个整数值。下面的文章中提到了一些常见的WKIDs。

1、Why spatial references are important

要将空间数据集成到地图中,或者在执行分析时,ArcGIS Runtime必须知道事物在地球表面的位置,并使用坐标来完成这项工作。坐标是相对于一个坐标系表示的,这个坐标系是围绕着地球表面模型的参考系。不是所有的坐标及其相关的坐标系都是相同的;它们可以使用不同的单位(度分秒、十进制度数或米),并且可以基于不同类型的模型。ArcGIS Runtime使用数学转换将坐标从一个坐标系重新投影到另一个坐标系。空间参考提供了重新投影所需的所有信息。

2、Coordinate systems and projections

坐标系统分为地理、投影和局部:

  • 地理坐标系统(GCSs)使用三维椭球面来定义位置。坐标是基于从地球中心到地表的角度。GCSs通常使用以度数指定的纬度和经度。来自GPS设备的坐标在名为WGS84的GCS中返回(WKID=4326)。
  • 投影坐标系(PCSs)可以用平面(二维)、笛卡尔坐标或“平面”来描述。与GCS不同,PCS在二维空间中具有恒定的长度、角度和面积。PCSs使用投影到平面上的地理坐标系统进行显示。有各种各样具有不同理想特征的投影。有些能保持地球特定区域的准确性,有些能更好地保持特征的形状,而有些则喜欢精确的面积或距离测量。坐标由网格上的x、y坐标标识。来自ArcGIS Online、谷歌和OpenStreetMap的大多数基本地图使用相同的投影坐标系,名为Web Mercator Auxiliary Sphere (WKID=3857)。
  • 局部坐标系通常与其他坐标系无关。原点和x,y坐标单位对应于一个局部参考点。由于一个局部坐标系与另一个坐标系之间的关系是不容易建立起来的,所以有时将其称为未知坐标系。

3、When you need to know about spatial references

当您使用具有不同空间参考的图层进行查看或分析时,ArcGIS Runtime将自动重新投影几何图形,或在可能和适当的情况下从服务中请求适当空间参考中的数据。然而,有时您需要了解如何使用空间参考。

(1)Add layers to the map

当您创建一个地图时,您添加的第一个图层的空间参考将用作整个地图所使用的空间参考;这通常是basemap。当ArcGIS Runtime渲染地图时,它使用相同的空间参考渲染所有数据,以便正确地排列数据。

在向地图中添加其他图层时,可能需要在地图使用的空间参考中从服务请求这些图层。您是否必须请求它取决于您正在添加的图层的类型。下面几节描述与设置地图空间参考相关的层类型。

(2)Graphics overlays

Graphics overlays(图形叠加)支持图形的动态重投影(on-the-fly reprojection)。动态重投影需要额外的处理,这可能会降低map view 的渲染时间。当您将图形添加到图形叠加时,最好是图形中的几何图形与地图具有相同的空间参考。您可以显式地将几何图形转换为所需的空间参考。

(3)Feature layers from feature services

当使用从ArcGIS Online或ArcGIS Enterprise的要素服务创建的要素服务表(feature service table)时,该服务支持重新投影(reprojection)。初始化后,表及其关联的要素图层( feature layer )将自动设置为与地图(map)相同的空间参考。这确保从服务中以正确的坐标请求数据,而不需要显式地定义要素表(feature table)的空间参考。ArcGIS Runtime确定正确的空间参考,并相应地从要素服务请求数据。

(4)Feature layers from geodatabase feature tables

geodatabase中的表不需要与添加它们的地图在相同的空间参考中,因为支持从这些表中动态地重新投影( on-the-fly reprojection)数据。然而,重新投影(reprojection)在绘图(drawing)性能上是有代价的,避免重新投影可以帮助最大化性能。要控制表的空间参考,请确保ArcMap地图框架(map frame)在运行create runtime content工具之前使用所需的空间参考。如果您正在使用服务工作流,请在用于生成地理数据库的参数中设置所需的空间参考。有关桌面和服务工作流的详细信息,请参见指南主题“创建离线地图”。

(5)Dynamic map service layers

如果这些是ArcGIS Online或ArcGIS Enterprise map服务,则服务器支持动态重投影。当您将ArcGIS动态地图服务层添加到地图中时,ArcGIS Runtime将自动为您请求具有正确空间参考的地图图像(基于地图的空间参考)。

(6)Tiled layers

切片图层是缓存图层(Tiled layers are cached layers)。在缓存时,使用空间参考,因此为切片图层预定义了空间参考。通常不可能在与使用该缓存的服务中定义的空间参考不同的空间参考中请求切片图层(unless the server supports doing this on the fly; most do not)。如果将ArcGIS切片图层添加到与切片图层具有不同空间参考的地图中,则无法绘制该地图。

(7)Raster layers

栅格图层支持实时数据转换(on-the-fly datum transformation)和重投影。有关在应用程序中使用栅格图层的更多信息,请参见添加栅格数据

(8)Edit data

在从坐标创建新要素(features)时,坐标值必须与该图层(layer)的空间参考匹配;否则,这些要素将不会显示在地图上的正确位置。

(9)Perform analysis

用于分析的几何对象(例如,确定空间关系,例如多边形相交的位置)要求在执行分析之前知道空间参考。否则,结果可能不准确。同样,如果两个几何图形有不同的空间参考,那么比较它们或确定它们的空间关系也毫无意义。要在地图图层(map layer)中显示几何图形,该几何图形必须具有与该图层相同的空间参考,或被投影到该图层的空间参考。要同时使用两个几何图形,它们应该具有相同的空间参考。

(10)Convert geometries from one spatial reference to another

当使用几何引擎(geometry engine)将几何图形从一个空间参考转换为另一个空间参考时,必须指定源(source)和目标(destination)空间参考。有关详细信息,请参见Geometries主题中的投影、拓扑和其他操作。默认情况下使用适当的数据转换(datum transformation)。您还可以指定要使用的转换。您还可以将包含纬度和经度格式的坐标的字符串直接转换为点,反之亦然。还支持其他类型的坐标,如通用横向墨卡托坐标(UTM)和美国国家网格坐标(USNG)。

4、Spatial reference specifications

要定义空间参考,可以使用已知ID (WKID)整数值或称为已知文本(WKT)的文本字符串定义。WKIDs由标准机构或组织定义,每个值代表一个特定的空间参考。ArcGIS支持各种WKIDs,特别是由欧洲石油调查小组(EPSG)或Esri定义的WKIDs,以及一些其他常用id。相反,WKT文本描述了空间参考的所有参数。要查看支持的WKIDs及其对地理坐标系统、投影坐标系统和转换的WKT定义的列表,请参见坐标系统和转换

线性、角度和面积单位也可以由WKID或WKT定义,并由许多空间参考和几何相关的API成员使用。这些WKIDs也包括在坐标系统和转换中。

5、Geographic transformations

地理转换是用于在具有不同基准的空间参考之间转换坐标的函数。当几何图形必须从一个空间参考投影到另一个空间参考时,当两个空间参考的基准存在差异时,将使用转换(transformations )。使用最合适的转换可以确保重新投影的最佳精度。不同的转换适用于不同的地理区域。

Esri的投影引擎(Projection Engine)用于地理转换,并支持许多预定义的地理转换。没有从每个空间参考到其他所有空间参考的定义转换——这样的集合将非常大。因此,每个地理转换通常由两个步骤组成,每个步骤定义一个基准转换和另一个基准转换的逆。每个地理转换步骤都可以由表示数据转换(datum transformation)的知名ID (WKID)构造。【each step defining a datum transformation and the inverse of another datum transformation. Each geographic transformation step can be constructed from a well-known ID (WKID) that represents a datum transformation. 】支持的WKIDs列表(在地理转换时为PDF格式)包括从每个支持的基准到名为“1984年世界大地测量系统”(WGS84)的基准的转换。具有多个步骤的地理转换通常通过WGS84进行,一个向前和一个反向的基准转换链接在一起来执行完整的地理转换。此外,直接在两个非wgs84数据之间进行数据转换的列表是有限的,比如WKID 4461,它的名称为NAD_1983_HARN_To_NAD_1983_NSRS2007_1。这些可用于创建一步地理转换。

数据转换(Datum transformations)可以由特定的方程(基于等式的转换)进行数学定义,也可以依赖于外部支持文件(基于网格的转换)。坐标转换的确切方式由美国国家大地测量局(US National Geodetic Survey)等机构定义,然后由WKID整数和WKT文本字符串定义标识,类似于空间参考的标识方式。

作为开发人员,您可以依赖ArcGIS Runtime为您选择默认的地理转换,从而实现精确的坐标重新投影。或者在某些情况下,您可以使用自己选择的地理转换。您可以在每次使用几何体引擎(GeometryEngine类)来投射几何体时指定一个地理转换,也可以通过JSON配置文件覆盖应用程序使用的默认地理转换。您甚至可以从转换目录(TransformationCatalog类)中为给定的空间参考对和可选的给定地理区域请求一个合适的转换列表,并从中选择一个。如果您有更特殊的需求,您可以使用WKT创建自定义转换。坐标系和变换。

(1)Grid-based transformations

数据转换(Datum transformations)可以从数学上定义(基于等式的转换),也可以依赖于外部支持文件(基于网格的转换)。当您在应用程序中使用基于网格的转换时,必须提供某些投影引擎数据文件( Projection Engine data files);尝试使用缺少投影引擎文件的转换将导致错误。API可以检测本地文件系统上是否有必要的文件。

提示:

这些投影引擎数据文件可以从developers.arcgis.com的下载页面下载(需要您登录)。

数据文件应该位于转换目录的投影引擎位置中指定的位置。此API没有设置默认位置。如果您设置了投影引擎的位置(调用setProjectionEngineLocation方法),那么在使用投影引擎的其他API调用之前,您必须在应用程序的早期进行设置。

下面的代码设置到包含本地文件系统上的投影引擎文件的目录的路径,并检查是否失败。如果路径不存在,则可能引发异常。

// Get the expected location of the projection engine files.
File peDataDirectory = new File(rootDirectory, "/ArcGIS/samples/PEData");

try {
  TransformationCatalog.setProjectionEngineDirectory(peDataDirectory.getAbsolutePath());
  showPEDirectorySuccessMessage();

} catch (ArcGISRuntimeException agsEx) {
  // If there was an error in setting the projection engine directory, the location may not exist, or if
  // permissions have not been correctly set, the location cannot be accessed.  Equation-based transformations can still be used, but grid-based transformations will not
  // be usable.
  showPEDirectoryFailureMessage(agsEx);
}

(2)Use default transformations

一个常见的用例是转换一个几何图形,创建一个使用与地图相同的空间参考的新几何图形(geometry)。几何引擎的project方法在内部使用默认情况下可用的最佳地理转换,而不需要指定。使用转换目录,您可以发现在任意两个空间参考之间进行投影时,默认情况下使用的是哪个地理转换。

如果两个空间参考(例如,具有相同基础地理坐标系统的两个投影坐标系统)不需要转换,getTransformation将返回一个空指针。

使用getTransformation方法查找在两个空间参考之间投影数据时默认使用的转换。

DatumTransformation defaultTransform = TransformationCatalog.getTransformation(inputSr, outputSr);

(3)Customize default transformations

在某些情况下,您可能希望指定自己的默认地理转换。当ArcGIS Runtime选择的默认值不适合您的需求,但是您不想在每次需要使用地理转换时编写代码来指定地理转换时,就会发生这种情况。要更改任何默认值,创建一个名为gtdefaults_overrides.json的JSON文件,并将其放置在转换目录方法projectionEngineLocation返回的位置。

提示:

在使用使用投影引擎的其他API调用之前,必须在应用程序的早期设置projectionEngineLocation。此API没有设置默认位置。

更改JSON文件对运行应用程序没有影响。要在应用程序中使用此文件,必须在运行应用程序之前更改它。

文件的内容如下:

{ "geogtran" : [
   [   3819,   3906,   3817,    0,   3962,    1 ],
   [   3819,   4075,   3817,    0,   4077,    1 ],
   [   3819,   4156,   3817,    0,  15965,    1 ],
   [   3819,   4178,   3817,    0,  15996,    1 ],
   [   3819,   4179,   3817,    0,  15995,    1 ],
   [ 104248, 104896, 108038,    0,      0,    0 ],
   [ 104257, 104896, 108019,    1,      0,    0 ]
]}

这个文件每个基准(datum)对包含一行(“from”和“to”)。只包含要覆盖的默认地理转换的行。这六列包含以下信息。

  • “from”基准的WKID。
  • “to”基准的WKID。
  • 第一个基准面转换的WKID。
  • 是按原样(0)使用第一个基准面转换,还是使用其逆(1)。
  • 第二个基准面转换的WKID(如果是单步地理转换,则为0)。
  • 是按原样(0)使用第二个基准面转换,还是使用其逆(1)(如果这是一个单步地理转换,则为0)。

在尝试使用此文件之前,ArcGIS Runtime将检查该文件中定义的地理转换是否可用。如果不是,则该基准对的地理转换使用前面的默认值。

(4)Choose a transformation from a list

从转换目录中,您可以检索两个空间参考之间可用的地理转换的列表。getTransformationsBySuitability方法返回一个按适用性降序排列的地理转换列表。这样,您就可以为您的应用程序用户提供一个工作流,在这个工作流中,他们可以从一系列合适的转换中进行选择。

下面的代码获取“from”和“to”SpatialReferences以检索转换列表,也可以在Envelope中传递。

// Get the input and output spatial references required.
SpatialReference toSr = mArcGISMap.getSpatialReference();
SpatialReference fromSr = mOriginalGeometry.getSpatialReference();

// Get the list of transformations applicable to the input and output spatial references. Check if list
// should account for the map's extent when ordering the list of transformations by suitability.
List<DatumTransformation> transformationsBySuitability;
if (mUseExtentForSuitability) {
  transformationsBySuitability = TransformationCatalog.getTransformationsBySuitability(fromSr, toSr,
      mMapView.getVisibleArea().getExtent());

} else {
  transformationsBySuitability = TransformationCatalog.getTransformationsBySuitability(fromSr, toSr);
}

// Update user interface with list of transformations to show to user
updateTransformsList(transformationsBySuitability);

getTransformationsBySuitability返回的列表可能包括基于网格的转换,其支持文件不在本地文件系统上。您可以使用地理转换步骤对象(geography transformationstep类)上的isMissingProjectionEngineFiles方法来识别这些情况。你的应用程序甚至可以告诉用户哪些文件丢失了,甚至可以自动从一个已知的位置下载丢失的文件。使用地理转换步骤对象的getProjectionEngineFilenames方法检索所需文件的列表。

提示:

请参见演示此工作流的示例应用程序根据适用性进行转换

  • Consider the work area extent

您的工作区域可能很小,并且位于整个空间参考的最佳地理转换不适合您的工作区域的位置。您可以通过为您的特定工作区域找到最佳的地理转换来提高准确性。使用转换目录的getTransformation和getTransformationsBySuitability方法的重载来传递要转换几何图形的范围,如前面的代码所示。

(5)Create a custom transformation

一些用户调整地理转换的组件以适应他们的特定需求。这些自定义转换使用现有的转换方法(Position Vector, Geocentric_Translation,等等),但是参数值与已知的定义不同。创建一个自定义的地理转换对象,方法是传入一个文本字符串,其中包含以WKT格式表示的自定义转换。由此产生的地理转换的WKID将为零。在使用需要投影引擎文件的自定义转换之前,请确保存在这些文件,并且设置了投影引擎位置。

参考链接:

https://developers.arcgis.com/android/latest/guide/spatial-references.htm

https://developers.arcgis.com/android/latest/guide/coordinate-systems-and-transformations.htm

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值