gpt4 book ai didi

objective-c - SimpleDB - 位置比较选择表达式

转载 作者:行者123 更新时间:2023-12-01 18:25:33 29 4
gpt4 key购买 nike

我有一个坐标,假设任何纬度和经度值。

我在 SimpleDB 上有一个域设置,其中包含许多具有“纬度”和“经度”属性的项目(简单字符串)。现在我想要做的是查询 SimpleDB 并查看当前位置坐标是否与 SimpleDB 的项目坐标相距“x”米。 “x”应该是 10。

我的应用程序使用包含纬度和经度的属性将项目上传到 SimpleDB。我检测用户位置,获取坐标,并且我想使用选择表达式来查看坐标是否相距“x”米。他们的 也是如此更好这样做的方法?或者这是最好的方法,如果是这样,我该怎么做?

这是选择表达式的示例,我只是不知道在这种情况下如何使用它以及 '%@' 是什么值将由。这整个格式可能会关闭,这只是我的想法。

select * from test-app-simpledb where Latitude >= '%@' AND Latitude <= '%@' AND Longitude >= '%@' AND Longitude <= '%@'


所以“test-app-simpledb”是我的SimpleDB域名,纬度和经度是我比较坐标的属性。它们都转换为字符串。

那么,我该如何做位置比较选择表达式。查询项目的坐标(纬度和经度属性)是否相距“x”(在本例中为 10)米。

有什么办法可以做到这一点?谢谢!

最佳答案

在修改后的问题中,很明显实际问题是如何对 Amazon SimpleDB 数据库进行查询,以查看数据库中的位置是否在 iOS 应用程序提供的位置的某个半径范围内。

正如您正确识别的那样,如果可能,您确实希望在服务器端而不是客户端执行此操作。并且特定的解决方案将高度依赖于特定的数据库技术(在这种情况下为 SimpleDB)。

Spatial queries on AWS SimpleDB 中提到了这个问题。 .我建议检查一下以获取更多信息。

作为适当距离算法的代理,您可以将米的距离转换为纬度和经度范围。因此,您可以在 iOS 中计算纬度和经度的最小值和最大值,然后将它们传递到 WHERE 中。子句到您的远程数据库。然后服务器可以根据这些标准过滤结果。诚然,这为您提供了一个方形区域(而不是通过正确计算距离获得的圆形区域),但它可以非常容易地快速限制结果集,而无需在服务器上使用特殊的地理定位逻辑。为此,您可以使用 MKCoordinateRegionMakeWithDistance 定义一个区域。 ,然后捕获它的 span .

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(originalCoordinate, 200, 200);
MKCoordinateSpan span = region.span;

这给了你 span.latitudeDeltaspan.longitudeDelta您可以以给定位置的纬度和经度为中心来定义一个位置周围的方形区域。为了证明这一点,这里的中心图钉是我在时代广场的位置,阴影区域是一个区域(使用上面的 span 构建,宽和高 200m),涵盖东 100m 和西 100m 之间的经度我当前的位置,以及我当前位置以北 100m 和以南 100m 的纬度。

using span to define a square region

这是雇用 MapKit.framework 的一种方式功能可大大简化您对远程数据库的 SQL 查询,以根据地理距离过滤位置。如果方形区域有问题,您还可以在将结果下载到 iOS 应用程序后使用 CLLocation 进一步过滤结果。实例方法, distanceFromLocation 来确定实际距离。但是,通过限制服务器检索位置的经度和纬度,您可以显着简化服务器检索过程,同时不会因过多的地理位置计算而受到阻碍。

但是你真的想让 SimpleDB 做完整的、适当的距离计算,我不得不把它留给其他人。

下面,是我的原始答案。在最初的问题中,我将其误解为“如何构建一个围绕特定位置的圆圈中的坐标列表?”正如修订后的问题所表明的那样,这根本不是问题,但我会在这里保留我的旧答案以供历史引用。

原答案:

如果您使用了 Calculate new coordinate x meters and y degree away from one coordinate ,实现可能如下所示:
NSInteger numberOfPoints = 10;

for (double bearing = 0.0; bearing < 360.0; bearing += (360.0 / numberOfPoints))
{
CLLocationCoordinate2D coordinate = [self coordinateFromCoord:originalCoordinate
atDistanceKm:distanceKm
atBearingDegrees:bearing];
// do whatever you want with this coordinate
}

它似乎工作正常。例如,我有一个应用程序使用此例程在时代广场距离我 100m 处放置 10 个大头针:

times square

关于objective-c - SimpleDB - 位置比较选择表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140253/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com