问题
I'm using the Google Maps SDK for iOS and have created a route using the GMSMutablePath
object. In the API Documentation, it says it has a function called lengthOfKind
that calculates the length of the path, but it requires an object of type GMSLengthKind
.
(CLLocationDistance) lengthOfKind: (GMSLengthKind) kind
Returns the length of the path, according to kind.
See GMSLengthKind.
However, there is nowhere in the documentation that mentions a GMSLengthKind
and I can't seem to find anything that would make sense for the input. Does anyone know what the inout should be or if there is another way to calculate the length of the path?
This is the link which I have consult
回答1:
GMSLengthKind
is defined in GMSPath.h:
/**
* kGMSEquatorProjectedMeter may be useful when specifying lengths for segment in "projected" units.
* The value of kGMSEquatorProjectedMeter, 1/(pi * EarthRadius), represents the length of one meter
* at the equator in projected units. For example to specify a projected length that corresponds
* to 100km at the equator use 100000 * kGMSEquatorProjectedMeter.
* See [GMSPath segmentsForLength:kind:], [GMSPath lengthOfKind:] and kGMSLengthProjected.
*/
extern const double kGMSEquatorProjectedMeter;
/**
* GMSLengthKind indicates the type of a length value, which can be geodesic (in meters), rhumb
* length (in meters) and projected length (in GMSMapPoint units).
*/
typedef enum {
/*
* Geodesic length, in meters, along geodesic segments. May be useful, for example, to specify
* lengths along the the trajectory of airplanes or ships.
*/
kGMSLengthGeodesic,
/*
* Rhumb length, in meters, along rhumb (straight line) segments. May be useful, for example, to
* draw a scale bar on a map. The visual size of a segment of a given length depens on the
* latitude.
*/
kGMSLengthRhumb,
/*
* Length in projected space, along rhumb segments. Projected length uses the same units as
* GMSMapPoint - the Earth equator circumference has length 2. It is possible to specify projected
* length in units corresponding to 1 meter at the equator by multiplying with
* kGMSEquatorProjectedMeter, equal to 1/(pi * EarthRadius).
*
* Projected length may be useful, for example, to specify segments with the same visual length
* regardless of latitude.
*/
kGMSLengthProjected
} GMSLengthKind;
回答2:
// coord is a coordinates array
GMSMutablePath path = [[GMSMutablePath alloc] init];
for (NSString * row in coord) {
NSArray *array = [row componentsSeparatedByString:@"|"];
double lat = [[array objectAtIndex: 0] doubleValue];
double lon = [[array objectAtIndex: 1] doubleValue];
[path addCoordinate:CLLocationCoordinate2DMake(lat, lon)];
}
// Geodesic length, in meters, along geodesic segments
NSLog(@"Lenght Length Projected=%f",[path lengthOfKind:kGMSLengthProjected]);
// Rhumb length, in meters, along rhumb (straight line) segments
NSLog(@"Lenght Length Rhumb=%f",[path lengthOfKind:kGMSLengthRhumb]);
// Length in projected space, along rhumb segments.
NSLog(@"Lenght Length Geodesic=%f",[path lengthOfKind:kGMSLengthGeodesic]);
来源:https://stackoverflow.com/questions/23143292/how-to-find-the-length-of-google-maps-path