मैं एक मॉडल का निर्माण कर रहा हूं जो मुझसे नेटलोगो को शेपफाइल्स लोड करने की मांग करता है। मैंने वह कर लिया है और जो नक्शा दृश्य पर दिखाई देता है वह उससे मेल खाता है जो उसे माना जाता है। समस्या यह है कि शेपफाइल पैच को ओवरलैप नहीं कर रहा है। मेरी शेपफाइल्स में x|y|विशेषता शामिल है और मैंने फाइलों में लगभग ८००,००० लाइनें बनाई हैं। आदर्श बात यह थी कि प्रत्येक पंक्ति एक पैच के अनुरूप थी, लेकिन जब मैं गिनती पैच निष्पादित करता हूं तो इसमें केवल 1089 होता है। और इससे भी बदतर, प्रत्येक पैच NaN को पुनर्प्राप्त करता है जब मैं विशेषता मान मांगता हूं। मैं उस कोड का हिस्सा पेस्ट करूंगा जो इस मुद्दे के लिए मायने रखता है:

globals [ mintempcm-dataset
  maxtemphm-dataset
  precipitation-dataset
  meantemp-dataset
  color-list
]

patches-own [
  mintempcm
  maxtemphm
  meantemp
  precipitation
]
to setup
  ca

  gis:load-coordinate-system (word "WGS_84_Geographic.prj")
  set maxtemphm-dataset gis:load-dataset "mxtwm.shp"


  gis:set-world-envelope (gis:envelope-union-of 
    (gis:envelope-of maxtemphm-dataset)

  )
  gis:apply-coverage maxtemphm-dataset "MAXTEMPHM" maxtemphm

  ask patches[

    set maxtemphm maxtemphm

  ]

  gis:set-drawing-color blue
  gis:draw maxtemphm-dataset 1


  reset-ticks
end

क्या मुझे कुछ याद आ रहा है या कुछ गलत कर रहा हूँ? स्पष्ट करने के लिए, मुझे फ़ाइल के प्रत्येक समन्वय को पैच के अनुरूप बनाना होगा और विशेषता को पैच में पास करना होगा।

धन्यवाद।

1
Paulo Sergio 19 अप्रैल 2018, 19:52

1 उत्तर

सबसे बढ़िया उत्तर

आप ऐसा करने के लिए gis:intersecting का उपयोग कर सकते हैं, लेकिन आप जो करना चाहते हैं उसके लिए यह बहुत कुशल नहीं है। उदाहरण के लिए, मैंने इस साइट से एयरपोर्ट डेटासेट डाउनलोड किया है, जिसमें कुछ मुफ्त जीआईएस डेटा। हवाई अड्डे के डेटासेट (ne_10m_airports.shp) में प्रत्येक हवाई अड्डे के लिए बिंदु डेटा और प्रत्येक हवाई अड्डे के बारे में कुछ जानकारी होती है। पैच को कुछ डेटा असाइन करने के लिए, नीचे देखें- टिप्पणियों में कुछ जानकारी:

extensions [ gis ]

globals [ airports ]

patches-own [ airport-name ]

to setup
  ca
  resize-world 0 125 0 50
  set-patch-size 5

  ; Load the dataset
  set airports gis:load-dataset "ne_10m_airports.shp"
  gis:set-world-envelope gis:envelope-of airports

  ; For each point listed in 'airports', ask any patches
  ; that are intersecting that point to take the name
  ; of the airport that intersects them (since these are points,
  ; intersection in this case means the airport coordinates
  ; lie within the patch.

  foreach gis:feature-list-of airports [
    x ->
    ask patches gis:intersecting x [
      set airport-name gis:property-value x "NAME"
      set pcolor red
    ]
  ]

  reset-ticks
end

आप इसे अपने तापमान डेटासेट से "MAXTEMPHM" मान के साथ कर सकते हैं। हालांकि, आपका नेटलोगो दुनिया का आकार कुछ ऐसा है जिसके साथ आपको यह सुनिश्चित करने के लिए खेलना होगा कि पैच की संख्या आपके पास मौजूद अंकों की संख्या से मेल खाती है- gis:set-world-envelope केवल जीआईएस डेटासेट को नेटलोगो दुनिया में संरेखित करता है, यह नहीं करता है मौजूद पैच को प्रभावित न करें। यदि आपके पास ८००००० तापमान बिंदु हैं जिन्हें आप लोड करना चाहते हैं, तो आपको अपनी नेटलोगो दुनिया को ८९५ पैच वर्ग के आसपास बनाना होगा, जो एक बहुत बड़ी दुनिया है। जैसा कि ऊपर बताया गया है, तापमान डेटा लोड होने में जबकि का समय लगेगा। यह रास्टर डेटासेट और gis:apply-raster का उपयोग करने के लिए चीजों को सरल और अधिक कुशल (और काफ़ी तेज़) बना देगा।

1
Luke C 21 अप्रैल 2018, 19:09