【问题标题】:Converting GPS coordinates to X, Y, Z coordinates将 GPS 坐标转换为 X、Y、Z 坐标
【发布时间】:2015-10-27 17:59:52
【问题描述】:

所以这是基本问题。我目前正在 Unity 3D 中用 C# 编写 GPS 系统(给我们分配任务的人让我们使用这个程序,所以我不能在其他任何事情上做)。

现在我遇到了一个小问题,基本上我们可以从安卓手机请求(我们认为是十进制的)坐标,但现在我们正试图将这些坐标转换为 X、Y、Z 坐标。最好是 X 和 Z,因为我们实际上并不需要高度。然而,到目前为止,我们在互联网上找到的所有内容都是为了转换为球形地图,因为我们只有一个基本的平面数字地图。

如果有人知道如何将我们拥有的坐标转换为基本的 X 和 Z 坐标(即我们的经度和纬度),那就太棒了。

为了快速说明,我不确定我们拥有的坐标是否是实际的十进制坐标,所以它们看起来像这样:

纬度:53.228888 经度:6.5403559

如果您在地图上查找这些坐标,则这些坐标最终应该位于“Wegalaan 3, Groningen, The Netherlands”。

已经谢谢了!

编辑:(这也在 cmets 中)

抱歉,如果可能造成混淆。老实说,我只了解这一切是如何运作的,无论如何要弄清楚一些事情。我目前正在 Unity 中使用我从我居住的城市(荷兰格罗宁根)的互联网上获得的简单 2D 地图,并且我试图基本上获取从我的 android 手机获得的 GPS 坐标,然后在该地图上显示它们有一个红点,但是要做到这一点,我需要能够将红点移动到地图上的正确坐标。我想要做的是将 GPS 坐标(经度和纬度)转换为 X 和 Z(Unity3D 平面坐标,也可能只是 X 和 Y),这样如果我将地图正确对齐,我就会得到一个小型 GPS 系统。城市。如果您对我为什么这样做感到好奇,那仅仅是因为我和我的一个朋友正在尝试使用我们的城市和这个 GPS 系统作为基础来构建一个游戏

编辑2:

说实话,我不知道笛卡尔坐标是如何工作的,但它们似乎是我正在寻找的东西:P 平面上的坐标和 X,Y 坐标我的意思是基本上只是坐标我可以在我正在使用的平面 2D 平面上使用 Unity3D。

EDIT3:

感谢您的回答,开始。这不是重复的,其次我和我的朋友已经找到了你发给我的 stackoverflow 主题,但它似乎对我们不起作用(也许我们做错了什么)。基本上,我们用该公式测试的不同地方之间的南北距离是有效的,但是它们之间的东西距离远大于应有的距离。我们认为这可能是因为该公式适用于球形地球,但也许我们做错了什么。如果有人可以进一步解释,那就太棒了!

编辑4:

我们确信这不是我们的地图有任何问题,因为我们已将它与多个位置对齐。我们得到了这些位置的坐标,然后使用这个网站:http://www.gpscoordinaten.nl/converteer-rd-coordinaten.php 将其转换为 XY 坐标,然后使用这些 XY 坐标检查我们的地图是否正确对齐。确实如此,所以我们确信我们使用的数学有问题,而不是我们的实际地图。

EDIT5:删除了很多很多语法错误。这里太热了,现在无法正常写作,所以如果其中任何一个没有意义,我非常抱歉。请告诉我,我会进行编辑以尝试解释我们正在尝试做的事情。

EDIT6:找到我自己的答案,如果你想看看我做了什么来解决我的问题,它在所有其他答案之间

【问题讨论】:

  • 我不太清楚你的意思,但纬度是水平线,经度是垂直线。由于地球的曲线,两条经线之间的距离随着纬度的升高而减小,所以如果你想把它想象成一个矩形网格,它实际上是行不通的。通常在地理软件中,您会将地理坐标系转换为投影坐标系以进行显示。
  • 您今天早些时候还没有发布过这个问题吗?但是:X,Y 坐标是什么意思?它应该是笛卡尔坐标吗?如果是这样,您需要哪个单元?影响这种转换的参数有很多。
  • @maniak1982 很抱歉,如果它可能会造成混淆。老实说,我只了解这一切是如何运作的,无论如何要弄清楚一些事情。我目前正在 Unity 中使用我从我居住的城市(荷兰格罗宁根)的互联网上获得的简单 2D 地图,我正在尝试基本上获取我从我的 android 手机获得的 GPS 坐标,并在该地图上显示它们红点,但是要做到这一点,我需要能够将红点移动到地图上的正确坐标。我想要做的是将 GPS 坐标(经度和纬度)转换为 X 和 Z,所以......(在我的下一条评论中继续)

