我是独立的IOS开发人员,试图通过轮流导航来构建应用程序。 现在我正在使用谷歌地图,并为路线提供谷歌方向服务
问题: 由于GPS精度的限制,用户位置大部分时间都在路上。我试图实现'snap to road:map matching'没有成功。我没弄算出算法
我应该从哪里开始,我应该使用mapkit而不是谷歌地图吗? OpenStreetMap的?
你能不能给我链接到snap to road算法
答案 0 :(得分:2)
Apple有MKDirectionRequest,您可以通过它获取路线折线。要获得折线,您可以传递源,目的地。但我发现你使用的是GPS设备,因此可能有很多路点,用户可以浏览任何可能的路径。这样你就可以获得每个点的方向,并在地图上绘制每个纬度/经度组合的路线。但它的性能稍慢,苹果也不会允许你拨打多个电话(我注意到> 50 /秒可能会失败)。我还在研究苹果是否能像谷歌那样与道路相似。
苹果和Google的方向请求都不会给出100%的结果用户对GPS lat / long的期望。
从我的研究中我发现Snap to road API提供了更接近GPS路径的路径。但是有些路线不在路上。我希望谷歌未来可以提高准确性。此外,我希望市场将在未来版本中提供快速通道API。https://developers.google.com/maps/documentation/roads/snap
使用道路检查员,您可以检查纬度/长度路径,是否正确捕捉到道路: https://developers.google.com/maps/documentation/roads/inspector
检查上述网址。
它有一个javascript示例请求和解析代码。
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"
}
]
}
答案 1 :(得分:1)
首先计算GPS的不准确程度。定位错误是什么? 在尽可能多的测试中计算最大误差。然后评估最大误差范围内最近的道路。
注意: - 这种猜测可能会出现一些低概率。