How to find the length of Google Maps Path

六月ゝ 毕业季﹏ 提交于 2019-12-13 18:29:37

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!