マップで動作する iPhone アプリケーションを開発しています。このアプリでは、緯度と経度に基づいていくつかの駐車場 (住所) を表示する必要があります。この時点で問題なく終了しましたが、ユーザーの方向 (SE、SW、NE、NW) に対するピン ポイントを表示したいと思います。MKMapview でコンパス モードを使用してみましたが、ピン ポイントが間違った方向に表示されます。
私のコードに間違いがありますか、それとも Web サービスのせいですか? ユーザーの場所の LAT と LONG およびユーザーの方向を Web サービスに渡しています。
今、スクリーンショットをお見せしています。
- (void)updateHeading:(CLHeading *) newHeading {
NSLog(@"New magnetic heading: %f", newHeading.magneticHeading);
NSLog(@"New true heading: %f", newHeading.trueHeading);
double rotation = newHeading.magneticHeading * 3.14159 / 180;
NSLog(@"rotation ========> %f",rotation);
[mapView setTransform:CGAffineTransformMakeRotation(rotation)];
[[mapView annotations] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
MKAnnotationView * view = [mapView viewForAnnotation:obj];
[view setTransform:CGAffineTransformMakeRotation(rotation)];
}];
//NSLog(@"newlocation course : %f",mapView.userLocation.location.course);
float mHeading = newHeading.magneticHeading;
NSLog(@"mHeading %f",mHeading);
//direction is a string
if(mHeading > 0 && mHeading <90) {
// north east
NSLog(@"~~~~~~~~~~~~~~~~north east");
direction = @"North East";
}
else if(mHeading > 90 && mHeading < 180) {
// south east
NSLog(@"~~~~~~~~~~~~~~~~south east");
direction = @"South East";
}
else if(mHeading > 180 && mHeading < 270) {
// south west
NSLog(@"~~~~~~~~~~~~~~~~south west");
direction = @"South West";
}
else if(mHeading > 270 && mHeading < 360) {
// north west
NSLog(@"~~~~~~~~~~~~~~~~north west");
direction = @"North West";
}
if([changedDirction isEqualToString:direction])
{
NSLog(@"called nothing/changedDirction.....");
}
else
{
NSURL *url = [NSURL URLWithString:@"http://www.charlottecentercity.org/services/nearbylocations.php"];
NSLog(@"url is---%@",url);
directionsRequest = [[ASIFormDataRequest alloc] initWithURL:url];
[directionsRequest setPostValue:[NSString stringWithFormat:@"%f", appdelegate.currentLocation.latitude] forKey:@"lat"];
[directionsRequest setPostValue:[NSString stringWithFormat:@"%f", appdelegate.currentLocation.longitude] forKey:@"long"];
directionLabel.text = direction;
[directionsRequest setPostValue:direction forKey:@"direction"];
[directionsRequest setPostValue:self.mapID forKey:@"id"];
directionsRequest.delegate = self;
[directionsRequest startAsynchronous];
changedDirction = direction;
} }
-(void)requestFinished:(ASIHTTPRequest *)request {
NSLog(@"request finished is calling....");
if ([venuDescArray count]>0)
{
[venuDescArray removeAllObjects];
}
NSError *error = [request error];
NSLog(@"error is%@",error);
if (!error)
{
NSString *responseString = [request responseString];
NSMutableArray *array = [responseString JSONValue];
NSLog(@"response array for category wise pin--%@",array);
for (int i = 0; i<[array count]; i++)
{
NSMutableDictionary *theDict = [array objectAtIndex:i];
PlacesObject *aVenue = [[PlacesObject alloc] init];
aVenue.venueDetailsplaceID = [theDict objectForKey:@"placeid"];
aVenue.venueDetailsname = [theDict objectForKey:@"name"];
aVenue.venueDetailsaddress = [theDict objectForKey:@"address"];
aVenue.venueDetailslatitude = [theDict objectForKey:@"latitude"];
aVenue.venueDetailslongitude = [theDict objectForKey:@"longitude"];
[venuDescArray addObject:aVenue];
}
NSLog(@"venuDescArray count is---%d",[venuDescArray count]);
}
[self setLocations]; }
-(void)setLocations {
[annotaionsArray11 removeAllObjects];
[mapView removeAnnotations:mapView.annotations];
NSLog(@"annotations removed....");
self.mapView.mapType = MKMapTypeStandard;
self.mapView.delegate = self;
MyAnnotation *myAnnotation = [[MyAnnotation alloc] init];
float lati_new =appdelegate.currentLocation.latitude;//35.227087;
float longi_new =appdelegate.currentLocation.longitude;//-80.843127;
myAnnotation.annType=@"Current";
myAnnotation.title1 =@"Current our Location";
myAnnotation.latitude=[NSNumber numberWithFloat:lati_new];
myAnnotation.longitude =[NSNumber numberWithFloat:longi_new];
NSLog(@"myAnnotation.latitude/float---%@",myAnnotation.latitude);
NSLog(@"myAnnotation.longitude/float---%@",myAnnotation.longitude);
[annotaionsArray11 addObject:myAnnotation];
[myAnnotation setButtonTag:0];
NSLog(@"self.venuDescArray count:%d",[self.venuDescArray count]);
PlacesObject *placesObj=[[PlacesObject alloc] init];
for (int i=0; i<[self.venuDescArray count]; i++)
{
placesObj=[self.venuDescArray objectAtIndex:i];
MyAnnotation *myAnnotation = [[MyAnnotation alloc] init];
myAnnotation.annType=@"Points";
myAnnotation.title1 =placesObj.venueDetailsname;
NSLog(@"myAnnotation.title1's is---%@",myAnnotation.title1);
myAnnotation.subTitle =placesObj.venueDetailsaddress;
NSLog(@"myAnnotation.subTitle is---%@",myAnnotation.subTitle);
myAnnotation.latitude =[NSNumber numberWithFloat:[placesObj.venueDetailslatitude floatValue]];
NSLog(@"myAnnotation.latitudes is ----%@",myAnnotation.latitude);
myAnnotation.longitude =[NSNumber numberWithFloat:[placesObj.venueDetailslongitude floatValue]];
NSLog(@"myAnnotation.longitude is ----%@",myAnnotation.longitude);
[annotaionsArray11 addObject:myAnnotation];
NSLog(@"annotaionsArray11---%d",[annotaionsArray11 count]);
[myAnnotation setButtonTag:i];
}
NSLog(@"annotaionsArray count after adding all locations..%d",[annotaionsArray11 count]);
[mapView addAnnotations:annotaionsArray11]; }
助けてくれてありがとう@harikrishna