标签: c# android unity3d gps


【解决方案1】:

现在我已经找到了我自己的问题的答案(实际上不久前已经找到了,但完全忘记在这里发布了)

基本上我自己做了一个小公式,将坐标乘以一个设定的数字(取决于它是否是 x 或 y 轴),即两个设定坐标点之间的差异。这两个点是我地图的外点。

基本上通过这样做,我可以获得非常准确的测量结果,我什至还没有与我的实际位置相差一米。

我知道这听起来有点含糊,我也不完全知道如何解释,但是对于这里感兴趣的人来说,我使用的代码是:

void RetrieveGPSData()
{
    currentGPSPosition = Input.location.lastData;
    System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
    dateTime = dateTime.AddSeconds(currentGPSPosition.timestamp);

    float z = latToZ (Input.location.lastData.latitude);
    float x = lonToX (Input.location.lastData.longitude);

    this.transform.position = new Vector3 (x, 0f, z);

    gpsString = ("Last Location: " + Input.location.lastData.latitude.ToString () + " " + Input.location.lastData.longitude.ToString () + " " + Input.location.lastData.altitude.ToString () + " " + Input.location.lastData.horizontalAccuracy.ToString () + " " + dateTime.ToShortDateString() +" "+ dateTime.ToShortTimeString());
}

float latToZ (double lat){

    lat = (lat - 53.178469) / 0.00001 * 0.12179047095976932582726898256213;
    double z = lat;

    return (float)z;
}

float lonToX (double lon){

    lon = (lon - 6.503091) / 0.000001 * 0.00728553580298947812081345114627;
    double x = lon;

    return (float)x;
}

现在有人想知道为什么我将 53.something 和 6.something 从 lon 和 lat 拿走,这是因为 Unity 中我的 0 X 和 0 Z 点的坐标对应于我的地图的左下角,这是我谈到的用于此计算的两点之一。

我希望这可以帮助其他可能遇到类似问题的人,如果您有任何问题,请随时向他们提问。

-拉克斯特

【讨论】:

  • 感谢您的回复,LAKster。 :) 我的 (0,0,0) 在我的 Unity 项目中位于地球球体的中心。北极在 (0, RADIUS_SPHERE, 0)。我应该保留那些 53. 和 6. 还是什么?
  • 嘿,对不起,我现在回复,而不是在您发布问题时。老实说,我不确定。从外观上看,您使用的是实际球体,而不是像我这样的平面地图。如果您只是使用平面地图,这就是这些数字的含义。 53. 和 6. 是我在 Unity 中位于 0 X 和 0 Z 点的地图上真实世界地点的 gps 坐标。希望这会有所帮助:D
  • @LAKster 我使用的是平面地图,我怎么知道要使用的数字是什么,而不是 53.something 和 6.something。由于我尝试了您在答案中编写的代码,但它给了我一个很大的 x 和 z
【解决方案2】:

地图是否有mercator 投影?是世界地图吗? 如果是这样,地图的顶部通常在纬度 85 左右,垂直中心为纬度 0。 经度 0 位于格林威治(通常为水平中心),180/-180 位于逆子午线/日期线,位于地图的左右边缘。

当纬度为-180时,x为0,当纬度为180时,x ==地图宽度。

This link should tell you what you need

【讨论】:

  • 墨卡托投影纬度 +/-90 不可打印,因为它们距离很远
  • 老实说。我上周开始研究这个,只学到了我今天所知道的一半。我确实偶然发现了墨卡托投影,但我不知道它们是如何工作的,也不知道它们究竟应该如何影响我正在做的事情。我或多或少知道它们只是地方的平面地图,据我所知,我使用的地图正是如此。我们也测试了地图以确保它可以与坐标一起使用。我只是无法确定数学以自己转换为 X 和 Y 坐标
  • @HimBrommBeere 你是对的。我会相应地更新答案。
  • 感谢您的链接。明天我会看看,因为目前我在家,只是不想工作 XD 感谢您的回答,我想我可能已经有了一个想法,但是我必须查看您在此处放置的链接看看我是否真的可以使用这个想法。
猜你喜欢
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
相关资源
最近更新 更多