我需要检测应用程序用户所处的环境。例如,他是在福雷斯特,城市,还是在海边......
因此我只是从地图上制作了一张图片,计算了平均像素,并将此颜色与绿色,蓝色,棕色,灰色进行比较...... 但这是非常不准确的,因为附近可能有海,但平均颜色根本不是蓝色。此外,颜色的比较并不总是符合您的期望。
有没有更好的方法来检测用户所处的环境?由于它必须在全球范围内工作,我认为没有任何可能的服务可以给我关于福雷斯特,海洋,山脉的可靠信息......
也许有人知道如何解决这个问题或者暗示我。
在这里你可以看到我是如何尝试这一点(它的目标-c代码,但我很高兴任何答案,也是与iOS应用程序开发无关的答案)。
- (UIColor *)mergedColor
{
CGSize size = {1, 1};
UIGraphicsBeginImageContext(size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(ctx, kCGInterpolationMedium);
[self drawInRect:(CGRect){.size = size} blendMode:kCGBlendModeCopy alpha:1];
uint8_t *data = CGBitmapContextGetData(ctx);
UIColor *color = [UIColor colorWithRed:data[2] / 255.0f
green:data[1] / 255.0f
blue:data[0] / 255.0f
alpha:1];
UIGraphicsEndImageContext();
return color;
}
UIColor *forrest = [UIColor greenColor];
const CGFloat *components1 = CGColorGetComponents([[self.view mergedColor] CGColor]);
const CGFloat *components2 = CGColorGetComponents([forrest CGColor]);
double fDistance = sqrt(pow(components1[0] - components2[0], 2) + pow(components1[1] - components2[1], 2) + pow(components1[2] - components2[2], 2));
double fPercentage = fDistance / sqrt(pow(255, 2) + pow(255, 2) + pow(255, 2));
答案 0 :(得分:2)
解决方案的这个想法不涉及图像处理。
但是如果您知道自己的纬度和经度(这很容易从CoreLocation获得),您可以将其传递给地理编码服务。
例如,当我查看Google的地理编码API时,我会看到"Address Types and Address Component Types"的部分,其类型包括:
natural_feature
表示突出的自然特征。 airport
表示机场。 park
表示已命名的公园。 point_of_interest
表示一个名为兴趣点。通常,这些" POI"是
突出的本地实体,不容易适合其他类别
如帝国大厦"或者"自由女神像。" 因此,您可以使用该API进行操作。