- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
public function cutPoly($business_id)
{
$done = [];
$red = Isochrone::where('business_id', $business_id)->where('color', 'red')->selectRaw('id, color, ST_AsText(path) as p_path')->get()->first();
$blue = Isochrone::where('business_id', $business_id)->where('color', 'blue')->selectRaw('id, color, ST_AsText(path) as p_path')->get()->first();
$green = Isochrone::where('business_id', $business_id)->where('color', 'green')->selectRaw('id, color, ST_AsText(path) as p_path')->get()->first();
if ($red && $blue) {
if (!$red['p_path'] || !$blue['p_path']) {
$done['red'] = 'already';
} else {
$isoString = 'POLYGON((';
$blue_path = $blue['p_path'];
$red_path = $red['p_path'];
if (!array_key_exists('lat', $blue['p_path'][0])) {
$blue_path = $blue['p_path'][0];
}
if (!array_key_exists('lat', $red['p_path'][0])) {
$red_path = $red['p_path'][0];
}
$isoString .= implode(',', array_map(function ($entry) {
return $entry['lat'] . ' ' . $entry['lng'];
}, $red_path))
. '),('.
implode(',', array_map(function ($entry) {
return $entry['lat'] . ' ' . $entry['lng'];
}, $blue_path))
.'))';
Isochrone::where('business_id', $business_id)->where('color', 'red')->update(['path' => \DB::raw("ST_GeomFromText('$isoString')")]);
$done['red'] = 'ok';
}
} else if ($red && $green) {
if (!$red['p_path'] || !$green['p_path']) {
$done['red'] = 'already';
} else {
$isoString = 'POLYGON((';
$green_path = $green['p_path'];
$red_path = $red['p_path'];
if (!array_key_exists('lat', $green['p_path'][0])) {
$green_path = $green['p_path'][0];
}
if (!array_key_exists('lat', $red['p_path'][0])) {
$red_path = $red['p_path'][0];
}
$isoString .= implode(',', array_map(function ($entry) {
return $entry['lat'] . ' ' . $entry['lng'];
}, $red_path))
. '),('.
implode(',', array_map(function ($entry) {
return $entry['lat'] . ' ' . $entry['lng'];
}, $green_path))
.'))';
Isochrone::where('business_id', $business_id)->where('color', 'red')->update(['path' => \DB::raw("ST_GeomFromText('$isoString')")]);
$done['red'] = 'ok green';
}
}
if ($blue && $green) {
if (!$blue['p_path'] || !$green['p_path']) {
$done['blue'] = 'already';
} else {
$isoString = 'POLYGON((';
$green_path = $green['p_path'];
$blue_path = $blue['p_path'];
if (!array_key_exists('lat', $green['p_path'][0])) {
$green_path = $green['p_path'][0];
}
if (!array_key_exists('lat', $blue['p_path'][0])) {
$blue_path = $blue['p_path'][0];
}
$isoString .= implode(',', array_map(function ($entry) {
return $entry['lat'] . ' ' . $entry['lng'];
}, $blue_path))
. '),('.
implode(',', array_map(function ($entry) {
return $entry['lat'] . ' ' . $entry['lng'];
}, $green_path))
.'))';
Isochrone::where('business_id', $business_id)->where('color', 'blue')->update(['path' => \DB::raw("ST_GeomFromText('$isoString')")]);
$done['blue'] = 'ok';
}
}
return $done;
}
phpBidlokoder2 21.01.2020 19:27 # 0
Steve_Brown 21.01.2020 19:56 # +2
AnalBoy 21.01.2020 20:15 # +1
1024-- 21.01.2020 20:55 # 0
О, бизнес-логика!