প্রোগ্রামিয়ালি জিওফিল্ড ডেটা আপডেট করুন


9

আমার সেটআপটি হ'ল:

  1. ঠিকানা ডেটা সংগ্রহ করার জন্য নোডগুলিতে ঠিকানা ক্ষেত্র collect
  2. জিফিল্ড "অন্য ক্ষেত্রের জিওকোড" ব্যবহার করে অ্যাড্রেসফিল্ড এবং গুগল জিওকোডার বেছে নিচ্ছে

আমি যখন ইউআইতে কোনও নোড সম্পাদনা / সংরক্ষণ করি তখন ডেটা জিওকোড হয়। তবে আমার হাজার হাজার নোড রয়েছে এবং প্রতিটি নোডে জিওকোড তথ্য আপডেট করার জন্য একটি স্ক্রিপ্ট লেখার চেষ্টা করছি।

আমি সমস্ত নোড লোড করে একটি নোড_সেভ () করার চেষ্টা করেছি তবে জিওকোড হুকগুলিতে আগুন লাগেনি।

আমি কীভাবে জিওফিল্ডের তথ্য প্রোগ্রামে আপডেট করতে পারি? আমি ব্যবহার করতে পারেন একটি হুক আছে?

উত্তর:


4

README.TXT অনুসারে:

এপিআই নোটস

জিওফিল্ড ক্ষেত্রগুলিতে ভৌগলিক> ডেটা সম্পর্কিত তথ্য সম্পর্কিত নয়টি কলাম রয়েছে। এটির কেন্দ্রস্থলে 'ডাব্লুপিটি' কলাম রয়েছে যেখানে এটি 'সুপরিচিত পাঠ্য' (ডাব্লুকেটি) ফর্ম্যাটে পুরো জ্যামিতি সঞ্চয় করে। অন্যান্য সমস্ত কলামগুলি ডাব্লুকেটি কলাম থেকে উত্পন্ন মেটাডেটা। কলামগুলি নিম্নরূপ:

'জিওম' কাঁচা মান। ডিফল্টরূপে,
ডাব্লুকেবি হিসাবে সঞ্চিত, ডাব্লুকেটি 'জিও_ টাইপ' জ্যামিতির ধরণ (পয়েন্ট, লাইনস্ট্রিং, বহুভুজ ইত্যাদি)
'ল্যাট' সেন্ট্রয়েড (অক্ষাংশ বা Y)
'দীর্ঘ' সেন্ট্রয়েড (দ্রাঘিমাংশ বা এক্স)
'শীর্ষ' বাউন্ডিং বক্স শীর্ষ ( অক্ষাংশ বা সর্বোচ্চ Y) 'নীচে' বাউন্ডিং বক্স নীচে (অক্ষাংশ বা ন্যূনতম Y)
'বাম' বাউন্ডিং বক্স বাম (দ্রাঘিমাংশ বা নূন্যতম এক্স)
'ডান' বাউন্ডিং বক্স ডানদিকে (দ্রাঘিমাংশ বা সর্বাধিক এক্স)
'জিওহ্যাশ' জিওহ্যাশ কলাম মানের সমতুল্য

যখন কোনও জিওফিল্ড সরবরাহিত উইজেটগুলি ব্যবহার করে সংরক্ষণ করা হয়, নির্ভরশীল মানগুলি গণনা করার জন্য এই মানগুলি জিওফিল্ড_কম্পিউট_ভ্যালু ফাংশনটির মধ্য দিয়ে যায়। ডিফল্টরূপে নির্ভরশীল মানগুলি WKT এর উপর ভিত্তি করে গণনা করা হয়, তবে এটি অন্যান্য কলামের উপর ভিত্তি করে মানগুলি গণনা করতে ওভারড্রেন হতে পারে। উদাহরণস্বরূপ, জিওফিল্ড_কম্পিউট_ভ্যালুগুলিকে এর মতো বলা যেতে পারে:

জিওফিল্ড_কম্পিউট_ভ্যালু ($ মান, 'ল্যাটলন');

এটি ল্যাট / লম্বা কলামগুলির উপর ভিত্তি করে wkt ক্ষেত্র (এবং অন্যান্য সমস্ত ক্ষেত্র) গণনা করবে, যার ফলে একটি বিন্দু হবে in বিকাশকারী হিসাবে এটি মনে রাখা জরুরী যে আপনি জিওফিল্ডের তথ্য নোড_লোড এবং নোড_সেভ ব্যবহার করে পরিবর্তন করেন কিনা। সমস্ত কলামগুলিকে সামঞ্জস্যপূর্ণ করার জন্য জেফিল্ড_কম্পিউট_ভ্যালুগুলির মাধ্যমে যেকোন পরিবর্তিত জিওফিল্ড দৃষ্টান্ত চালানো নিশ্চিত করুন।

এটি অনুবাদ করে:

      $spot->field_coordinates[LANGUAGE_NONE][0] = geofield_compute_values(
          array(
              'lat' => $venue->location->lat, 
              'lon' => $venue->location->lng,
      ), GEOFIELD_INPUT_LAT_LON);

2

এর মতো মানগুলি ব্যবহার করে, আমি একটি জিওফিল্ডের ডেটা প্রোগ্রামগতভাবে আপডেট করতে সক্ষম হয়েছি :

পিএইচপি

