2012-02-16 13 views
13

मेरी समस्या वास्तव में मूर्खतापूर्ण प्रतीत होती है ... मैं एक आईफोन एप्लीकेशन लिख रहा हूं जो एमके मैपकिट का उपयोग करता है। ऐप एक प्रदान की गई geotagged तस्वीर से EXIF ​​मेटाडाटा पकड़ लेता है। समस्या अक्षांश और देशांतर निर्देशांक कि कि मैं पुनः प्राप्त उदाहरण के लिए, है:मैं एक अपलोड किए गए आईफोन फोटो से सही अक्षांश और देशांतर कैसे प्राप्त करूं?

अक्षांश: 34,25733333333334

देशांतर: 118,5373333333333

चीन में एक स्थान देता है। क्या कोई क्षेत्रीय सेटिंग है जो मुझे याद आ रही है या क्या मुझे प्रयोग करने से पहले लेट/लम्बा निर्देशांक बदलने की ज़रूरत है?

आपके द्वारा प्रदान की जा सकने वाली किसी भी सहायता के लिए अग्रिम धन्यवाद।

यहां कोड है जिसका उपयोग मैं जीपीएस डेटा को पकड़ने के लिए कर रहा हूं।

void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset) 
{ 
    NSDictionary *metadata = asset.defaultRepresentation.metadata; 
    NSLog(@"Image Meta Data: %@",metadata); 
    NSDictionary *gpsdata = [metadata objectForKey:@"{GPS}"]; 
    self.lat = [gpsdata valueForKey:@"Latitude"]; 
    self.lng = [gpsdata valueForKey:@"Longitude"]; 
    NSLog(@"\nLatitude: %@\nLongitude: %@",self.lat,self.lng); 
}; 

NSURL *assetURL = [mediaInfo objectForKey:UIImagePickerControllerReferenceURL]; 
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
[library assetForURL:assetURL 
     resultBlock:ALAssetsLibraryAssetForURLResultBlock 
     failureBlock:^(NSError *error) { 
     }]; 

UIImage *img = [mediaInfo objectForKey:@"UIImagePickerControllerEditedImage"]; 
previewImage.image = nil; 
self.previewImage.image = img; 

NSData *imageData = UIImagePNGRepresentation(img); 
if ([imageData length] > 0) { 
    self._havePictureData = YES; 

} 
+0

थोड़ा सा कोड अच्छा होगा – Novarg

+0

बस इसे कोड नमूना के साथ अपडेट किया गया। –

+0

'self.lat' और' self.lng' क्या है? प्रकार उपयोग से स्पष्ट नहीं है। – Tim

उत्तर

14

मुझे लगता है कि आप निम्नलिखित का उपयोग कर मूल्य हड़पने चाहिए:

CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation]; 
+0

परफेक्ट! वह यह था। आपको बहुत - बहुत धन्यवाद! –

+1

हम्म। यह मेरे लिए काम नहीं कर रहा है। मैं फोटो लेता हूं और, जैसे ही मैं छवि को वापस प्राप्त करता हूं ** UIImagePickerControllerDelegate ** मैं संपत्तियों की जांच करता हूं।ALASSetPropertyLocation * नहीं * मौजूद है, यहां तक ​​कि आईफोन 4 और आईपैड 3 जीन पर आईओएस 5.x पर ऐप में (और कैमरा ऐप, एफडब्लूआईडब्ल्यू) के लिए पहले से ही अनुमति के साथ अनुमति दी गई है। –

+0

Thanx एक आकर्षण की तरह काम कर रहा है ... –

2

क्या आप वाकई कि 118 पर एक ऋण चिह्न गायब नहीं कर रहे हैं: आप मुझे सांत्वना के लिए सब कुछ प्रवेश करने कर रहा हूँ ताकि मैं क्या मान हैं देख सकते हैं पर ध्यान देंगे? 34.257, -118.5373 कैलिफोर्निया के लॉस एंजिल्स के अंदर अच्छी तरह से है।

+0

