Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP - Generate kml from 'Point' shape

I'm using PHPShapefile library for generating KML and displaying data to the google map but while it comes to 'Point' shape its not working and not generating KML for same. Here is the code snippet for Polygon shape help me to create for Point shape.

//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++;
} 
like image 784
Wit Wikky Avatar asked Jan 21 '16 13:01

Wit Wikky


1 Answers

This condition will fail for point geometries:

if (isset($shp_data['parts'])) {

Unfortunately it looks like that the ShapeFile PHP library you are using does not have a proper way to identify the geometry type.

As a workaround, if the above check fails, you can then check if the geometry has an x and y coordinate like so:

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;
}

This should result in an array that looks something like this:

  [0]=>
  array(1) {
    ["point"]=>
    array(1) {
      ["coordinates"]=>
      string(34) "0.75712656784493 -0.99201824401368"
    }
  }
like image 184
chrki Avatar answered Nov 09 '22 16:11

chrki