9 #import <UIKit/UIKit.h>
10 #import <CoreLocation/CoreLocation.h>
23 CLLocationDegrees latitudeDelta;
24 CLLocationDegrees longitudeDelta;
32 CLLocationCoordinate2D center;
44 static inline QCoordinateSpan QCoordinateSpanMake(CLLocationDegrees latitudeDelta, CLLocationDegrees longitudeDelta)
66 CLLocationCoordinate2D northEast;
110 static inline QMapPoint QMapPointMake(
double x,
double y)
123 static inline QMapSize QMapSizeMake(
double width,
double height)
138 static inline QMapRect QMapRectMake(
double x,
double y,
double width,
double height)
140 return (
QMapRect){QMapPointMake(x, y), QMapSizeMake(width, height)};
150 static inline double QMapRectGetMinX(
QMapRect rect)
152 return rect.origin.x;
162 static inline double QMapRectGetMinY(
QMapRect rect)
164 return rect.origin.y;
174 static inline double QMapRectGetMidX(
QMapRect rect)
176 return rect.origin.x + rect.size.width / 2.0;
186 static inline double QMapRectGetMidY(
QMapRect rect)
188 return rect.origin.y + rect.size.height / 2.0;
198 static inline double QMapRectGetMaxX(
QMapRect rect)
200 return rect.origin.x + rect.size.width;
210 static inline double QMapRectGetMaxY(
QMapRect rect)
212 return rect.origin.y + rect.size.height;
222 static inline double QMapRectGetWidth(
QMapRect rect)
224 return rect.size.width;
234 static inline double QMapRectGetHeight(
QMapRect rect)
236 return rect.size.height;
249 return point1.x == point2.x && point1.y == point2.y;
262 return size1.width == size2.width && size1.height == size2.height;
276 QMapPointEqualToPoint(rect1.origin, rect2.origin) &&
277 QMapSizeEqualToSize(rect1.size, rect2.size);
287 static inline BOOL QMapRectIsNull(
QMapRect rect)
289 return QMapPointEqualToPoint(rect.origin, QMapRectNull.origin);
299 static inline BOOL QMapRectIsEmpty(
QMapRect rect)
301 return QMapRectIsNull(rect) || (rect.size.width == 0.0 && rect.size.height == 0.0);
374 static inline NSString *QStringFromMapPoint(
QMapPoint point)
376 return [NSString stringWithFormat:
@"{%.1f, %.1f}", point.x, point.y];
386 static inline NSString *QStringFromMapSize(
QMapSize size)
388 return [NSString stringWithFormat:
@"{%.1f, %.1f}", size.width, size.height];
398 static inline NSString *QStringFromMapRect(
QMapRect rect)
400 return [NSString stringWithFormat:
@"{%@, %@}", QStringFromMapPoint(rect.origin), QStringFromMapSize(rect.size)];
411 extern QMapPoint QMapPointForCoordinate(CLLocationCoordinate2D coordinate);
420 extern CLLocationCoordinate2D QCoordinateForMapPoint(
QMapPoint mapPoint);
465 extern CLLocationDistance QMetersPerMapPointAtLatitude(CLLocationDegrees latitude);
474 extern double QMapPointsPerMeterAtLatitude(CLLocationDegrees latitude);
485 static inline QCoordinateRegion QCoordinateRegionMakeWithDistance(CLLocationCoordinate2D centerCoordinate, CLLocationDistance latitudinalMeters, CLLocationDistance longitudinalMeters)
487 QMapSize spanSize = QMapSizeMake(QMapPointsPerMeterAtLatitude(centerCoordinate.latitude) * latitudinalMeters, QMapPointsPerMeterAtLatitude(centerCoordinate.latitude) * longitudinalMeters);
489 QMapPoint center = QMapPointForCoordinate(centerCoordinate);
490 QMapPoint leftTop = QMapPointMake(center.x - spanSize.width / 2.0, center.y - spanSize.height / 2.0);
491 QMapPoint rightBottom = QMapPointMake(center.x + spanSize.width / 2.0, center.y + spanSize.height / 2.0);
493 CLLocationCoordinate2D leftTopCoordinate = QCoordinateForMapPoint(leftTop);
494 CLLocationCoordinate2D rightBottomCoordinate = QCoordinateForMapPoint(rightBottom);
496 return QCoordinateRegionMake(centerCoordinate,
497 QCoordinateSpanMake(fabs(leftTopCoordinate.latitude - rightBottomCoordinate.latitude),
498 fabs(leftTopCoordinate.longitude - rightBottomCoordinate.longitude)));
510 extern BOOL QPolygonContainsPoint(
QMapPoint point,
QMapPoint *polygon, NSUInteger count);
519 extern BOOL QPolygonContainsCoordinate(CLLocationCoordinate2D coordinate, CLLocationCoordinate2D *polygon, NSUInteger count);
537 extern BOOL QCircleContainsCoordinate(CLLocationCoordinate2D point, CLLocationCoordinate2D center,
double radius);
552 extern BOOL QPolylineHitTestPoint(
QMapPoint point,
QMapPoint *polyline, NSUInteger count,
double lineWidth);
567 extern BOOL QPolylineHitTestCoordinate(CLLocationCoordinate2D coordinate, CLLocationCoordinate2D *polyline, NSUInteger count,
double lineWidth);
587 extern CLLocationDistance QMetersBetweenCoordinates(CLLocationCoordinate2D a, CLLocationCoordinate2D b);
618 extern QCoordinateRegion QBoundingCoordinateRegionWithCoordinates(CLLocationCoordinate2D *coordinates, NSUInteger count);
629 extern QCoordinateRegion QBoundingCoordinateRegionWithCoordinatesAndCenter(CLLocationCoordinate2D *coordinates, NSUInteger count, CLLocationCoordinate2D centerCoordinate);
636 extern QMapRect QWorldMapRect(
void);
644 extern double QAreaForPolygon(CLLocationCoordinate2D *coordinates,
int count);
658 + (NSValue *)valueWithQMapPoint:(
QMapPoint)mapPoint;
667 + (NSValue *)valueWithQMapSize:(
QMapSize)mapSize;
676 + (NSValue *)valueWithQMapRect:(
QMapRect)mapRect;
685 + (NSValue *)valueWithCoordinate:(CLLocationCoordinate2D)coordinate;