我正在使用本地模拟器尝试从地理空间查询返回结果。如果不是因为我刮胡子,我会把头发撕掉。我已经描述了我正在尝试做的事情以及我在这里尝试过的事情: https://social.msdn.microsoft.com/Forums/en-US/79c449c9-4fe7-43cf-ba07-6b168ead60da/struggling-with-this-geospatial-linq-query-?forum=AzureDocumentDB
对于所有圣洁的爱,如果你有建议,请帮忙。关于这个臭名昭着的问题,我的生活正在崩溃。
感谢您提供任何帮助。
-r
答案 0 :(得分:0)
我相信你可以做一个自连接来压平设备数组并使用'ST_DISTANCE()'。它看起来像这样。
sleep 10
不是100%肯定它会使用索引,但我认为它会。
如果失败了,可能还有另一种方法可以调整您的架构。存储所有设备位置的非规范化多边形。然后,您可以生成一个近似于用户具有指定半径的圆心的多边形。然后,您可以使用try:
import sys
# For Python 3.0 and later
from urllib.request import urlopen
except ImportError:
# Fall back to Python 2's urllib2
import sys
from urllib2 import urlopen
def fetch_words(url):
html = urlopen(url)
print(html.read())
story_words = []
for line in html:
line_words = line.decode('utf-8').split()
for word in line_words:
story_words.append(word)
return story_words
def print_items(items):
for item in items:
print(item)
def main():
url = sys.argv[1]
words = fetch_words(url)
print_items(words)
if name == '__main__'
main()
使用此模拟圆圈对所有设备的非规范化多边形进行查询。
我没有试过这个,所以我不确定它会使用索引,但我认为这很有可能。此外,非规范化多边形的组合可能很棘手。我建议您找到设备的中心,并使多边形为星形,从每个设备返回到中心或靠近中心,然后返回到下一个设备等。这样,它就不太可能返回结果,其中用户位置在两个设备之间,但都不在用户的指定半径范围内。
答案 1 :(得分:0)
我真的很感激Larry的建议。我实际上能够使用我的查询。事实证明,我被Azure门户所破坏,自动为我和本地DocumentDB模拟器创建策略。所以我采用了Azure创建的策略并将其粘贴到我的模拟器中,我的上一个查询按预期工作。作为参考,这是政策:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Range",
"dataType": "String",
"precision": -1
},
{
"kind": "Spatial",
"dataType": "Point"
}
]
}
],
"excludedPaths": []
}
再次感谢!非常感谢!