OGR API или создание промежуточных точек

Ответить
tyko
Новоприбывший
Сообщения: 9
Зарегистрирован: 06 окт 2011, 14:10
Репутация: 0

OGR API или создание промежуточных точек

Сообщение tyko » 07 ноя 2011, 21:14

Добрый день!
Я использую библиотеку OGR для создания слоя MapInfo в проекте на Visual Studio C#.
Создавать точечные объекты я научился, присваивать свою, местную систему координат тоже.
Но, мне нужно между двумя основными точками рассчитать положение еще одной-двух-трех на одинаковом расстоянии друг от друга.
Есть ли инструменты в API OGR для данной процедуры?
А так же.. Могу ли я "вручную" рассчитать эти точки, считая, что нахожусь на плоскости и "тупо" используя школьную геометрию вычислить положение промежуточных точек? Дистанция между основными может быть в пределах одного километра..

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: OGR API или создание промежуточных точек

Сообщение Voltron » 07 ноя 2011, 21:24

В OGR API насколько знаю такого нет. Да оно и не нужно, задачка же из школьного курса геометрии

tyko
Новоприбывший
Сообщения: 9
Зарегистрирован: 06 окт 2011, 14:10
Репутация: 0

Re: OGR API или создание промежуточных точек

Сообщение tyko » 07 ноя 2011, 21:27

Так то оно да. Но я плохо знаю проекции и с чем их едят. Меня интересует погрешность при вычислениях. Могу ли я все рассчитывать исходя из того что работаю на однородной плоскости? И до кучи, если СК будет в долготе\широте, то такой же подход для расчета используется?

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: OGR API или создание промежуточных точек

Сообщение Voltron » 07 ноя 2011, 21:38

Еслу у вас расстояние между точками не превышает 1 км, то погрешностью можно вообще пренебречь. Долгота/широта те же координаты, что и метры, только единицы измерения другие.

Еще можете посмотреть на GEOS, там нужный функционал должен быть, только вот интервейса к C# у нее нет

tyko
Новоприбывший
Сообщения: 9
Зарегистрирован: 06 окт 2011, 14:10
Репутация: 0

Re: OGR API или создание промежуточных точек

Сообщение tyko » 07 ноя 2011, 21:46

Большое спасибо!

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: OGR API или создание промежуточных точек

Сообщение Дмитрий Барышников » 07 ноя 2011, 22:50

OGR и есть тонкая обертка над GEOS.
Документация по GEOS: http://geos.osgeo.org/doxygen/
Но это все не нужно!
Есть метод для линии (OGRLineString) называется Value (http://gdal.org/ogr/classOGRLineString. ... 14a6c150a0)
который возвращает точку на линии по расстоянию. Можно и для сегмента такое сделать. Читайте доки.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: OGR API или создание промежуточных точек

Сообщение Voltron » 07 ноя 2011, 23:37

Bishop писал(а):Но это все не нужно!
Позволю себе не согласиться
Bishop писал(а):Есть метод для линии (OGRLineString) называется Value... Читайте доки.
Метод-то есть и доку мы читаем, только вот незадача... в public API его (метода) нет.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: OGR API или создание промежуточных точек

Сообщение Дмитрий Барышников » 08 ноя 2011, 00:11

Voltron писал(а): Метод-то есть и доку мы читаем, только вот незадача... в public API его (метода) нет.
Здесь уже я не согласен. Если брать "древний" С API то может быть и да, но в С++ все есть.
Привожу описание класса из GDAL/OGR 1.8.0

Код: Выделить всё

class CPL_DLL OGRLineString : public OGRCurve
{
protected:
int nPointCount;
OGRRawPoint *paoPoints;
double *padfZ;

void Make3D();
void Make2D();

public:
OGRLineString();
virtual ~OGRLineString();

// IWks Interface
virtual int WkbSize() const;
virtual OGRErr importFromWkb( unsigned char *, int = -1 );
virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const;
virtual OGRErr importFromWkt( char ** );
virtual OGRErr exportToWkt( char ** ppszDstText ) const;

// IGeometry interface
virtual int getDimension() const;
virtual OGRGeometry *clone() const;
virtual void empty();
virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
virtual OGRBoolean IsEmpty() const;

// ICurve methods
virtual double get_Length() const;
virtual void StartPoint(OGRPoint *) const;
virtual void EndPoint(OGRPoint *) const;
virtual void Value( double, OGRPoint * ) const;

// ILineString methods
int getNumPoints() const { return nPointCount; }
void getPoint( int, OGRPoint * ) const;
double getX( int i ) const { return paoPoints.x; }
double getY( int i ) const { return paoPoints.y; }
double getZ( int i ) const;

// ISpatialRelation
virtual OGRBoolean Equals( OGRGeometry * ) const;

// non standard.
virtual void setCoordinateDimension( int nDimension );
void setNumPoints( int );
void setPoint( int, OGRPoint * );
void setPoint( int, double, double );
void setPoint( int, double, double, double );
void setPoints( int, OGRRawPoint *, double * = NULL );
void setPoints( int, double * padfX, double * padfY,
double *padfZ = NULL );
void addPoint( OGRPoint * );
void addPoint( double, double );
void addPoint( double, double, double );

void getPoints( OGRRawPoint *, double * = NULL ) const;

void addSubLineString( const OGRLineString *,
int nStartVertex = 0, int nEndVertex = -1 );

// non-standard from OGRGeometry
virtual OGRwkbGeometryType getGeometryType() const;
virtual const char *getGeometryName() const;
virtual OGRErr transform( OGRCoordinateTransformation *poCT );
virtual void flattenTo2D();
virtual void segmentize(double dfMaxLength);

virtual void swapXY();
};

CPL_DLL Говорит что класс экспортируется из DLL и все доступно!
Вот про два вида API http://gdal.org/ogr/ogr_apitut.html

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: OGR API или создание промежуточных точек

Сообщение Voltron » 08 ноя 2011, 12:05

Пусть так, но в Python API такого нет, нет этого и в R, Perl, VB6 и Ruby. За C# не скажу, мне его собрать негде, но подозреваю, что и там этого тоже нет.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: OGR API или создание промежуточных точек

Сообщение Дмитрий Барышников » 08 ноя 2011, 13:57

Ну так баг однако?

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: OGR API или создание промежуточных точек

Сообщение Voltron » 08 ноя 2011, 14:22

Не уверен. Если посмотреть на ogr_api.h (если правильно понимаю, это главный заголовочный файл для OGR), то там многих вещей нет и так было еще при 1.5.0. Возможно, сделано специально, хотя не знаю зачем

Ответить

Вернуться в «GDAL/OGR»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей