1

ロケーション ポイントを記録し、MKPolyline を使用して MapView にパスを描画するアプリに取り組んでいます。これには、緯度と経度を含むロケーション ポイントの C 構造体配列が必要です。現在、パスごとに CLLocation オブジェクトを CoreData に保存していますが、それらを表示するには、CLLocations を列挙し、それらの CLLocation ポイントを含む C 構造体配列を作成する必要があります。列挙するポイントが多いと時間がかかるため、これは問題です。

ディスクに多数のロケーションポイントを保存し、それらを非常に高速にロードして MKPolyline に追加できるソリューションを探しています。よろしくお願いします。

編集:私の場所の配列はCLLocationCoordinate2D配列です。

4

2 に答える 2

1

NSValue は を使用して使用できると思いましたvalue:withObjCType:。しかし、ドキュメントによると、可変長型は使用できません。

指定するタイプは、一定の長さでなければなりません。C 文字列、可変長の配列と構造体、その他の長さが不確定なデータ型を NSValue に格納することはできません。これらの型には NSString または NSData オブジェクトを使用する必要があります。

これを仮定すると:

//Sample data    
typedef struct {
    CGFloat lat;
    CGFloat longi;
}Location;

Location list[2];
Location get[2];

Location l1;
l1.lat = 10.0;
l1.longi = 4.0;

Location l2;
l2.lat = 3.0;
l2.longi = 4.0f;

list[0] = l1;
list[1] = l2;

NSData要件に対して次の方法を使用できます。

//This is the part you want
//create NSData
NSData *data = [NSData dataWithBytes:list length:sizeof(list)];

//get c array from NSData
[data getBytes:&get length:sizeof(list)];

//accessing 
methodUsingCarray(getList);
NSLog(@"%f",get[0].lat); // only if you need to access individual points

それが役に立てば幸い。

于 2013-07-23T19:50:14.690 に答える
1

Berkeley DBまたは別のキー値データ ストア ライブラリの使用を検討しましたか? それらは非常に高速で、非常に軽量である傾向があり、iOS で動作するようになったものもあるようです。BerkeleyDB は現在 Oracle によって所有されており、オープン ソース アプリでは無料です。

もう 1 つの人気のあるキーバリュー ストアは、GPL 化されたKyoto Cabinet です。

Google にはLevelDBと呼ばれる MIT ライセンスのキー値ストアがあり、 objective-C ラッパーさえあるようです。

于 2013-07-23T20:23:09.657 に答える