$lat = 42.281646;
$lon = -83.744222;
$geofield = array(
  'geom' => "POINT ($lon $lat)",
  'geo_type' => 'point',
  'lat' => $lat . "000000",
  'lon' => $lon . "000000",
  'left' => $lon . "000000",
  'top' => $lat . "000000",
  'right' => $lon . "000000",
  'bottom' => $lat . "000000"
);
$lang = $node->language;
$node->field_position[$lang][0] = $geofield;

পরিষেবাদি মডিউল জন্য JSON

{
  "nid":123,
  "field_position":{"und":[
    {"geom":{"lat":"42.2808256","lon":"-83.7430378"}}
  ]}
}

উভয় ক্ষেত্রেই জিওফিল্ডের জন্য উইজেটটি Latitude / Longitudeতাই ফলাফলগুলি অন্যান্য উইজেটের জন্য আলাদা হতে পারে, বিশেষত পরিষেবাদি মডিউলটির সাথে।


এটি কি আপডেট করে geohash?
বেরো

আপনি কী বলতে চাইছেন তা আমি জানি না geohash, দয়া করে নিশ্চিত করুন, ধন্যবাদ।
tyler.frankenstein

ওহে. ক্রিপ্টিক মন্তব্যের জন্য দুঃখিত। দ্রুপালের সর্বশেষ ক্ষেত্র হিসাবে node__field_geo_fieldএটি রয়েছে geohash(উপরের উত্তরের এপিআই দেখুন)। এটি একটি ভৌগলিক অঞ্চলের একটি আসকি উপস্থাপনা । এগুলি বাধ্যতামূলক বা alচ্ছিক কিনা তা আমি জানি না, তবে আমি সেগুলি উত্পন্ন করার জন্য একটি পাইথন প্রোগ্রাম তৈরি করতে যাচ্ছিলাম এবং ব্যাকএন্ড ড্রুপাল ডাটাবেসে সন্নিবেশ করানোর জন্য (ল্যাট / লং সহ) সন্নিবেশ করছিলাম।
বেরো

জানানোর জন্য ধন্যবাদ. আমি নিজেও geohashমানটির সাথে অপরিচিত , তবে আপনি সম্ভবত geofield_compute_valuesউত্তর / এলএনজি থেকে এই মানটি পেতে উপরের উত্তরে উল্লিখিত ফাংশনটি ব্যবহার করতে পারেন ।
tyler.frankenstein

1

একটি বুনো অনুমান: আপনি node-edit-formজিওফিল্ড-যাদুটি নিক্ষেপ করতে প্রক্রিয়াটি দিয়ে আপনার নোডটি চালাতে পারেন ।

কটাক্ষপাত আছে drupal_form_submit () , পালন করা $form_state['values']আপনার নোড টাইপ এর "অ্যাড বিষয়বস্তু" ফর্ম একজন সাধারণ, ম্যানুয়াল জমা থেকে এবং তাদের মধ্যে এটা পাঠানোর জন্য প্রোগ্রামেটিক্যালি পুনর্নির্মাণের drupal_form_submit()ফাংশন।

আমি ভাবছি যদি এটি কাজ করে ...

অন্যদিকে, আপনি শুধু আপনার geofield মান কাঠামো পরিদর্শন এবং পুনর্নির্মাণের যে প্রোগ্রামের মাধ্যমে ওঠানামা পারে geocoder()ফাংশন geocoder মডিউল এর API- টি।


0

আপনি https://www.drupal.org/node/905814#comment-4931016 এ বর্ণিত পদ্ধতিটি ব্যবহার করতে পারেন ।

  1. একটি ডাটাবেস ব্যাকআপ নিন

  2. আপনার বিষয়বস্তু দেখুন। জিওফিল্ড অক্ষাংশ শূন্য রয়েছে এমন সামগ্রী নির্বাচন করতে একটি ফিল্টার যুক্ত করুন।

  3. ভিউজ বাল্ক অপারেশন মডিউল যুক্ত করুন, একটি বাল্ক অপারেশন ক্ষেত্র যুক্ত করুন এবং ক্রিয়া হিসাবে বেছে নিন "সালিশ পিএইচপি চালানো"।

    $test = node_load($entity->nid);    
    module_load_include('inc', 'node', 'node.pages');    
    $test_state['values']['op'] = t('Save');    
    drupal_form_submit('NODENAME_node_form', $test_state, $test);

তারিখের পপআপ প্রদর্শন ব্যবহার করা তারিখের ক্ষেত্রগুলি খালি হয়ে যাওয়া ব্যতীত এই পদ্ধতিটি পুরোপুরি কাজ করে, তাই আপনার যদি তারিখের ক্ষেত্র থাকে তবে সাবধান হন।

এছাড়াও খেয়াল করুন যে গুগল জিওকোডারটির জিওকোডের 2500 ঠিকানার 24 ঘন্টা সীমা রয়েছে।


0

একটি ড্রুপাল 7 মডিউল রয়েছে যা ক্রোন ব্যবহার করে আপনার জন্য এই সঠিক কাজটি করে। প্রতি ক্রোন রান প্রক্রিয়াকরণের জন্য আপনি নোডের সংখ্যা সেট করতে পারেন এবং কী ধরণের বিষয়বস্তু এতে আগুন লাগাতে পারে তা নির্বাচন করতে পারেন।

এটি পরীক্ষা করে দেখুন: https://www.wutime.com/downloads/automatic-geofield-update-to-render-gmaps/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.