На счет php не сталкивался с такой проблемой, но на js можно сделать с помощью библиотеки
turfjs
let turf = require('@turf/turf');
let polygon1 = turf.polygon([[[0,0], [0,1], [1,1], [1,0], [0,0]]]);
let polygon2 = turf.polygon([[[0.5,0.5], [0.5,1.5], [1.5,1.5], [1.5,0.5], [0.5,0.5]]]);
// С помощью booleanIntersects можно понять что есть пересечения полигонов
if (turf.booleanIntersects(polygon1, polygon2)) {
let merged = turf.union(polygon1, polygon2);
console.log(merged)
} else {
console.log('Полигоны не пересекаются');
}