2012-01-03 5 views
8

私のアプリケーションは、アプリケーションを使用するデバイス内でCLLocations(ルート)の配列を共有する必要があります。これ以前にGPXを使用した経験はありません。 GPXはそれを行うのに最適なフォーマットですか?このようなCLLocationsの配列からGPXファイルを作成するにはどうすればよいですか? Objective Cには標準GPXパーサーがありますか?私はネット上で検索し、SOこれらの質問に答えたものから はそれぞれCLLocationの配列からGPXファイルを作成する

1.cant say 
2. I have seen some webpages converting data of points in GPX format but could not find how they are doing it. 
3. No 

ある私は別の答え/ビューを取得する場合、私は幸せになります。私はこれらが多くの質問であることを理解しています。どんな助けや提案も非常に高く評価されます。あなたの特定の質問に答えるために

+0

を入力するUIAlertでそれを必要とするだけの場合には迅速4でありますアプリ内の場所あなたはGPXファイルをロードするためにクリックすることができるXcodeに位置の矢印があります。デフォルトの場所もいくつかありますが、あまりにもおそらくそれを見ることができます。 –

答えて

7
+0

ありがとうAlexander、Frameworkは確かに有望です。 – chatur

+0

回答の最初のリンクが古くなっているようです。 – Pang

+1

githubプロジェクトも長く放棄されていますが、フォークネットワークには目を引くための有望な分岐点がたくさんあります。特に:https://github.com/webventil/iOS-GPX-Frameworkとhttps://github.com/kimar/iOS-GPX-Framework –

3

  1. をはい、GPXは、位置データを共有するための非常に良いフォーマットです。それは何のためのものです。

  2. 私はこれを行うコードはありませんが、CLLocationsの配列を繰り返し処理し、XMLデータ構造を構築する必要があります。書き込みをサポートするxmlパーサーを1つ使用します。 (下のリンクを参照)。

  3. Objective Cには標準GPXパーサーはありませんが、GPXは単なるxmlなので、iOSやOSXで動作するxmlパーサーを使用できます。 Ray Wenderlichにはa very good tutorial on on using xml under iOSがあり、あなたのニーズに合ったパーサーを選択する方法を説明しています。これはGPX特有のものではありませんが、GPXはXMLの風味です。原則は同じです。

  4. 渡辺俊憲はちょうどあなたの新しい親友(および鉱山)となりました
+0

ありがとうございました。それは役に立ちました。あなたはGeoJSONを使ったことがありますか?どのようにGPXと比較してその性能ですか? – chatur

+2

パフォーマンスは全く別の質問です。あなたのファイルが大きすぎてパフォーマンスが問題でない限り、私はプレーンなGPXに固執します。GPXはTracks、Route、WaypointなどのGPSコンセプトをサポートしていますが、GeoJSONはGISのように多く、Point、Lineestrings、Polygonsなどを使用しています。どちらのフォーマットも使用できますが、あなたのアプリケーションに合ってください –

+0

入手しました。もう一度仲間に感謝します。 – chatur

3

GPXサンプル:

<gpx xmlns="http://www.topografix.com/GPX/1/1" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" 
    version="1.1" 
    creator="YourCompanyName"> 

    <wpt lat="Your latitude" lon="Your longitude"> 

     <time>Your Time</time> 

     <name>Your Location name.</name> 

    </wpt> 

</gpx> 

GPX(GPS Exchange形式)ファイルには、.GPX延長

あなただけCLLocationsの配列を反復処理し、タグ(WPX)を作成し、ファイルとして保存されなければならないすべてで終わります。 >リソース - - > GPXファイルGPX

私は、これは新しいファイルを追加、Xcodeの5で

+0

GPXファイルでランタイムユーザーの場所latを長く書く方法 – user1374

+0

これを行うサードパーティのライブラリがたくさんあり、stringbuildingの手段で独自に行うこともできます。 –

-1

に役立ちます願っています。

+0

OPは、Xcodeで手動でGPXファイルを作成する方法ではなく、CLLocationポイントのメモリ内リストからカスタムGPXファイルを作成する方法を尋ねていました。 – worthbak

0

ここで、それは誰もがフィードにシミュレータ自体によってより多くの、私はGPXファイルは、あなたのアプリによって読み取られ、信じていないファイル名

func handleCancel(alertView: UIAlertAction!) 
    { 
     print("Cancelled !!") 
    } 

    let alert = UIAlertController(title: "Export GPX", message: "Enter a name for the file", preferredStyle: .alert) 

    alert.addTextField { (textField) in 
     textField.text = "" 
    } 
    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler:handleCancel)) 
    alert.addAction(UIAlertAction(title: "Done", style: .default, handler:{ (UIAlertAction) in 
     if alert.textFields?[0].text != nil { 
      let fileName = "\(String(describing: alert.textFields![0].text!)).GPX" 
      let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) 
      var gpxText : String = String("<?xml version=\"1.0\" encoding=\"UTF-8\"?><gpx version=\"1.1\" creator=\"yourAppNameHere\" xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:gte=\"http://www.gpstrackeditor.com/xmlschemas/General/1\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">") 
      gpxText.append("<trk><trkseg>") 
      for locations in self.locationsArray{ 
       let newLine : String = String("<trkpt lat=\"\(String(format:"%.6f", locations.locLatitude))\" lon=\"\(String(format:"%.6f", locations.locLongitude))\"><ele>\(locations.locAltitude)</ele><time>\(String(describing: locations.locTimestamp!))</time></trkpt>") 
      gpxText.append(contentsOf: newLine) 
      } 
      gpxText.append("</trkseg></trk></gpx>") 
      do { 
       try gpxText.write(to: path!, atomically: true, encoding: String.Encoding.utf8) 

       let vc = UIActivityViewController(activityItems: [path!], applicationActivities: []) 

       self.present(vc, animated: true, completion: nil) 

      } catch { 

       print("Failed to create file") 
       print("\(error)") 
      } 

     } else { 
      print("There is no data to export") 

     } 


    })) 
    self.present(alert, animated: true, completion: { 
     print("completion block") 
    }) 
} 


func textFieldHandler(textField: UITextField!) 
{ 
     if (textField) != nil { 
    textField.text = "" 
    } 
} 
関連する問題