在 Drupal 8 中以编程方式保存地理字段

Jim*_*son 1 drupal geospatial coordinates drupal-8

我已经阅读了很多资料,我geofield_compute_values()在尝试以编程方式在 Drupal 中保存坐标时应该使用该函数。

但是它对我不起作用,该函数在我使用的 Drupal 8.5.2 中未定义。

我已经使用 composer 安装了 geofield,我可以像往常一样在管理区域中使用它,并且在那里保存没有问题。

以下是我尝试过的一些示例,第一个示例给了我undefined function geofield_compute_values()

$geofield_data = geofield_compute_values([
    'lat' => $lat,
    'lon' => $lon,
], GEOFIELD_INPUT_LAT_LON);

$cbisProduct->set('field_koordinater', $geofield_data);
Run Code Online (Sandbox Code Playgroud)

我也尝试过,但没有成功,也没有错误:

$geofield = [
    'geom' => "POINT (" . $lon . " " . $lat . ")",
    'geo_type' => 'point',
    'lat' => $lat,
    'lon' => $lon,
    'left' => $lon,
    'top' => $lat,
    'right' => $lon,
    'bottom' => $lat,
];

$cbisProduct->set('field_koordinater', $geofield);
Run Code Online (Sandbox Code Playgroud)

osm*_*man 5

似乎您正在尝试使用geofield_compute_values()函数,该函数在 7.x 版本中可用,但在 8.x 中不可用

你应该看看wkt_generator服务。IE

<?php $wktGenerator = \Drupal::service('geofield.wkt_generator'); ?>
Run Code Online (Sandbox Code Playgroud)

我没有试过这个,但这样的事情应该有效:

<?php

$point = [
  'lat' => $request->get('lat'), 
  'lon' => $request->get('lon'),
];
$value = \Drupal::service('geofield.wkt_generator')->WktBuildPoint($point);

$node->field_koordinater->setValue($value);
Run Code Online (Sandbox Code Playgroud)

此外,WktGeneratorTest.phpGeofieldItemTest.php文件可能是了解如何在您的实现中使用该服务的良好开端。