इसे देखने के लिए धन्यवाद। यह काफी आश्चर्यजनक है। किसी भी तस्वीर से मिलने वाले लेट/एलएनजी में कोई ऋण चिह्न नहीं है। मुझे चिंता है कि अगर मैं स्वचालित रूप से एक ऋण चिह्न मानता हूं, तो मुझे गलत परिणाम मिल सकते हैं। –

+0

लैट/एलएनजी प्राप्त करने के लिए आप जिस कोड का उपयोग कर रहे हैं उसे पोस्ट करें। यह एक कास्ट कर रहा है जो संकेत हटा रहा है। – Tim

+0

बस इसे मेरे कोड के साथ अपडेट किया गया। –

1

आप @Allen प्रति संपत्ति से स्थान मिल सकता है, यह भी जीपीएस मेटाडाटा से इसे पाने के लिए के रूप में आप के लिए कोशिश कर रहे थे मान्य है शुरुआत में करो। मुझे 100% यकीन नहीं है कि संपत्ति लाइब्रेरी समन्वय जीपीएस मेटाडेटा में समन्वयक के समान होगा, यह इस बात पर निर्भर करता है कि ऐप्पल इस समन्वय को कैसे स्टोर करता है। उदाहरण के लिए, यदि आप टाइमस्टैम्प का उपयोग कर रहे हैं, तो संपत्ति लाइब्रेरी टाइमस्टैम्प EXIF ​​निर्माण दिनांक (एक अलग विषय, स्वीकार्य रूप से) से अलग है।

किसी भी मामले में, कारण आप coord गलत है b/c आप भी इस प्रकार दिशा की जानकारी प्राप्त करने की आवश्यकता:

NSDictionary *metadata = asset.defaultRepresentation.metadata; 
NSLog(@"Image Meta Data: %@",metadata); 
NSDictionary *gpsdata = [metadata objectForKey:@"{GPS}"]; 
self.lat = [gpsdata valueForKey:@"Latitude"]; 
self.lng = [gpsdata valueForKey:@"Longitude"]; 

// lat is negative is direction is south 
if ([[gpsdata valueForKey:@"LatitudeRef"] isEqualToString:@"S"]) { 
    self.lat = -self.lat; 
} 

// lng is negative if direction is west 
if ([[gpsdata valueForKey:@"LongitudeRef"] isEqualToString:@"W"]) { 
    self.lng = -self.lng; 
} 

NSLog(@"\nLatitude: %@\nLongitude: %@",self.lat,self.lng); 
0

यह भी होगा काम करता है,

void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset) 
    { 
     ALAssetRepresentation *rep = [asset defaultRepresentation]; 
     NSDictionary *metadata = rep.metadata; 

     NSMutableDictionary *GPSDictionary = [[[metadata objectForKey:(NSString *)kCGImagePropertyGPSDictionary]mutableCopy] autorelease]; 

    }; 
+0

एक असंबंधित नोट पर, कृपया जोर देने के लिए बैकटिक्स का उपयोग करके [सुझाए गए संपादन को स्वीकृति दें] (http://stackoverflow.com/review/suggested-edits/2846283), लेकिन अस्वीकार या सुधार उन्हें - उदाहरण देखें [यहां] (http://meta.gaming.stackexchange.com/q/7437/88) क्यों –

+0

यह सही तरीके से काम नहीं करेगा। इसमें लेट या लम्बे मानों के लिए '-' चिह्न शामिल नहीं है। तो दुर्भाग्य से गलत परिणाम देता है। –

0

मैं मान लीजिए कि मेटाडाटा: exif:GPSLongitudeRef: W जो (मुझे विश्वास है) का मतलब है कि ऋणात्मक संकेत नहीं है इसका मतलब है कि पश्चिमी गोलार्ध का संदर्भ देने के बाद से देशांतर के सामने नकारात्मक संकेत होना चाहिए। मेरा मानना ​​है कि यह अक्षांश पर भी लागू होता है लेकिन उत्तरी और दक्षिणी गोलार्धों के लिए exif:GPSLatitudeRef: N के साथ। उम्मीद है कि यह मदद की। बस एहसास हुआ कि यह ठीक है @XJones ने कहा। ImageMagick का उपयोग कर मेटाडेटा।

संबंधित मुद्दे