ओएसएम में नियो 4j-स्थानिक ढूँढना नोड्स और पीओआई के लिए सबसे कम रास्ता खोजना

नमस्ते मैं neo4j के लिए नया हूँ और यह पता लगाने की कोशिश कर रहा हूं कि सब कुछ कैसे काम करता है

मैं एक ओएसएम फ़ाइल आयात करता हूं और अब मैं एक ऐसे फ़ंक्शन पर काम कर रहा हूं जिसे आप डब्लूजीएस 84 प्रारूप और पीओआई में एक बिंदु इनपुट कर सकते हैं और फिर फ़ंक्शन को पीओआई का सबसे छोटा रास्ता मिल जाता है।

तो मेरे डब्लूजीएस 84 प्वाइंट में निकटतम ज्यामिति ढूंढने के लिए मैं उपयोग करता हूं

Coordinate co = new Coordinate(12.9639158,56.070904);
List results2 = GeoPipeline
                .startNearestNeighborLatLonSearch(layer, co, 1)
                .toSpatialDatabaseRecordList();

लेकिन फिर मेरी समस्याएं शुरू होती हैं क्योंकि मैं वास्तव में समझ नहीं पा रहा हूं कि ओएसएम फ़ाइल कैसे बनाई गई है

क्या कोई ऐसा कार्य है जिससे मैं अपना पीओआई नोड नाम से प्राप्त कर सकूं? मुझे ओएसएम फाइल से एक इंडेक्स मिलता है

SpatialDatabaseService spatialService = new SpatialDatabaseService(database);
Layer layer = spatialService.getLayer(osm);
LayerIndexReader spatialIndex = layer.getIndex();

क्या मैं इसे गुणों से नोड्स खोजने के लिए उपयोग कर सकता हूं?

और बिंदुओं के बीच सबसे छोटा रास्ता खोजने के लिए मुझे एक डिज्कास्ट्रा एल्गोरिदम मिला

PathFinder finder = GraphAlgoFactory.dijkstra(
        Traversal.expanderForTypes( ExampleTypes.MY_TYPE, Direction.BOTH ), "cost" );
WeightedPath path = finder.findSinglePath( nodeA, nodeB );

सवाल यह है कि मेरे रिश्ते के प्रकार क्या हैं ??? मुझे लगता है कि यह आगे बढ़ रहा है लेकिन मैं इसे कोड में कैसे शामिल करूं? क्या मुझे आगे के साथ एक Enum बनाना है ???

क्या कोई मुझे सही प्रतिक्रिया दे सकता है और मुझे कुछ मदद दे सकता है?

ठीक है अंत में पता चला कि आईडी द्वारा नोड्स कैसे ढूंढें: डी बहुत मुश्किल नहीं है लेकिन मैंने लंबे समय तक खोज की: डी

धन्यवाद

1
क्या आप अपनी ओएसएम फाइलों के स्वरूपण के बारे में पूछ रहे हैं, या परत सूचकांक का उपयोग कैसे करें, या आपके ग्राफ में आपके रिश्ते के प्रकार क्या हैं? आप अधिक विशिष्ट होना चाहते हैं और एक प्रश्न चुन सकते हैं (यदि आप चाहें तो आप अलग-अलग से पूछ सकते हैं)। जैसा कि यह खड़ा है, मैं नहीं जानता कि कहां से शुरू करना है, मैं आपके प्रश्न का उत्तर देने की कोशिश कर रहा हूं।
जोड़ा लेखक jjaderberg, स्रोत

1 उत्तर

