2013-03-28 5 views
3

Я буду использовать gdal/ogr для нового проекта. Я хочу худощавое, но полностью функциональное приложение, поэтому не будет использовать другие реализации, такие как mapserver, потому что у них есть посторонние компоненты, которые, я сомневаюсь, понадобятся в приложении даже в будущем. Для записи, это ГИС, но я прошу здесь на SO, потому что там так мало примеров ГИС в PHP, который использует GDAL/OGRИспользование библиотеки PHP GDAL/OGR, какой подход является более чистым?

Я в принципе есть три варианта в виду:

  • Exec

    использовать РНР() для запуска утилит по конвертированию командной строке

  • используйте глотнул для создания DLL-файл и загрузить его как расширение на PHP

  • используйте PHP обертка написана geonfr @https://github.com/geonef/php5-gdal/wiki

Что вы считаете наиболее эффективным способом реализации библиотеки?

+0

Я бы посоветовал вам использовать php5-GDAL. Зачем делать работу снова? – hek2mgl

+0

Да, я подумал, что, вероятно, это лучший вариант, но его не рекомендуется в производственной среде, и его считают неустойчивым ..... –

+0

Таможенное решение будет нуждаться в том же альфа, бета, нестабильном, стабильном этапе. И я ожидаю, что вы начнете с альфа-состояния (как и все)) – hek2mgl

ответ

5

Я закончил работу с функциями exec, главным образом потому, что не было времени, чтобы попасть в разработку swig или php extension, которые были для меня предпочтительными методами. // здесь небольшой пример фрагмент из его использования, мы надеемся, это будет очень кстати для кого-то еще

public function convertToNewFormat($format) 
     { 
       return(
        exec('ogr2ogr -f ' 
         .$format 
         .' '.self::setNewFileLocation() 
         .' '.self::setOldFileLocation())); 

     } 
1

Вы можете использовать Symfony Process-компонент, избегая простые команды EXEC.
Он имеет отличный синтаксис и очень прост в использовании.

http://symfony.com/doc/current/components/process.html

$process = new Process('ls -lsa'); 
$process->run(); 

// executes after the command finishes 
if (!$process->isSuccessful()) { 
    throw new ProcessFailedException($process); 
} 

echo $process->getOutput();