我是独立的IOS开发人员,试图通过轮流导航构建内置的应用程序。
现在我正在使用google maps和google direction服务的路线

问题:由于GPS精度限制,用户位置大部分时间都不在路上。我尝试实现“快速上路:地图匹配”,但没有成功。我没有弄清楚算法

我应该从哪里开始,应该使用mapkit而不是Google地图? openstreetmap?

你能给我链接到道路算法的链接吗

最佳答案

苹果有MKDirectionRequest,通过它您可以获取路线折线。要获得折线,您可以传递源,目标。但我发现您使用的是GPS设备,因此可能会有很多航路点,并且用户可能会导航通过任何可能的路径。因此您可以获取每个点的方向,并在地图上绘制每个经纬度组合的路线。但是它的速度稍慢,而且苹果也不允许您拨打多个电话(我注意到> 50 /秒可能会失败)。我仍在研究苹果是否具有与Google类似的Roads API。

苹果和谷歌的导航请求都不会给出用户期望的经纬度100%的结果。

根据我的研究,我发现Snap to road API提供了更接近GPS路径的路径。但是有些路线会偏离道路。我希望Google将来可以提高准确性。我也希望市场能够在将来的版本中提供对Road API的支持。

https://developers.google.com/maps/documentation/roads/snap

使用道路检查器,您可以检查纬度/经度,确定对道路的捕捉是否正确对道路的捕捉:
https://developers.google.com/maps/documentation/roads/inspector

检查上面的URL。

它具有一个javascript示例请求和解析代码。

请求示例:
https://roads.googleapis.com/v1/snapToRoads?path=-35.27801,149.12958|-35.28032,149.12907|-35.28099,149.12929|-35.28144,149.12984|-35.28194,149.13003|-35.28282,149.12956|-35.28302,149.12881|-35.28473,149.12836&interpolate=true&key=YOUR_API_KEY

Response:
{
  "snappedPoints": [
    {
      "location": {
        "latitude": -35.2784167,
        "longitude": 149.1294692
      },
      "originalIndex": 0,
      "placeId": "ChIJoR7CemhNFmsRQB9QbW7qABM"
    },
    {
      "location": {
        "latitude": -35.280321693840129,
        "longitude": 149.12908274880189
      },
      "originalIndex": 1,
      "placeId": "ChIJiy6YT2hNFmsRkHZAbW7qABM"
    },
    {
      "location": {
        "latitude": -35.2803415,
        "longitude": 149.1290788
      },
      "placeId": "ChIJiy6YT2hNFmsRkHZAbW7qABM"
    },
    {
      "location": {
        "latitude": -35.2803415,
        "longitude": 149.1290788
      },
      "placeId": "ChIJI2FUTGhNFmsRcHpAbW7qABM"
    },
    {
      "location": {
        "latitude": -35.280451499999991,
        "longitude": 149.1290784
      },
      "placeId": "ChIJI2FUTGhNFmsRcHpAbW7qABM"
    },
    {
      "location": {
        "latitude": -35.2805167,
        "longitude": 149.1290879
      },
      "placeId": "ChIJI2FUTGhNFmsRcHpAbW7qABM"
    },
    {
      "location": {
        "latitude": -35.2805901,
        "longitude": 149.1291104
      },
      "placeId": "ChIJI2FUTGhNFmsRcHpAbW7qABM"
    },
    {
      "location": {
        "latitude": -35.2805901,
        "longitude": 149.1291104
      },
      "placeId": "ChIJW9R7smlNFmsRMH1AbW7qABM"
    },
    {
      "location": {
        "latitude": -35.280734599999995,
        "longitude": 149.1291517
      },
      "placeId": "ChIJW9R7smlNFmsRMH1AbW7qABM"
    },
    {
      "location": {
        "latitude": -35.2807852,
        "longitude": 149.1291716
      },
      "placeId": "ChIJW9R7smlNFmsRMH1AbW7qABM"
    },
    {
      "location": {
        "latitude": -35.2808499,
        "longitude": 149.1292099
      },
      "placeId": "ChIJW9R7smlNFmsRMH1AbW7qABM"
    },
    {
      "location": {
        "latitude": -35.280923099999995,
        "longitude": 149.129278
      },
      "placeId": "ChIJW9R7smlNFmsRMH1AbW7qABM"
    },
    {
      "location": {
        "latitude": -35.280960897210818,
        "longitude": 149.1293250692261
      },
      "originalIndex": 2,
      "placeId": "ChIJW9R7smlNFmsRMH1AbW7qABM"
    },
    ... results truncated ...
    {
      "location": {
        "latitude": -35.284728724835304,
        "longitude": 149.12835061713685
      },
      "originalIndex": 7,
      "placeId": "ChIJW5JAZmpNFmsRegG0-Jc80sM"
    }
  ]
}

09-18 06:42