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)
似乎您正在尝试使用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.php和GeofieldItemTest.php文件可能是了解如何在您的实现中使用该服务的良好开端。