| Current File : /home/jvzmxxx/wiki1/extensions/Maps/includes/parsers/RectangleParser.php |
<?php
namespace Maps;
use DataValues\Geo\Parsers\GeoCoordinateParser;
use DataValues\Geo\Values\LatLongValue;
use Maps\Elements\Rectangle;
use ValueParsers\ParseException;
use ValueParsers\StringValueParser;
/**
* @since 3.0
*
* @licence GNU GPL v2+
* @author Kim Eik
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class RectangleParser extends StringValueParser {
private $supportGeocoding = true;
// TODO: use options
private $metaDataSeparator = '~';
/**
* @see StringValueParser::stringParse
*
* @since 3.0
*
* @param string $value
*
* @return Rectangle
*/
public function stringParse( $value ) {
$metaData = explode( $this->metaDataSeparator , $value );
$rectangleData = explode( ':' , array_shift( $metaData ) );
$rectangle = new Rectangle(
$this->stringToLatLongValue( $rectangleData[0] ),
$this->stringToLatLongValue( $rectangleData[1] )
);
if ( $metaData !== [] ) {
$rectangle->setTitle( array_shift( $metaData ) );
}
if ( $metaData !== [] ) {
$rectangle->setText( array_shift( $metaData ) );
}
if ( $metaData !== [] ) {
$rectangle->setStrokeColor( array_shift( $metaData ) );
}
if ( $metaData !== [] ) {
$rectangle->setStrokeOpacity( array_shift( $metaData ) );
}
if ( $metaData !== [] ) {
$rectangle->setStrokeWeight( array_shift( $metaData ) );
}
return $rectangle;
}
private function stringToLatLongValue( $location ) {
if ( $this->supportGeocoding && Geocoders::canGeocode() ) {
$location = Geocoders::attemptToGeocode( $location );
if ( $location === false ) {
throw new ParseException( 'Failed to parse or geocode' );
}
assert( $location instanceof LatLongValue );
return $location;
}
$parser = new GeoCoordinateParser( new \ValueParsers\ParserOptions() );
return $parser->parse( $location );
}
}