создание координат карты (lan, & long) в базе данных sqlite - PullRequest
1 голос
/ 12 апреля 2011

как создать приложение, которое записывает ряд значений долготы и широты в базу данных SQLite и отображает их в виде цветных дорожек на MapActivity.

Мне нужна помощь. Как можно сохранить координаты карты в базе данных sqlite и отобразить как детали поездки в таблице. Например, я совершил одно путешествие из Мумбаи в Пуну. Затем как можно сохранить данные в базе данных, которые могут быть доступны для дальнейшего использования. это должно дать все детали

Ответы [ 4 ]

1 голос
/ 12 апреля 2011

Если вы новичок в Sqlite, то посмотрите в этот класс базу данных. Создайте два файла базы данных в следующем виде:

---- >>>> Database.h

Напишите следующеекод в этом файле

#import <Foundation/Foundation.h>
#import <sqlite3.h>


@interface DataBase : NSObject {

    sqlite3 *database;

}

+(DataBase *) shareDataBase;

-(BOOL) createDataBase:(NSString *)DataBaseName;

-(NSString*) GetDatabasePath:(NSString *)database;

-(NSMutableArray *) getAllDataForQuery:(NSString *)sql  forDatabase:(NSString *)database;
-(void) inseryQuery:(NSString *) insertSql forDatabase:(NSString *)database1;
-(void) deleteQuery:(NSString *) deleteSql forDatabase:(NSString *)database1;
-(void) updateQuery:(NSString *) updateSql forDatabase:(NSString *)database1;

@end

---- >>>> Database.m

Введите следующий код в этом файле

#import "DataBase.h"


@implementation DataBase

static DataBase *SampleDataBase =nil;


+(DataBase*) shareDataBase{

    if(!SampleDataBase){
        SampleDataBase = [[DataBase alloc] init];
    }

    return SampleDataBase;

}


-(NSString *) GetDatabasePath:(NSString *)database1{


    [self createDataBase:database1];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:database1];
}


-(BOOL) createDataBase:(NSString *)DataBaseName{
    BOOL success; 

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:DataBaseName];

    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success) return success;
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:DataBaseName];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];

    if (!success) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!!!" message:@"Failed to create writable database" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
        [alert show];
        [alert release];

    }
    return success;
}



-(NSMutableArray *) getAllDataForQuery:(NSString *)sql  forDatabase:(NSString *)database1{

    sqlite3_stmt *statement = nil ;

    NSString *path = [self GetDatabasePath:database1];

    NSMutableArray *alldata;
    alldata = [[NSMutableArray alloc] init];

    if(sqlite3_open([path UTF8String],&database) == SQLITE_OK )
    {
        NSString *query = sql;

        if((sqlite3_prepare_v2(database,[query UTF8String],-1, &statement, NULL)) == SQLITE_OK)
        {
            while(sqlite3_step(statement) == SQLITE_ROW)
            {   

                NSMutableDictionary *currentRow = [[NSMutableDictionary alloc] init];

                int count = sqlite3_column_count(statement);

                for (int i=0; i < count; i++) {

                    char *name = (char*) sqlite3_column_name(statement, i);
                    char *data = (char*) sqlite3_column_text(statement, i);

                    NSString *columnData;
                    NSString *columnName = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];


                    if(data != nil)
                        columnData = [NSString stringWithCString:data encoding:NSUTF8StringEncoding];
                    else {
                        columnData = @"";
                    }

                    [currentRow setObject:columnData forKey:columnName];
                }

                [alldata addObject:currentRow];
            }
        }
        sqlite3_finalize(statement); 
    }
    sqlite3_close(database);

    return alldata;

}

-(void) inseryQuery:(NSString *) insertSql forDatabase:(NSString *)database1{

    sqlite3_stmt *statement = nil ;

    NSString *path = [self GetDatabasePath:database1];

    if(sqlite3_open([path UTF8String],&database) == SQLITE_OK )
    {
        if((sqlite3_prepare_v2(database,[insertSql UTF8String],-1, &statement, NULL)) == SQLITE_OK)
        {
            if(sqlite3_step(statement) == SQLITE_OK){
            }
        }
        sqlite3_finalize(statement); 
    }
    sqlite3_close(database);

}

