я использую PHPShapefile библиотека для генерации KML и отображения данных на карту Google, но пока дело доходит до формы «Точка», она не работает и не генерирует KML для того же.
Вот фрагмент кода для многоугольной фигуры, помогите мне создать для фигуры Point.
//this shape data i'm fetching from shapefile library.
$shp_data = $record->getShpData();
if (isset($shp_data['parts'])) {
$counter1 = 0;
if ($shp_data['numparts']) {
$polygon_array['polygon']['status'] = 'multi-polygon';
} else {
$polygon_array['polygon']['status'] = 'single-polygon';
}
$polygon_array['polygon']['total_polygon'] = $shp_data['numparts'];
foreach ($shp_data['parts'] as $polygon) {
foreach ($polygon as $points) {
$counter = 0;
$polygon_string = '';
while ($counter < count($points)) {
if ($counter == 0) {
$polygon_string = $points[count($points) - 1]['x'] . ',';
$polygon_string .= $points[$counter]['y'] . ' ' . $points[$counter]['x'] . ',';
} else if ($counter == count($points) - 1) {
$polygon_string .= $points[$counter]['y'];
} else {
$polygon_string .= $points[$counter]['y'] . ' ' . $points[$counter]['x'] . ',';
}
$counter = $counter + 1;
}
$polygon_single[$counter1] = $polygon_string;
$polygon_array['polygon']['view'] = $polygon_single;
$counter1 = $counter1 + 1;
}
}
$arr[$i] = $polygon_array;
$i++;
}
Это условие не будет выполнено для точечной геометрии:
if (isset($shp_data['parts'])) {
К сожалению, похоже, что используемая вами библиотека ShapeFile PHP не имеет надлежащего способа определения типа геометрии.
В качестве обходного пути, если вышеуказанная проверка не удалась, вы можете проверить, имеет ли геометрия x
а также y
координата вот так:
if (isset($shp_data['parts'])) {
// probably a polygon
// ... your code here ...
} elseif(isset($shp_data['y']) && isset($shp_data['x'])) {
// probably a point
$point = [];
$point["coordinates"] = $shp_data['y'] .' '. $shp_data['x'];
$arr[$i]['point'] = $point;
}
Это должно привести к массиву, который выглядит примерно так:
[0]=>
array(1) {
["point"]=>
array(1) {
["coordinates"]=>
string(34) "0.75712656784493 -0.99201824401368"}
}
Других решений пока нет …