Xamarin.ios 解析API-如何缩小结果范围?

Xamarin.ios 解析API-如何缩小结果范围?,xamarin.ios,geolocation,xamarin,Xamarin.ios,Geolocation,Xamarin,我使用下面的代码来获取最近的诊所的位置(以kms为单位),该代码非常有效。但我不明白的是如何绕过只返回100个对象的parse对象,所以我想我的问题应该是如何只返回与当前long和lat对象匹配的子集 我在viewdIdLoadMethod中调用以下函数 List<Clinics> _clicics; _clicics =GetAllNearestFamousPlaces (54.269412, -0.93399086); public List<Clinics>

我使用下面的代码来获取最近的诊所的位置(以kms为单位),该代码非常有效。但我不明白的是如何绕过只返回100个对象的parse对象,所以我想我的问题应该是如何只返回与当前long和lat对象匹配的子集

我在viewdIdLoadMethod中调用以下函数

List<Clinics> _clicics;
_clicics =GetAllNearestFamousPlaces (54.269412, -0.93399086);


public List<Clinics>  GetAllNearestFamousPlaces(double currentLatitude,double currentLongitude)
    {
        List<Clinics> Caldistance = new List<Clinics>();

        var query = ParseObject.GetQuery("clinics");
        query.FindAsync().ContinueWith(t =>
            {

        IEnumerable<ParseObject> results = t.Result;
        foreach (var obj in results)
        {
           double distance = Distance(currentLatitude, currentLongitude, obj.Get<double>("lat"), obj.Get<double>("long"));
            if (distance < 25)          //nearbyplaces which are within 25 kms 
            {
                Clinics dist = new Clinics();
                dist.Name = obj.Get<string>("Name");
                dist.Latitute = obj.Get<double>("lat");
                dist.Longitude =obj.Get<double>("long");
                Caldistance.Add(dist);
                    }
                }
            });

        return Caldistance;


    }


    private double Distance(double lat1, double lon1, double lat2, double lon2)
    {
        double theta = lon1 - lon2;
        double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
        dist = Math.Acos(dist);
        dist = rad2deg(dist);
        dist = (dist * 60 * 1.1515) / 0.6213711922;          //miles to kms
        return (dist);
    }


    private double deg2rad(double deg)
    {
        return (deg * Math.PI / 180.0);
    }

    private double rad2deg(double rad)
    {
        return (rad * 180.0 / Math.PI);
    }
List\u clicics;
_clicics=GetAllNearestFamousPlaces(54.269412,-0.93399086);
公共列表GetAllNearestFamousPlaces(双当前纬度,双当前经度)
{
List Caldistance=新列表();
var query=ParseObject.GetQuery(“诊所”);
query.FindAsync().ContinueWith(t=>
{
IEnumerable results=t.Result;
foreach(结果中的var obj)
{
双倍距离=距离(当前纬度、当前经度、obj.Get(“纬度”)、obj.Get(“长”);
if(距离<25)//距离在25公里以内的附近地方
{
诊所区=新诊所();
dist.Name=obj.Get(“Name”);
距离纬度=对象获取(“纬度”);
距离经度=对象获取(“长”);
计算距离。添加(距离);
}
}
});
返回距离;
}
专用双倍距离(双倍lat1、双倍lon1、双倍lat2、双倍lon2)
{
双θ=lon1-lon2;
双区=数学Sin(deg2rad(lat1))*数学Sin(deg2rad(lat2))+数学Cos(deg2rad(lat1))*数学Cos(deg2rad(lat2))*数学Cos(deg2rad(theta));
dist=数学Acos(dist);
dist=rad2deg(dist);
dist=(dist*60*1.1515)/0.6213711922;//英里到公里
返回(dist);
}
专用双deg2rad(双deg)
{
返回值(deg*Math.PI/180.0);
}
专用双rad2deg(双rad)
{
返回值(rad*180.0/Math.PI);
}

这在语法上可能不正确-我实际上没有使用Parse,所以我是根据他们的文档进行猜测的

// assume your point of origin is 54.269412, -0.93399086
// each degree of lat/long is **roughly** 100 km so we'll fudge and +- .5 to narrow down the
// list of clinics

double lat = 54.269412;
double lng = -0.93399086;

double minLong = lng - 0.5;
double maxLong = lng + 0.5;
double minLat = lat - 0.5;
double maxLat = lat + 0.5;

var query = from clinic in ParseObject.GetQuery("clinics")
            where clinic.Get<double>("lat") >= minLat 
            and clinic.Get<double>("lat") <= maxLat
            and clinic.Get<double>("long") >= minLat
            and clinic.Get<double>("long") <= maxLat
            select clinic;

// 1000 is the max we can request at a time
query = query.Limit(1000);

// now execute your query to get the results, and then use your Distance() function to calculate
// the precise distance and remove results that are to far away, etc
//假设您的原点是54.269412,-0.93399086
//每个纬度/长度**大约**100公里,因此我们将使用+5和+5来缩小范围
//诊所名单
双lat=54.269412;
双液化天然气=-0.93399086;
双倍最小长度=液化天然气-0.5;
双倍最大长度=液化天然气+0.5;
双minLat=lat-0.5;
双maxLat=lat+0.5;
var query=来自ParseObject.GetQuery(“诊所”)中的诊所
where clinic.Get(“lat”)>=minLat
和clinic.Get(“lat”)=minLat

和clinic.Get(“long”),请给你的问题一个有意义的标题。我之前向您介绍了Parse文档,其中解释了如何使用Limit和Skip来避免默认的100限制。你读了吗。这些文档将为您提供如何向查询添加约束以限制结果集大小的示例。我看到了,但它没有告诉您如何计算必须跳过的页面数!!!!如果你需要3000条记录,每次最多可以得到1000条,那么你需要提出3个请求。第一个请求是limit(1000)和skip(0),第二个请求是limit(1000)和skip(1000)(因为您已经有了前1000条记录),第三个请求是limit(1000)和skip(2000)。但是如果您提供了一个正确答案的示例ill mark作为答案,我将如何在我的代码中不操作它呢