回答:
README.TXTによると:
APIノート
ジオフィールドフィールドには、ストアである地理データに関する9列の情報が含まれます。その中心にあるのは「wkt」列で、「Well Known Text」(WKT)形式で完全なジオメトリを格納します。他のすべての列は、WKT列から派生したメタデータです。列は次のとおりです。
'geom'生の値。デフォルトでは、WKBとして保存され、WKTとして読み込まれます。
'geo_type'ジオメトリのタイプ(ポイント、ラインストリング、ポリゴンなど)
'lat'重心(緯度またはY)
'lon'重心(経度またはX)
'top'境界ボックスの上(緯度または最大Y)「下」の境界ボックス下部(緯度または最小Y)
「左」の境界ボックス左(経度または最小X)
「右」境界ボックスの右(経度または最大X)
「geohash」geohashのgeom列の値と同等提供されたウィジェットを使用してジオフィールドが保存されると、依存値を計算するために、これらの値はgeofield_compute_values関数を介して渡されます。デフォルトでは、依存値はWKTに基づいて計算されますが、他の列に基づいて値を計算するためにオーバーライドされる場合があります。たとえば、geofield_compute_valuesは次のように呼び出すことができます。
geofield_compute_values($ values、 'latlon');
これにより、緯度/経度列に基づいてwktフィールド(および他のすべてのフィールド)が計算され、ポイントが得られます。開発者は、node_loadとnode_saveを使用してgeofield情報を変更するかどうかを覚えておくことが重要です。すべての列を一貫させるために、geofield_compute_valuesを介して変更されたgeofieldインスタンスを必ず実行してください。
これは次のように変換されます。
$spot->field_coordinates[LANGUAGE_NONE][0] = geofield_compute_values(
array(
'lat' => $venue->location->lat,
'lon' => $venue->location->lng,
), GEOFIELD_INPUT_LAT_LON);
このような値を使用して、geofieldのデータをプログラムで更新できました。
$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;
{
"nid":123,
"field_position":{"und":[
{"geom":{"lat":"42.2808256","lon":"-83.7430378"}}
]}
}
どちらの場合も、geofieldのウィジェットはLatitude / Longitude
であるため、他のウィジェットの結果は、特にServicesモジュールでは異なる場合があります。
geohash
。確認してください。ありがとうございます。
geohash
値に慣れていませんが、おそらくgeofield_compute_values
上記の回答で述べた関数を使用して、lat / lngからその値を取得できます。
推測:node-edit-form
ジオフィールドマジックを発動させるために、プロセスにノードを実行することができます。
見て)(drupal_form_submit、観測$form_state['values']
ノード・タイプの「コンテンツを追加」フォームの通常、手動提出からとして、それを送信するために、プログラムでそれらを再構築するdrupal_form_submit()
機能。
それはうまくいくのだろうか...
一方、あなたは自分のgeofieldの値の構造を検査し、プログラム的に活用することを再構築できたgeocoder()
の機能ジオコーダーモジュールのAPIを。
https://www.drupal.org/node/905814#comment-4931016で説明されている方法を使用できます。
データベースのバックアップを取る
コンテンツを表示します。フィルターを追加して、ジオフィールドの緯度が空のコンテンツを選択します。
ビューの一括操作モジュールを追加し、一括操作フィールドを追加して、アクションとして「任意のphpを実行」を選択します。
$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);
このアプローチは、日付ポップアップ表示を使用している日付フィールドが空になることを除いて完全に機能します。日付フィールドがある場合は注意してください。
また、Googleジオコーダーには、ジオコードするアドレスが24時間という2500時間の制限があることに注意してください。
cronを使用してこれとまったく同じことを行うDrupal 7モジュールがあります。cronの実行ごとに処理するノードの数を設定し、それを起動するコンテンツタイプを選択できます。
チェックしてください:https : //www.wutime.com/downloads/automatic-geofield-update-to-render-gmaps/
geohash
ますか?