2016-03-29 47 views
5

मैं वोरोनोई कोशिकाओं (https://github.com/gorhill/Javascript-Voronoi) की गणना करने के लिए फॉर्च्यून के एल्गोरिदम के जावास्क्रिप्ट कार्यान्वयन का उपयोग कर रहा हूं। गणना करने के लिए मेरी साइट मानचित्र पर बिंदु हैं (इसलिए (lat,lng))। मैंने पहली बार प्रक्षेपण (lat,lng) -> (x,y) बनाया, फिर मैंने voronoi कोशिकाओं की गणना की और आधे किनारों के प्रक्षेपण को दूसरी तरफ बनाया।
यह ठीक काम करता है, मैं परिणाम पुस्तिका का उपयोग करके परिणाम प्रदर्शित करता हूं लेकिन मुझे एक और चीज करने की आवश्यकता है।आसन्न बहुभुजों को कैसे विलय करें

प्रत्येक साइट मैं शुरू में गणना एक आईडी निर्भर करता है, मैं आईडी के आधार पर voronoi कोशिकाओं पुन: वर्गीकृत और मैं अंत में, इस तरह लग रही एक मानक डेटा संरचना के साथ एक आईडी के लिए:

{ 
    "type": "FeatureCollection", 
    "features": [ 
    { 
     "type": "Feature", 
     "geometry": { 
     "type": "Polygon", 
     "coordinates": [[ 
      [9.994812, 53.549487], 
      [10.046997, 53.598209], 
      [10.117721, 53.531737], 
      [9.994812, 53.549487] 
     ]] 
     } 
    }, { 
     "type": "Feature", 
     "geometry": { 
     "type": "Polygon", 
     "coordinates": [[ 
      [10.000991, 53.50418], 
      [10.03807, 53.562539], 
      [9.926834, 53.551731], 
      [10.000991, 53.50418] 
     ]] 
     } 
    } 
    ] 
}; 

बहुभुज का एक सेट (किसी दिए गए आईडी के लिए voronoi कोशिकाओं का आधा किनारा बनाया)।

मैं आईडी के आधार पर उन बहुभुज मर्ज करने के लिए की जरूरत है, मैं turf.merge() का उपयोग करने का इरादा है, लेकिन मैं टोपोलॉजी त्रुटियों

turf.min.js:13 Uncaught TopologyError: side location conflict 

इस पोस्ट (http://lists.refractions.net/pipermail/jts-devel/2009-March/002939.html) के आधार पर, मैं 10 से (lat,lng) जोड़ी पूर्णांक बनाना की कोशिश की है है^-14 से 10^-7 लेकिन यह वास्तव में काम नहीं किया था। कंकों की तलाश करने और उन्हें हटाने की कोशिश करने से पहले, मैंने कुछ डेटा नमूना मुद्रित किया और मुझे पता है कि अगर मैं फॉर्च्यून के एल्गोरिदम से अच्छा डेटा इस्तेमाल करता हूं तो मुझे खुद से पूछना है। जब मैं सभी आईडी के लिए सभी बहुभुज प्रदर्शित करते हैं, मैं सही चित्र है, लेकिन जब मैं एक आईडी के लिए सभी बहुभुज या कुछ बहुभुज एक आईडी के लिए मैं अधूरा चित्र के साथ खत्म प्रदर्शित:

part of the full diagram

का हिस्सा पूर्ण आरेख

एक आईडी

enter image description here

के लिए

enter image description here

आरेख का एक हिस्सा

किसी दिए गए आईडी के लिए दो "बहुभुज"

क्या किसी को यह पता है कि कम से कम एक सामान्य वर्टेक्स साझा करने वाले बहुभुज को कैसे विलय करना है? और टोपोलॉजी त्रुटि क्यों है?

संपादित करें: बहुभुज "अपूर्ण" (मैं पॉलीलाइन उपयोग कर रहा था) नहीं कर रहे हैं

enter image description here

मैं भी एक आसान नमूना पर करने की कोशिश की:

enter image description here

और फिर भी मिल गया त्रुटि:

Uncaught TopologyError: side location conflict [ (44.8220601, -0.5869532) ] 

तो यह कंक

+0

मैं इस पुस्तकालय का उपयोग किया है, लेकिन मैं किसी भी कोशिकाओं विलय करने के लिए दुर्भाग्य से, ताकि आप मदद नहीं कर सकता था नहीं था ... आप पोस्ट करने का प्रयास करना चाहिए:

यहाँ उनके सफल विलय दिखा एक बेला है यदि आप इसे एक बहुत ही साधारण मामले में पुन: पेश करने का प्रबंधन करते हैं तो यह प्रश्न जिथब रेपो पर एक बग के रूप में है। – deKajoo

+0

धन्यवाद, मैंने जिथब रेपो पर एक बग बनाया है। मुझे turf.union() – kwn

+0

के साथ एक ही समस्या का सामना करना पड़ता है क्या आप whit d3.js को आजमाते हैं? https://github.com/mbostock/d3/wiki/Geometry – cbertelegni

उत्तर

2

के कारण यह समस्या (या कम से कम न केवल) है, डेटा आपकी समस्या से पहले होने वाली प्रतीत होता है। से GeoJSON validator के माध्यम से GeoJSON को चलाने से दो त्रुटियां सामने आती हैं। पहला यह है कि आप प्रत्येक सुविधा के लिए केवल geometry ऑब्जेक्ट शामिल करते हैं, और जियोज़सन को यह आवश्यक है कि सभी सुविधाओं में properties ऑब्जेक्ट भी हो, भले ही यह खाली हो।दूसरा, और सबसे महत्वपूर्ण बात यह है कि एक वैध जियोज़न पॉलीगॉन एक बंद लूप होना चाहिए, जिसमें पहले और अंतिम बिंदुओं के समान निर्देशांक होंगे। यह दूसरी समस्या यह प्रतीत होती है कि टर्फ को इसकी त्रुटि फेंकने का कारण क्या है। एक बार अंगूठी को बंद करने के अंत में निर्देशांक के पहले सेट की प्रतिलिपि बनाई जाने के बाद बहुभुज सफलतापूर्वक विलय हो जाएंगे।

मानचित्र पर डेटा प्रदर्शित करने के बाद, यह भी स्पष्ट हो जाता है कि आपके अक्षांश और देशांतर को उलट दिया गया है। GeoJSON में समन्वय lon,lat होने चाहिए, और क्योंकि आपका lat,lon में है, बहुभुज हिंद महासागर के बीच में दिखाई देते हैं। एक बार यह सही हो जाने पर, वे सही जगह पर दिखाई देते हैं।

http://fiddle.jshell.net/nathansnider/p7kfxvk7/

+0

उत्तर के लिए धन्यवाद, मुझे बंद लूप के बारे में पता नहीं था । अक्षांश और देशांतर को उलट दिया जा रहा है, ऐसा इसलिए है क्योंकि डेटा फ्रांसीसी संस्थान से है और मानक है (लैट, लॉन) – kwn

+1

समन्वय रिवर्सल एक बहुत ही आम समस्या है, क्योंकि 'लैट, लोन' ज्यादातर स्थानों में मानक है दुनिया (और पत्रक में!), लेकिन चूंकि यह 'x, y'' के रूप में समन्वय को क्रमबद्ध करने के गणितीय सम्मेलन का सामना करता है, जीआईएस सॉफ़्टवेयर अक्सर 'लोन, लैट' का उपयोग करता है। – nathansnider

संबंधित मुद्दे