function farm_map_combine_geoms in farmOS 7
Combine multiple WKT geometries into a single GeoPHP geometry object.
Parameters
array $geoms: An array of geometry strings in WKT format.
Return value
object|bool Returns a GeoPHP object, or FALSE on failure.
3 calls to farm_map_combine_geoms()
- farm_livestock_move_form in modules/
farm/ farm_livestock/ farm_livestock.farm_quick.move.inc - Form for adding animal movement logs.
- farm_livestock_move_form_submit in modules/
farm/ farm_livestock/ farm_livestock.farm_quick.move.inc - Submit function for movement quick form.
- farm_map_geofield_populate in modules/
farm/ farm_map/ farm_map.module - Helper function for populating the geometry field of an entity.
File
- modules/
farm/ farm_map/ farm_map.geo.inc, line 87 - Farm map geometry functions.
Code
function farm_map_combine_geoms($geoms = array()) {
// If no geometries were found, return an empty geometry.
if (empty($geoms)) {
return FALSE;
}
// Load the GeoPHP library.
geophp_load();
// If there is more than one geometry, we will wrap it all in a
// GEOMETRYCOLLECTION() at the end.
$geometrycollection = FALSE;
if (count($geoms) > 1) {
$geometrycollection = TRUE;
}
// Build an array of WKT strings.
$wkt_strings = array();
foreach ($geoms as &$geom) {
// If the geometry is empty, skip it.
if (empty($geom)) {
continue;
}
// Convert to a GeoPHP geometry object.
$geometry = geoPHP::load($geom, 'wkt');
// If this is a geometry collection, multi-point, multi-linestring, or
// multi-polygon, then extract its components and add them individually to
// the array.
$multigeometries = array(
'GeometryCollection',
'MultiPoint',
'MultiLineSting',
'MultiPolygon',
);
if (in_array($geometry
->geometryType(), $multigeometries)) {
// Iterate through the geometry components and add each to the array.
$components = $geometry
->getComponents();
foreach ($components as $component) {
$wkt_strings[] = $component
->asText();
}
// Set $geometrycollection to TRUE in case there was only one geometry in
// the $geoms parameter of this function, so that we know to wrap the WKT
// in a GEOMETRYCOLLECTION() at the end.
$geometrycollection = TRUE;
}
else {
$wkt_strings[] = $geometry
->asText();
}
}
// Combine all the WKT strings together into one.
$wkt = implode(',', $wkt_strings);
// If the WKT is empty, bail.
if (empty($wkt)) {
return FALSE;
}
// If there is more than one geometry, wrap them all in a geometry collection.
if ($geometrycollection) {
$wkt = 'GEOMETRYCOLLECTION (' . $wkt . ')';
}
// Convert to a final GeoPHP geometry object and reduce the geometry.
$geometry = geoPHP::load($wkt, 'wkt');
$geometry = geoPHP::geometryReduce($geometry);
// Return the geometry.
return $geometry;
}