2016-09-09 46 views
1

我使用Azure的搜寻以下查询:Azure搜索:geo.intersects返回不正确的结果?

$过滤= geo.intersects(坐标,geography'POLYGON((1.136 44.733,1.316 44.733,1.316 44.553,1.136 44.553,1.136 44.733))')

这应该返回此多边形内的所有点,这是法国西南部的一个小区域。不幸的是,Azure搜索从多边形之外返回结果。

似乎不正确,我(纠正,见注释)结果

例子:

  • LON = 5.299151,LAT = 44.695285,
  • LON = 0.397723,LAT = 44.668628,

多边形中的点顺时针输入(在相关问题中提到),但仍然不正确。

有关修复查询的任何建议?

我用下面的代码喂养指数:

公共类几何

{ 
    public Geometry(Coordinate c) 
    { 
     List<double> GeoList = new List<double>();   
     GeoList.Add((double)c.Longitude); 
     GeoList.Add((double)c.Latitude); 
     type = "Point"; 
     coordinates = GeoList; 
    } 

    public string type { get; set; } 
    public IList<double> coordinates { get; set; } 
} 
+0

在你的坐标,似乎不正确的例子,它看起来像LON和LAT被交换。这是一个错字,还是那些你看到的实际结果? –

+0

他们在LAT-LON顺序返回(我编辑的问题,以反映正确的顺序): “协调”:{ “类型”: “点”, “坐标”: 5.299151, 44.695285 ], “CRS”:{ “类型”: “名字”, “属性”:{ “名”: “EPSG:4326” } } } –

+0

要纠正我以前的评论,因为我可以不再编辑这个评论:他们确实是错的,我混淆了他们。这一定是解释。我会测试并让你知道结果。 –

回答

1

TL;定义多边形DR时放点按逆时针顺序。


更细致入微的答案是:

天青搜索使用的OData它使用Well-known text格式,以限定几何对象。如per the WKT spec多边形点按逆时针顺序排列,如果您希望从顶部看多边形的区域。由于我们正在处理非欧几何几何问题,所以我们很难去思考。

[多边形]定义了曲面的“顶部”,即曲面的外侧边界以逆时针方向穿过边界的一侧。

解决您的问题,尝试把你的观点逆时针顺序,而不是

$filter=geo.intersects(coordinate,geography'POLYGON((1.136 44.733, 1.136 44.553, 1.316 44.553, 1.316 44.733, 1.136 44.733))') 
+0

谢谢,这个作品! –