OGR API или создание промежуточных точек
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 06 окт 2011, 14:10
- Репутация: 0
OGR API или создание промежуточных точек
Добрый день!
Я использую библиотеку OGR для создания слоя MapInfo в проекте на Visual Studio C#.
Создавать точечные объекты я научился, присваивать свою, местную систему координат тоже.
Но, мне нужно между двумя основными точками рассчитать положение еще одной-двух-трех на одинаковом расстоянии друг от друга.
Есть ли инструменты в API OGR для данной процедуры?
А так же.. Могу ли я "вручную" рассчитать эти точки, считая, что нахожусь на плоскости и "тупо" используя школьную геометрию вычислить положение промежуточных точек? Дистанция между основными может быть в пределах одного километра..
Я использую библиотеку OGR для создания слоя MapInfo в проекте на Visual Studio C#.
Создавать точечные объекты я научился, присваивать свою, местную систему координат тоже.
Но, мне нужно между двумя основными точками рассчитать положение еще одной-двух-трех на одинаковом расстоянии друг от друга.
Есть ли инструменты в API OGR для данной процедуры?
А так же.. Могу ли я "вручную" рассчитать эти точки, считая, что нахожусь на плоскости и "тупо" используя школьную геометрию вычислить положение промежуточных точек? Дистанция между основными может быть в пределах одного километра..
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: OGR API или создание промежуточных точек
В OGR API насколько знаю такого нет. Да оно и не нужно, задачка же из школьного курса геометрии
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 06 окт 2011, 14:10
- Репутация: 0
Re: OGR API или создание промежуточных точек
Так то оно да. Но я плохо знаю проекции и с чем их едят. Меня интересует погрешность при вычислениях. Могу ли я все рассчитывать исходя из того что работаю на однородной плоскости? И до кучи, если СК будет в долготе\широте, то такой же подход для расчета используется?
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: OGR API или создание промежуточных точек
Еслу у вас расстояние между точками не превышает 1 км, то погрешностью можно вообще пренебречь. Долгота/широта те же координаты, что и метры, только единицы измерения другие.
Еще можете посмотреть на GEOS, там нужный функционал должен быть, только вот интервейса к C# у нее нет
Еще можете посмотреть на GEOS, там нужный функционал должен быть, только вот интервейса к C# у нее нет
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 06 окт 2011, 14:10
- Репутация: 0
Re: OGR API или создание промежуточных точек
Большое спасибо!
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: OGR API или создание промежуточных точек
OGR и есть тонкая обертка над GEOS.
Документация по GEOS: http://geos.osgeo.org/doxygen/
Но это все не нужно!
Есть метод для линии (OGRLineString) называется Value (http://gdal.org/ogr/classOGRLineString. ... 14a6c150a0)
который возвращает точку на линии по расстоянию. Можно и для сегмента такое сделать. Читайте доки.
Документация по GEOS: http://geos.osgeo.org/doxygen/
Но это все не нужно!
Есть метод для линии (OGRLineString) называется Value (http://gdal.org/ogr/classOGRLineString. ... 14a6c150a0)
который возвращает точку на линии по расстоянию. Можно и для сегмента такое сделать. Читайте доки.
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: OGR API или создание промежуточных точек
Позволю себе не согласитьсяBishop писал(а):Но это все не нужно!
Метод-то есть и доку мы читаем, только вот незадача... в public API его (метода) нет.Bishop писал(а):Есть метод для линии (OGRLineString) называется Value... Читайте доки.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: OGR API или создание промежуточных точек
Здесь уже я не согласен. Если брать "древний" С API то может быть и да, но в С++ все есть.Voltron писал(а): Метод-то есть и доку мы читаем, только вот незадача... в public 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
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: OGR API или создание промежуточных точек
Пусть так, но в Python API такого нет, нет этого и в R, Perl, VB6 и Ruby. За C# не скажу, мне его собрать негде, но подозреваю, что и там этого тоже нет.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: OGR API или создание промежуточных точек
Не уверен. Если посмотреть на ogr_api.h (если правильно понимаю, это главный заголовочный файл для OGR), то там многих вещей нет и так было еще при 1.5.0. Возможно, сделано специально, хотя не знаю зачем
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя