2010-02-11 12 views
5

मैं अपने Google App Engine ऐप के लिए भू-स्थानिक डेटा तक पहुंचने के लिए जियोमोडेल पायथन मॉड्यूल का उपयोग करने का प्रयास कर रहा हूं। मेरे पास जिन मुद्दों पर मैं चल रहा हूं उनके लिए मेरे पास कुछ सामान्य प्रश्न हैं। दो मुख्य विधियां हैं, proximity_fetch और bounding_box_fetch, जिनका उपयोग आप प्रश्नों को वापस करने के लिए कर सकते हैं। वे वास्तव में परिणाम सेट वापस करते हैं, फ़िल्टर किए गए क्वेरी नहीं, जिसका अर्थ है कि आपको इसे पास करने से पहले फ़िल्टर किए गए क्वेरी को पूरी तरह से तैयार करने की आवश्यकता है। यह आपको क्वेरी सेट पर फिर से शुरू करने से भी सीमित करता है, क्योंकि परिणाम प्राप्त होते हैं, और आपके पास नहीं है लाने में ऑफसेट इनपुट करने का विकल्प।Google App Engine के साथ GeoModel - प्रश्न

कोड को संशोधित करने में छोटा, क्या कोई प्रश्न में ऑफसेट निर्दिष्ट करने के लिए समाधान की सिफारिश कर सकता है? मेरी समस्या यह है कि मुझे यह देखने के लिए एक चर के खिलाफ प्रत्येक परिणाम की जांच करनी है कि मैं इसका उपयोग कर सकता हूं, अन्यथा इसे फेंक दें और अगली जांच करें। मैं उन मामलों में भाग सकता हूं जहां मुझे अतिरिक्त लाने की आवश्यकता है, लेकिन ऑफसेट से शुरू करना।

+0

http://code.google.com/p/geomodel/issues/detail?id=3&colspec=ID%20Type%20Summary%20Status%20Priority%20Owner%20Stars%20Milestone – Uri

उत्तर

2

आप अपने मॉडल के location_geocells के साथ सीधे काम भी कर सकते हैं।

from geospatial import geomodel, geocell, geomath 

# query is a db.GqlQuery 
# location is a db.GeoPt 

# A resolution of 4 is box of environs 150km 
bbox = geocell.compute_box(geocell.compute(geo_point.location, resolution=4)) 
cell = geocell.best_bbox_search_cells (bbox, geomodel.default_cost_function) 

query.filter('location_geocells IN', cell) 

# I want only results from 100kms. 
FETCHED=200 
DISTANCE=100 
def _func (x): 
    x.dist = geomath.distance(geo_point.location, x.location) 
    return x.dist 

results = sorted(query.fetch(FETCHED), key=_func) 
results = [x for x in results if x.dist <= DISTANCE] 
1

ऐसा करने के लिए कोई व्यावहारिक तरीका है, क्योंकि geoquery के लिए एक कॉल कई डेटासंग्रह प्रश्नों, जो यह एक एकल परिणाम सेट में एक साथ विलीन हो जाती है में devolves है। यदि आप ऑफसेट निर्दिष्ट करने में सक्षम थे, तो आपके द्वारा अनुरोध किए गए अनुरोधों को वापस करने से पहले geoquery को अभी भी सभी पहले एन परिणामों को लाने और त्यागना होगा।

कर्सर का समर्थन करने के लिए जियोकरी को संशोधित करने के लिए एक बेहतर विकल्प हो सकता है, लेकिन प्रत्येक क्वेरी को कर्सर का एक सेट वापस करना होगा, एक भी नहीं।