如何绘制不在道路上的路线,MKMapView
How to draw routes that aren't on roads, MKMapView
所以我一直在尝试使用 MKMapView 和叠加层来创建 "roads that aren't on roads"。这听起来可能很奇怪,但我想做的是在我的 iOS 应用程序中,我想绘制特定酒店提供的游览路线,但是到目前为止我发现的所有帖子都集中在现有道路上,因为远足要穿过森林,越过河流等。没有道路可以帮助我。
因为没有路我不得不即兴创作所以我决定为每次旅行制作一个 plist(我可能也可以采用另一种类型的文件,我只是喜欢使用 plist 的方式)并在其中制作一个数组所有的坐标并用 google 地球获得这些坐标,但是在 60 个不同的坐标之后我停止了,因为它太荒谬了。
然后我尝试编写一个脚本,当我在 运行 时间点击地图时,将坐标写入 plist。虽然这有效,但仍然非常不舒服,因为我无法将自动创建的文件保存在 Xcode 项目中,并且因为它总体上没有我希望的那样好。
所以我的问题是,关于如何创建不在街道上的路线,我是否可能错过了一些更简单的事情。
尝试使用站点创建 gpx 文件。
另请注意,Xcode 仅使用标签,因此如果您找到生成基于 <rte>
或 <trk>
的 gpx 文件的工具,Xcode 将无法生成正确模拟您的位置。因此,在链接网站创建的文件中,您需要将 <trkpt>
更改为 <wpt>
。下面的代码可能有助于获取折线。
func addRoute() {
let thePath = NSBundle.mainBundle().pathForResource("Route", ofType: "gpx") // Not sure on this part
let pointsArray = NSArray(contentsOfFile: thePath!)
let pointsCount = pointsArray!.count
var pointsToUse: [CLLocationCoordinate2D] = []
for i in 0...pointsCount-1 {
let p = CGPointFromString(pointsArray![i] as! String)
pointsToUse += [CLLocationCoordinate2DMake(CLLocationDegrees(p.x), CLLocationDegrees(p.y))]
}
let myPolyline = MKPolyline(coordinates: &pointsToUse, count: pointsCount)
mapView.addOverlay(myPolyline)
}
所以我一直在尝试使用 MKMapView 和叠加层来创建 "roads that aren't on roads"。这听起来可能很奇怪,但我想做的是在我的 iOS 应用程序中,我想绘制特定酒店提供的游览路线,但是到目前为止我发现的所有帖子都集中在现有道路上,因为远足要穿过森林,越过河流等。没有道路可以帮助我。
因为没有路我不得不即兴创作所以我决定为每次旅行制作一个 plist(我可能也可以采用另一种类型的文件,我只是喜欢使用 plist 的方式)并在其中制作一个数组所有的坐标并用 google 地球获得这些坐标,但是在 60 个不同的坐标之后我停止了,因为它太荒谬了。
然后我尝试编写一个脚本,当我在 运行 时间点击地图时,将坐标写入 plist。虽然这有效,但仍然非常不舒服,因为我无法将自动创建的文件保存在 Xcode 项目中,并且因为它总体上没有我希望的那样好。
所以我的问题是,关于如何创建不在街道上的路线,我是否可能错过了一些更简单的事情。
尝试使用站点创建 gpx 文件。
另请注意,Xcode 仅使用标签,因此如果您找到生成基于 <rte>
或 <trk>
的 gpx 文件的工具,Xcode 将无法生成正确模拟您的位置。因此,在链接网站创建的文件中,您需要将 <trkpt>
更改为 <wpt>
。下面的代码可能有助于获取折线。
func addRoute() {
let thePath = NSBundle.mainBundle().pathForResource("Route", ofType: "gpx") // Not sure on this part
let pointsArray = NSArray(contentsOfFile: thePath!)
let pointsCount = pointsArray!.count
var pointsToUse: [CLLocationCoordinate2D] = []
for i in 0...pointsCount-1 {
let p = CGPointFromString(pointsArray![i] as! String)
pointsToUse += [CLLocationCoordinate2DMake(CLLocationDegrees(p.x), CLLocationDegrees(p.y))]
}
let myPolyline = MKPolyline(coordinates: &pointsToUse, count: pointsCount)
mapView.addOverlay(myPolyline)
}