2016-12-31 8 views
0

私は気象アプリにNOAAレーダー画像を追加しました。私は、いくつかのテストの後、画像が地図上に正しく描かれていないことに気付きました。画像のコーナーが近づいているようですが、コーナーから離れたときには歪んでしまいます。以下は関連するコードです。MapKit MKOverlayによるラスターマップの追加奇妙なレンダリングの問題

オーバーレイ:

@implementation FMRadarOverlay 

- (id)initWithImage:(UIImage*)radarImage withLowerLeftCoordinate:(CLLocationCoordinate2D)lowerLeftCoordinate withUpperRightCoordinate:(CLLocationCoordinate2D)upperRightCoordinate{ 
    self.radarImage = radarImage; 

    MKMapPoint lowerLeft = MKMapPointForCoordinate(lowerLeftCoordinate); 
    MKMapPoint upperRight = MKMapPointForCoordinate(upperRightCoordinate); 
    mapRect = MKMapRectMake(lowerLeft.x, upperRight.y, upperRight.x - lowerLeft.x, lowerLeft.y - upperRight.y); 
    return self; 
} 

- (CLLocationCoordinate2D)coordinate{ 
    return MKCoordinateForMapPoint(MKMapPointMake(MKMapRectGetMidX(mapRect), MKMapRectGetMidY(mapRect))); 
} 

- (MKMapRect)boundingMapRect{ 
    return mapRect; 
} 

@end 

レンダラ:

@implementation FMRadarOverlayRenderer 

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context { 
    FMRadarOverlay *radarOverlay = (FMRadarOverlay*)self.overlay; 
    CGImageRef imageReference = radarOverlay.radarImage.CGImage; 

    MKMapRect theMapRect = [radarOverlay boundingMapRect]; 
    CGRect theRect = [self rectForMapRect:theMapRect]; 

    CGContextScaleCTM(context, 1.0, -1.0); 
    CGContextTranslateCTM(context, 0.0, -theRect.size.height); 
    CGContextSetAlpha(context, 0.6); 
    CGContextDrawImage(context, theRect, imageReference); 
} 

@end 

およびレイヤを作成する例:

//using url with map and drawing transparent to check accuracy of rendering 
//url for radar data only is http://radar.weather.gov/Conus/RadarImg/latest_radaronly.gif 
NSURL *radarUrl = [NSURL URLWithString:@"http://radar.weather.gov/Conus/RadarImg/latest.gif"]; 
NSData *radarData = [NSData dataWithContentsOfURL:radarUrl]; 
UIImage *rawImage = [UIImage imageWithData:radarData]; 
FMRadarOverlay *radarOverlay = [[FMRadarOverlay alloc] initWithImage:rawImage withLowerLeftCoordinate:CLLocationCoordinate2DMake(21.652538062803, -127.620375523875420) withUpperRightCoordinate:CLLocationCoordinate2DMake(50.406626367301044, -66.517937876818)]; 

あなたは同じ画像と座標を取得し、それらを重ね合わせた場合Google Earthを正しくレンダリングするkmlファイルを使用してそれは地球の曲率や何かを補うものではないようです。私はこれと同じ効果を持った別の地理参照ラスターレイヤーでこれを試しました。何か案は?

例KML:悪いレンダリングの

<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.0"><Document><name>NWS Radar Images</name><open>1</open><Folder> <name>National Weather Service</name> <ScreenOverlay> <name>National Weather Service</name> <description>National Weather Service Doppler Radar RIDGE Imagery http://radar.weather.gov</description> <visibility>1</visibility> <Icon> <href>http://radar.weather.gov/ridge/graphics/nws_google.gif</href> </Icon> <overlayXY x="0" y="1" xunits="fraction" yunits="fraction" /> <screenXY x="0" y="1" xunits="fraction" yunits="fraction" /> <rotationXY x="0" y="0" xunits="fraction" yunits="fraction" /> <size x="0" y="0" xunits="fraction" yunits="fraction" /> </ScreenOverlay><ScreenOverlay> <name>NOAA</name> <description>National Oceanic and Atomospheric Administration http://www.noaa.gov</description> <visibility>1</visibility> <Icon> <href>http://radar.weather.gov/ridge/graphics/noaa_google.gif</href> </Icon> <overlayXY x=".2" y="1" xunits="fraction" yunits="fraction" /> <screenXY x=".2" y="1" xunits="fraction" yunits="fraction" /> <rotationXY x="0" y="0" xunits="fraction" yunits="fraction" /> <size x="0" y="0" xunits="fraction" yunits="fraction" /> </ScreenOverlay></Folder><Folder><name>LATEST_RADARONLY</name><Folder><name>Mosaic</name><ScreenOverlay><name>Legend</name><visibility>1</visibility><Icon><href></href><refreshMode>onInterval</refreshMode><refreshInterval>120</refreshInterval></Icon><overlayXY x="1.0" y="0.5" xunits="fraction" yunits="fraction"/><screenXY x="1.0" y="0.5" xunits="fraction" yunits="fraction"/><rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/></ScreenOverlay><GroundOverlay><name>Mosaic</name><Icon><href>http://radar.weather.gov/ridge/Conus/RadarImg/latest.gif</href><refreshMode>onInterval</refreshMode><refreshInterval>120</refreshInterval></Icon><visibility>1</visibility><LatLonBox><north>50.406626367301044</north><south>21.652538062803</south><east>-66.517937876818</east><west>-127.620375523875420</west></LatLonBox></GroundOverlay></Folder></Folder></Document></kml> 

画像:問題は、画像空間投影と map not drawn correctly

enter image description here

答えて

0

ました。私はgdalwarpというツールを使って、MapKitのようにmercator投影法でイメージを再投影しました。私はMapKitで地上オーバーレイの例をたくさん見てきましたが、そのすべてがこの重要な情報を見落としています。 Google EarthやGISアプリケーションなどのアプリケーションでは、ほとんどのジオラスタマップが投影されていると思います。