#define MAX_LINE_SIZE 1024
#define STR_MAX 1024
#define DISTNATION_LENGTH 100
#define POINT_MAX 4096 /*--  --*/
#define POLYGON_MAX 4096
#define PUBKEY_LENGTH 20
//ポリゴン線分は多めに
//道路の注記の読み込み
#define  DORO_ARC 0
#define  SANKAKU_PNT 1
#define  GYOUSEI_CITY_PGN 2
#define  GYOUSEI_TOWN_PGN 3
#define  GAIKU_PGN 4
#define  TATEMONO_PGN 5
#define  EKI_PNT 6
#define  TETUDOU_ARC 7
#define  ZYOUTI_PGN 8
#define  MIZU_PGN 9
//#define  MIZU_ARC 10
#define DATASOURCE_MAX 10

//arcH   *GetCSVItem(char *, char *);
typedef struct arcH{
      char FH[3];/*--FH--*/
      char zumei[30];/*--図名--*/
      char filename[40];/*--ファイル名--*/
      int recordC;/*--レコード総数--*/
      int fieldC;/*--要素の総数--*/
      int CoordFlag;/*--座標系フラグ--*/
      int Coordinate;/*--座標系番号--*/
      int kubun;/*--数値化区分--*/
      double llx;/*--左下--*/
      double lly;/*--左下--*/
      double rux;/*--右上--*/
      double ruy;/*--右上--*/
      double lux;/*--左上--*/   
      double luy;/*--左上--*/
      double rlx;/*--右下--*/
      double rly;/*--右下--*/
}arch_P;/*--ファイルヘッダーレコードの構造体--*/

typedef struct arcIDPnt{
      char code[5];/*--図式分類コード--*/
	char  pubKey[PUBKEY_LENGTH];/*--個別情報--*/
      double pX;/*--座標点列X--*/
      double pY;/*--座標点列Y--*/
      struct arcIDPnt *next;/*-- 次のポインター --*/
   } pnt_P;/*--アークIDレコード--*/

typedef struct arcIDRec{
      char code[5];/*--図式分類コード--*/
      int  lineTag;/*--線種タグ--*/
	char  pubKey[PUBKEY_LENGTH];/*--個別情報--*/
      int  count;/*--当該アークを構成する座標レコードの数--*/
      double pX[POINT_MAX];/*--座標点列X--*/
      double pY[POINT_MAX];/*--座標点列Y--*/
      struct arcIDRec *next;/*-- 次のポインター --*/
   }arc_P;/*--アークIDレコード--*/

typedef struct pgnIDRec{
	char code[10];/*--図式分類コード--*/
	char  pubKey[PUBKEY_LENGTH];/*--個別情報--*/
	int  count;/*--当該ポリゴンを構成するアーク指定レコードの数--*/
	double cX;/*--代表点のX座標--*/
	double cY;/*--代表点のY座標--*/
      double pX[POLYGON_MAX];/*--座標点列X--*/
	double pY[POLYGON_MAX];/*--座標点列Y--*/
	int maxPoints;
	struct pgnIDRec *next;/*-- 次のポインター --*/
   }pgn_P;/*--ポリゴンのIDレコード--*/

typedef struct atrIDRec{
	char code[10];/*--図式分類コード--*/
	char  pubKey[PUBKEY_LENGTH];/*--個別情報--*/
	int count;//属性数
	char  field1[STR_MAX];/*--個別情報--*/
	char  field2[STR_MAX];/*--個別情報--*/
	char  field3[STR_MAX];/*--個別情報--*/
	char  field4[STR_MAX];/*--個別情報--*/
	char  field5[STR_MAX];/*--個別情報--*/
	struct atrIDRec *next;/*-- 次のポインター --*/
}atr_P;


//sdf_ogr.c
int readDir(char *Path);

//それぞれのレイヤーを開くための関数
//まとめたいけど、それぞれ癖があるので難しいか？
int createRoadObject(char *Path);
int createSankakuObject(char *Path);
int createGyouseiObject(char *Path);
int createGaikuObject(char *Path);
int createTatemonoObject(char *Path);
int createWaterObject(char *Path);
int createOthersObject(char *Path);

int removeTabFile(const char *);
void replaceSpace(char *Path);
static void Usage( void );

//sdf_read.c
atr_P *readAtrFiletoObject(const char *);
arc_P *readArcFiletoObject(const char *filename);
pgn_P *readPgnFiletoObject(const char *filename,const  arc_P *arcH);
void freeAtrFile(atr_P *atrH);
void freeArcFile(arc_P  *arcH);
void freePgnFile(pgn_P  *pgnH);
void readArcFile(OGRDataSourceH datasource,const char *arcfile,const char *attfile);
void readAtrFile(OGRDataSourceH datasource,const char *atrfile,const char *arcfile);
void readPntFile( OGRDataSourceH datasource,const char *pngfile,const char *attfile);
void readPgnFile(OGRDataSourceH datasource,const char *pgnfile ,const char *arcfile,const char *attfile);
int createOGRLinstringObject(OGRDataSourceH datasource ,const arc_P * arcH,const atr_P * atrH);
int createOGRLinstringObjectFromAtr(OGRDataSourceH datasource ,const arc_P * arcH,const atr_P * atrH);
int createOGRPointObject( OGRDataSourceH datasource,const pnt_P * pntH,const atr_P * atrH);
int createOGRPolygonObject( OGRDataSourceH datasource,const pgn_P * pgnH,const atr_P * atrH);
OGRDataSourceH createDataSouce(OGRDataSourceH  ,const char *,const OGRSpatialReferenceH sRef);
void closeRoadDataresoutce( OGRDataSourceH  );


OGRDataSourceH  sdfDatasource[DATASOURCE_MAX];//道路のOGRデータソース
		

char *convertEncodingEUC(const char *str);
