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