-(void) updateQuery:(NSString *) updateSql forDatabase:(NSString *)database1{

    sqlite3_stmt *statement = nil ;

    NSString *path = [self GetDatabasePath:database1];

    if(sqlite3_open([path UTF8String],&database) == SQLITE_OK )
    {
        if((sqlite3_prepare_v2(database,[updateSql UTF8String],-1, &statement, NULL)) == SQLITE_OK)
        {
            if(sqlite3_step(statement) == SQLITE_OK){
            }
        }
        sqlite3_finalize(statement); 
    }
    sqlite3_close(database);

}

-(void) deleteQuery:(NSString *) deleteSql forDatabase:(NSString *)database1{

    sqlite3_stmt *statement = nil ;

    NSString *path = [self GetDatabasePath:database1];

    if(sqlite3_open([path UTF8String],&database) == SQLITE_OK )
    {
        if((sqlite3_prepare_v2(database,[deleteSql UTF8String],-1, &statement, NULL)) == SQLITE_OK)
        {
            if(sqlite3_step(statement) == SQLITE_OK){
            }
        }
        sqlite3_finalize(statement); 
    }
    sqlite3_close(database);

}



@end

Теперь, чтобы получить данныеиспользуйте следующий код

NSString *sql = @"select * from UserInfo"; <br>
userInfo = [[DataBase shareDataBase] getAllDataForQuery:sql forDatabase:@"Sample.db"];

Он вернет массив всех строк в форме NSDictionary.

Чтобы добавить новую запись, используйте следующий код

NSString *sql = [NSString stringWithFormat:@"insert into userInfo values ('city','name','phone')"];
[[DataBase shareDataBase] inseryQuery:sql forDatabase:@"Sample.db"];

Втаким же образом есть и способ обновить и удалить запись.

, так что это лучший пример, который я видел, нам просто нужно вызвать один метод для извлечения, вставки, обновления или удаления.

Спасибо за просмотр вопроса,

1 голос
/ 14 апреля 2011

Чтобы получить структуру импорта локализации corelocation в вашем проекте.перейдите по этой ссылке

http://developer.apple.com/library/ios/#samplecode/LocateMe/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007801, чтобы получить образец для определения местоположения.

Это формат для установки местоположения в формате json

[{"Longitude": "45.2655", "Latitude": "23.2655"}, {"Longitude": "45.2655", "Широта ":" 23.2655 "}, {" Долгота ":" 45.2655 "," Широта ":" 23.2655 "}]

Спасибо.

0 голосов
/ 02 мая 2011

Сначала вам нужно создать объект NSMutableArray * arrayOflocation;в .h файле,

Затем в вашем методе locationUpdate напишите следующий код

NSMutableDictionary *LocationDic = [[NSMutableDictionary alloc] init];
[LocationDic setObject:[NSString stringWithFormat:@"%f",c.latitude] forKey:@"Latitude"];
[LocationDic setObject:[NSString stringWithFormat:@"%f",c.longitude] forKey:@"Longitude"];

[arrayOflocation addObject:LocationDic];

. Теперь, когда вы сохраняете поездку, вам нужно создать строку для формата json, для которой вам нужноиспользовать json API, вы можете легко получить его с помощью Google.напишите следующий код, если вы хотите сохранить строку в файле.

NSString *dataString = [arrayOflocation JSONRepresentation];
//// code to write dataString in txt file.

и, наконец, необходимо сохранить имя файла в sqlite вместе с другими деталями для поездки.

0 голосов
/ 12 апреля 2011

Вам нужно создать таблицу с полями ...... Source, Destination, SourceLat, SourceLong, DestinationLat, DestinationLong ....... и в этом вы пройдете

Source - Mumbai,(or other) - text - varchar type
Destinatino - Pune, (or other) -text - varchar type
SourceLat - coordinate.latitude; - number with decimal precison upto 10 points.
SourceLong - coordinate.longitude - number with decimal precison upto 10 points.
DestinationLat - coordinate.latitude; - number with decimal precison upto 10 points.
DestinationLong - coordinate.longitude - number with decimal precison upto 10 points.

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...