मैं कुछ टिप्पणियां कर सकता हूं:

  • हम वर्तमान में ओएसएम आयातक में ल्यूसीन इंडेक्स में नाम या टैग नहीं जोड़ते हैं, लेकिन यह एक अच्छा विचार है।
  • क्या किया जाता है आरटीआई इंडेक्स में सभी ज्यामिति (Poi, सड़कों, बहुभुज, आदि) जोड़ रहा है। यह वह सूचकांक है जिसे आपने वापस ले लिया था जब आपने layer.getIndex() कहा था। इस अनुक्रमणिका का उपयोग क्षेत्रों के भीतर चीजों को खोजने के लिए किया जा सकता है, और सूचकांक खोजते समय ज्यामिति (नाम या टैग) के गुणों द्वारा फ़िल्टर भी कर सकता है। नाम से कुछ ढूंढने के लिए शायद यह आपकी सबसे अच्छी शर्त है। इसके लिए दो विकल्पों के लिए नीचे देखें।
  • ओएसएम मॉडल में रूट ढूंढना मामूली नहीं है, क्योंकि वर्तमान मॉडल ओएसएम पूर्णता के लिए डिज़ाइन किया गया है, जिसमें सभी ओएसएम-नोड्स एक विशाल कनेक्टेड नेटवर्क में वास्तविक नोड्स के रूप में प्रदर्शित होते हैं जिसमें सभी ज्यामिति (केवल सड़कों नहीं) शामिल हैं। ग्राफ जटिल है, और एक ट्रैवर्स को यह जानने की आवश्यकता होगी कि मार्ग खोजने के लिए इसे कैसे पार किया जाए। यह अगले संबंधों के रूप में सरल नहीं है। उदाहरण के लिए देखें 13 और 15 http://www.slideshare.net/craigtaverner/neo4j-spatial-backing-a-gis-with-a-true-graph-database । प्रत्येक पंक्ति खंड में लंबाई होती है, लेकिन जो आप वास्तव में चाहते हैं वह एक सरल ग्राफ है जिसमें केवल चौराहे के बिंदुओं के लिए नोड्स होते हैं, और इन बिंदुओं के बीच कुल ड्राइव दूरी के लिए एकल संबंध होते हैं। यह ग्राफ वहां नहीं है, लेकिन ओएसएम आयातक द्वारा जोड़ा जा सकता है।

अंत में, नाम से पीओआई खोजने के लिए दो सुझाव। कोई एक:  गतिशील परतें  - या geopipes

गतिशील परतों के लिए आप या तो सीक्यूएल सिंटैक्स या कुंजी, वैल्यू जोड़े (टैग के लिए) का उपयोग कर सकते हैं। प्रत्येक के उदाहरणों के लिए 81 और 84 देखें https://github.com/neo4j/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/TestDynamicLayers.java । यह दृष्टिकोण आरटीआर से कॉलबैक में ट्रैवर्सल के दौरान नाम के परीक्षण की अनुमति देता है।

GeoPipes के लिए, आप एक स्ट्रीम को परिभाषित करते हैं, और आरटीआई द्वारा लौटाई गई प्रत्येक ऑब्जेक्ट को अगले फ़िल्टर में भेज दिया जाएगा। यह गतिशील परतों के समान प्रदर्शन होना चाहिए, और उपयोग करने के लिए थोड़ा अधिक सहज होना चाहिए। उदाहरण के लिए https://github.com/neo4j/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/pipes/GeoPipesTest.java । ये दोनों नाम से सड़कों की खोज करते हैं।

3
जोड़ा
नमस्ते उत्तर के लिए बहुत उपयोगी धन्यवाद लेकिन इसका मतलब क्या है "यह ग्राफ वहां नहीं है, लेकिन ओएसएम आयातक द्वारा जोड़ा जा सकता है।" क्या ऐसा करने का कोई तरीका है या क्या मुझे इसे स्वयं लिखने की ज़रूरत है?
जोड़ा लेखक user3042984, स्रोत
हां, जैसा कि @ user3042984 द्वारा इंगित किया गया है, मेरा वाक्यांश "ग्राफ वहां नहीं है" का अर्थ केवल रूटिंग ग्राफ़ नहीं है। ओएसएम ग्राफ मॉडल निश्चित रूप से वहाँ है। लेकिन आपको खुद को रूटिंग ग्राफ़ जोड़ने की आवश्यकता होगी, शायद पहचान किए गए चौराहे नोड्स के बीच केवल अतिरिक्त रूटिंग संबंध।
जोड़ा लेखक Craig Taverner, स्रोत
@ user3042984 neo4j-स्थानिक परियोजना में एक वर्ग OSMImporter.java है जिसका उपयोग एक विशिष्ट संरचना में neo4j डीबी को ओएसएम डेटा आयात करने के लिए किया जाता है। यह संरचना मार्ग खोजने के लिए अच्छा नहीं है। लेकिन इस बिंदु से शुरू करने का यह एक अच्छा तरीका है, इस कोड पर आधार, अपनी खुद की (सरल) संरचना बनाएं और इसे neo4j पर आयात करें।
जोड़ा लेखक fantom, स्रोत