alexpechkarev / geometry-library

PHP Geometry Library provides utility functions for the computation of geometric data on the surface of the Earth. Code ported from Google Maps Android API.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Uninitialized string offset

jaska120 opened this issue · comments

When using isLocationOnEdge on several decoded polylines, I am getting error on some encoded polylines: Uninitialized string offset: 156 in PolyUtil.php on line 313, which points to a decoding function. I have escaped all the backslashes from encoded polyline at the time of creating in Javascript, but I am not aware if some characters should be escaped also in PHP.

Encoded polyline, which produces the error is:
polyline_error.txt

Hi @jaska120 ,
Please can you show how you making the call ?

The isLocationOnEdge method only available for Directions API.
Here how this method to be invoked within this package:

$response = \GoogleMaps::load('directions')
            ->setParam([
                'origin'          => 'place_id:ChIJ685WIFYViEgRHlHvBbiD5nE', 
                'destination'     => 'place_id:ChIJA01I-8YVhkgRGJb0fW4UX7Y', 
            ])
           ->isLocationOnEdge(55.86483,-4.25161);

    dd( $response  );  // true

Regards,
Alexander

I am making the call to database where are user previously inserted encoded polylines and point is user defined point to which the query is made against.

$distance = 1000; //meters
$startpoint = array('lat' => 61.487002, 'lng' => 23.790636);
$endpoint = array('lat' => 60.215399, 'lng' => 24.943364);

while($row = $result->fetch_assoc()) {
	$encoded = $row["encodedpolyline"];
	$polyline = \GeometryLibrary\PolyUtil::decode($encoded); 
				
	$startboolean = \GeometryLibrary\PolyUtil::isLocationOnEdge($startpoint,$polyline,$distance);
	$endboolean = \GeometryLibrary\PolyUtil::isLocationOnEdge($endpoint,$polyline,$distance);

        if ($startboolean and $endboolean) {
		//var_dump($encoded);
	        //var_dump($startboolean);
	       //var_dump($endboolean);
	       $data[] = $row;
	}
}

$data array is being JSON encoded and sent to client via Ajax call and it returns correctly except the error occurs with the last polyline. In this example I have provided $startpoint and $endpoint arrays hardcoded but those are the coordinates with which user would face error.

Please find attached txt document for encoded polylines SQL queried from $row["encodedpolyline"]. The problem occurs only with the last polyline and the functions works if I delete that from database so I guess it has something do with the format of encoding.
example_encoded_polylines.txt

Hi Alexander,

My bad, there was still a problem with escaping backslashes and your code is working normally.

Thanks,
Jaska

Hi @jaska120 ,

Thank you for your update, glad to hear that issue has been resolved.

Regards,
Alexander