亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ili1reader.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************** * $Id: ili1reader.cpp 10653 2007-01-18 16:38:13Z warmerdam $ * * Project:  Interlis 1 Reader * Purpose:  Implementation of ILI1Reader class. * Author:   Pirmin Kalberer, Sourcepole AG * ****************************************************************************** * Copyright (c) 2004, Pirmin Kalberer, Sourcepole AG * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************/#include "ogr_ili1.h"#include "cpl_conv.h"#include "cpl_string.h"#include "ogr_api.h"#include "ogr_geos.h"#include "ilihelper.h"#include "iomhelper.h"#include "ili1reader.h"#include "ili1readerp.h"#ifdef HAVE_GEOS#  define POLYGONIZE_AREAS#endif#ifndef POLYGONIZE_AREAS#  if defined(__GNUC_PREREQ)#    warning Interlis 1 Area polygonizing disabled. Needs GEOS >= 2.1.0#  endif#endifCPL_CVSID("$Id: ili1reader.cpp 10653 2007-01-18 16:38:13Z warmerdam $");//// ILI1Reader//IILI1Reader::~IILI1Reader() {}ILI1Reader::ILI1Reader() {  fpItf = NULL;  nLayers = 0;  papoLayers = NULL;  nAreaLayers = 0;  papoAreaLayers = NULL;  papoAreaLineLayers = NULL;  nSurfaceLayers = 0;  papoSurfaceLayers = NULL;  papoSurfacePolyLayers = NULL;  SetArcDegrees(1);}ILI1Reader::~ILI1Reader() { if (fpItf) VSIFClose( fpItf );}void ILI1Reader::SetArcDegrees(double arcDegrees) {  arcIncr = arcDegrees*PI/180;}/* -------------------------------------------------------------------- *//*      Open the source file.                                           *//* -------------------------------------------------------------------- */int ILI1Reader::OpenFile( const char *pszFilename ) {    fpItf = VSIFOpen( pszFilename, "r" );    if( fpItf == NULL )    {          CPLError( CE_Failure, CPLE_OpenFailed,                     "Failed to open ILI file `%s'.",                     pszFilename );        return FALSE;    }    return TRUE;}const char* ILI1Reader::GetLayerNameString(const char* topicname, const char* tablename) {    static char layername[512];    layername[0] = '\0';    strcat(layername, topicname);    strcat(layername, "__");    strcat(layername, tablename);    return layername;}const char* ILI1Reader::GetLayerName(IOM_BASKET model, IOM_OBJECT table) {    static char layername[512];    IOM_OBJECT topic = GetAttrObj(model, table, "container");    layername[0] = '\0';    strcat(layername, iom_getattrvalue(topic, "name"));    strcat(layername, "__");    strcat(layername, iom_getattrvalue(table, "name"));    return layername;}void ILI1Reader::AddCoord(OGRLayer* layer, IOM_BASKET model, IOM_OBJECT modelele, IOM_OBJECT typeobj) {  unsigned int dim = ::GetCoordDim(model, typeobj);  for (unsigned int i=0; i<dim; i++) {    OGRFieldDefn fieldDef(CPLSPrintf("%s_%d", iom_getattrvalue(modelele, "name"), i), OFTReal);    layer->GetLayerDefn()->AddFieldDefn(&fieldDef);    CPLDebug( "OGR_ILI", "Field %s: OFTReal", fieldDef.GetNameRef());  }}OGRLayer* ILI1Reader::AddGeomTable(const char* datalayername, const char* geomname, OGRwkbGeometryType eType) {  static char layername[512];  layername[0] = '\0';  strcat(layername, datalayername);  strcat(layername, "_");  strcat(layername, geomname);  OGRLayer* geomlayer = new OGRILI1Layer(layername, NULL, 0, eType, NULL);  AddLayer(geomlayer);  OGRFieldDefn fieldDef(datalayername, OFTString); //"__Ident"  geomlayer->GetLayerDefn()->AddFieldDefn(&fieldDef);  OGRFieldDefn fieldDef2("ILI_Geometry", OFTString); //in write mode only?  geomlayer->GetLayerDefn()->AddFieldDefn(&fieldDef2);  return geomlayer;}void ILI1Reader::AddField(OGRLayer* layer, IOM_BASKET model, IOM_OBJECT obj) {  const char* typenam = "Reference";  if (EQUAL(iom_getobjecttag(obj),"iom04.metamodel.LocalAttribute")) typenam = GetTypeName(model, obj);  CPLDebug( "OGR_ILI", "Field %s: %s", iom_getattrvalue(obj, "name"), typenam);  if (EQUAL(typenam, "iom04.metamodel.SurfaceType")) {    OGRLayer* polyLayer = AddGeomTable(layer->GetLayerDefn()->GetName(), iom_getattrvalue(obj, "name"), wkbPolygon);    AddSurfaceLayer(layer, polyLayer);    //TODO: add line attributes to geometry  } else if (EQUAL(typenam, "iom04.metamodel.AreaType")) {    IOM_OBJECT controlPointDomain = GetAttrObj(model, GetTypeObj(model, obj), "controlPointDomain");    if (controlPointDomain) {      AddCoord(layer, model, obj, GetTypeObj(model, controlPointDomain));      layer->GetLayerDefn()->SetGeomType(wkbPoint);    }    OGRLayer* areaLineLayer = AddGeomTable(layer->GetLayerDefn()->GetName(), iom_getattrvalue(obj, "name"), wkbMultiLineString);#ifdef POLYGONIZE_AREAS    AddAreaLayer(layer, areaLineLayer);#endif  } else if (EQUAL(typenam, "iom04.metamodel.PolylineType") ) {    layer->GetLayerDefn()->SetGeomType(wkbMultiLineString);  } else if (EQUAL(typenam, "iom04.metamodel.CoordType")) {    AddCoord(layer, model, obj, GetTypeObj(model, obj));    if (layer->GetLayerDefn()->GetGeomType() == wkbUnknown) layer->GetLayerDefn()->SetGeomType(wkbPoint);  } else {    OGRFieldDefn fieldDef(iom_getattrvalue(obj, "name"), OFTString);    layer->GetLayerDefn()->AddFieldDefn(&fieldDef);  }}int ILI1Reader::ReadModel(const char *pszModelFilename) {  IOM_BASKET model;  IOM_ITERATOR modelelei;  IOM_OBJECT modelele;  iom_init();  // set error listener to a iom provided one, that just   // dumps all errors to stderr  iom_seterrlistener(iom_stderrlistener);  // compile ili model  char *iomarr[1] = {(char *)pszModelFilename};  model=iom_compileIli(1, iomarr);  if(!model){    CPLError( CE_Failure, CPLE_FileIO, "iom_compileIli failed." );    iom_end();    return FALSE;  }  // read tables  modelelei=iom_iteratorobject(model);  modelele=iom_nextobject(modelelei);  while(modelele){    const char *tag=iom_getobjecttag(modelele);    if (tag && EQUAL(tag,"iom04.metamodel.Table")) {      const char* topic = iom_getattrvalue(GetAttrObj(model, modelele, "container"), "name");      if (!EQUAL(topic, "INTERLIS")) {        const char* layername = GetLayerName(model, modelele);        OGRSpatialReference *poSRSIn = NULL;        int bWriterIn = 0;        OGRwkbGeometryType eReqType = wkbUnknown;        OGRILI1DataSource *poDSIn = NULL;        OGRLayer* layer = new OGRILI1Layer(layername, poSRSIn, bWriterIn, eReqType, poDSIn);        AddLayer(layer);        CPLDebug( "OGR_ILI", "Reading table model '%s'", layername );        // read fields        IOM_OBJECT fields[255];        IOM_OBJECT roledefs[255];        memset(fields, 0, 255);        memset(roledefs, 0, 255);        int maxIdx = -1;        IOM_ITERATOR fieldit=iom_iteratorobject(model);        for (IOM_OBJECT fieldele=iom_nextobject(fieldit); fieldele; fieldele=iom_nextobject(fieldit)){          const char *etag=iom_getobjecttag(fieldele);          if (etag && (EQUAL(etag,"iom04.metamodel.ViewableAttributesAndRoles"))) {            IOM_OBJECT table = GetAttrObj(model, fieldele, "viewable");            if (table == modelele) {              IOM_OBJECT obj = GetAttrObj(model, fieldele, "attributesAndRoles");              int ili1AttrIdx = GetAttrObjPos(fieldele, "attributesAndRoles")-1;              if (EQUAL(iom_getobjecttag(obj),"iom04.metamodel.RoleDef")) {                int ili1AttrIdxOppend = atoi(iom_getattrvalue(GetAttrObj(model, obj, "oppend"), "ili1AttrIdx"));                if (ili1AttrIdxOppend>=0) roledefs[ili1AttrIdxOppend] = obj;              } else {                fields[ili1AttrIdx] = obj;              }              if (ili1AttrIdx > maxIdx) maxIdx = ili1AttrIdx;              //CPLDebug( "OGR_ILI", "Field %s Pos: %d", iom_getattrvalue(obj, "name"), ili1AttrIdx);            }          }          iom_releaseobject(fieldele);        }        iom_releaseiterator(fieldit);        OGRFieldDefn fieldDef("__Ident", OFTString);        layer->GetLayerDefn()->AddFieldDefn(&fieldDef);        for (int i=0; i<=maxIdx; i++) {          IOM_OBJECT obj = fields[i];          IOM_OBJECT roleobj = roledefs[i];          if (roleobj) AddField(layer, model, roleobj);          if (obj) AddField(layer, model, obj);        }      }    }    iom_releaseobject(modelele);    modelele=iom_nextobject(modelelei);  }  iom_releaseiterator(modelelei);  iom_releasebasket(model);  iom_end();  return 0;}int ILI1Reader::ReadFeatures() {    char **tokens = NULL;    const char *firsttok = NULL;    const char *pszLine;    const char *topic = NULL;    int ret = TRUE;        while (ret && (tokens = ReadParseLine()))    {      firsttok = tokens[0];      if (EQUAL(firsttok, "SCNT"))      {        //read description        do         {          pszLine = CPLReadLine( fpItf );        }        while (pszLine && !EQUALN(pszLine, "////", 4));        ret = (pszLine != NULL);      }      else if (EQUAL(firsttok, "MOTR"))      {        //read model        do         {          pszLine = CPLReadLine( fpItf );        }        while (pszLine && !EQUALN(pszLine, "////", 4));        ret = (pszLine != NULL);      }      else if (EQUAL(firsttok, "MTID"))      {      }      else if (EQUAL(firsttok, "MODL"))      {      }      else if (EQUAL(firsttok, "TOPI"))      {        topic = CPLStrdup(CSLGetField(tokens, 1));      }      else if (EQUAL(firsttok, "TABL"))      {        CPLDebug( "OGR_ILI", "Reading table '%s'", GetLayerNameString(topic, CSLGetField(tokens, 1)) );        curLayer = (OGRILI1Layer*)GetLayerByName(GetLayerNameString(topic, CSLGetField(tokens, 1)));        if (curLayer == NULL) { //create one          CPLDebug( "OGR_ILI", "No model found, using default field names." );          OGRSpatialReference *poSRSIn = NULL;          int bWriterIn = 0;          OGRwkbGeometryType eReqType = wkbUnknown;          OGRILI1DataSource *poDSIn = NULL;          curLayer = new OGRILI1Layer(GetLayerNameString(topic, CSLGetField(tokens, 1)), poSRSIn, bWriterIn, eReqType, poDSIn);          AddLayer(curLayer);        }        for (int i=0; i < curLayer->GetLayerDefn()->GetFieldCount(); i++) {          CPLDebug( "OGR_ILI", "Field %d: %s", i,  curLayer->GetLayerDefn()->GetFieldDefn(i)->GetNameRef());        }        ret = ReadTable();      }      else if (EQUAL(firsttok, "ETOP"))      {      }      else if (EQUAL(firsttok, "EMOD"))      {      }      else if (EQUAL(firsttok, "ENDE"))      {        JoinSurfaceLayers();        PolygonizeAreaLayers();        return TRUE;      }      else      {        CPLDebug( "OGR_ILI", "Unexpected token: %s", firsttok );      }            CSLDestroy(tokens);    }    return ret;}int ILI1Reader::AddIliGeom(OGRFeature *feature, int iField, long fpos){#if defined(_WIN32) || defined(__WIN32__)    //Other positions on Windows !?#else    long nBlockLen = VSIFTell( fpItf )-fpos;    VSIFSeek( fpItf, fpos, SEEK_SET );    char *pszRawData = (char *) CPLMalloc(nBlockLen+1);    if( (int) VSIFRead( pszRawData, 1, nBlockLen, fpItf ) != nBlockLen )    {        CPLFree( pszRawData );        CPLError( CE_Failure, CPLE_FileIO, "Read of transfer file failed." );        return FALSE;    }    pszRawData[nBlockLen]= '\0';    feature->SetField(iField, pszRawData);#endif    return TRUE;}OGRMultiPolygon* ILI1Reader::Polygonize( OGRGeometryCollection* poLines ){    OGRMultiPolygon *poPolygon = new OGRMultiPolygon();#if defined(POLYGONIZE_AREAS)    GEOSGeom *ahInGeoms = NULL;    int       i = 0;        ahInGeoms = (GEOSGeom *) CPLCalloc(sizeof(void*),poLines->getNumGeometries());    for( i = 0; i < poLines->getNumGeometries(); i++ )        ahInGeoms[i] = poLines->getGeometryRef(i)->exportToGEOS();        GEOSGeom hResultGeom = GEOSPolygonize( ahInGeoms,                                            poLines->getNumGeometries() );    for( i = 0; i < poLines->getNumGeometries(); i++ )        GEOSGeom_destroy( ahInGeoms[i] );    CPLFree( ahInGeoms );    if( hResultGeom == NULL )        return NULL;    OGRGeometry *poMP = OGRGeometryFactory::createFromGEOS( hResultGeom );        GEOSGeom_destroy( hResultGeom );    return (OGRMultiPolygon *) poMP;#endif    return poPolygon;}void ILI1Reader::PolygonizeAreaLayers(){    for(int iLayer = 0; iLayer < nAreaLayers; iLayer++ )    {      OGRLayer *poAreaLayer = papoAreaLayers[iLayer];      OGRLayer *poLineLayer = papoAreaLineLayers[iLayer];

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合视频| 亚洲一区二区三区国产| 国产精品福利在线播放| 日韩电影在线看| 亚洲影院免费观看| 三级成人在线视频| 欧美日韩国产一级| 国产日韩欧美精品电影三级在线| 视频一区欧美日韩| 在线播放91灌醉迷j高跟美女| 亚洲综合色区另类av| 欧美综合一区二区三区| 亚洲男同性恋视频| 欧美在线观看视频一区二区| 亚洲乱码中文字幕综合| 欧洲av一区二区嗯嗯嗯啊| 亚洲一区二三区| 日韩欧美久久一区| 风间由美性色一区二区三区| 一区二区三区在线播放| 成人小视频在线| 久久精品亚洲一区二区三区浴池| 国产一区二区三区最好精华液| 国产婷婷色一区二区三区| 91在线你懂得| 日韩电影在线观看一区| 精品美女被调教视频大全网站| 国产成人免费视| 日韩在线一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w| 高清不卡一二三区| 欧美国产禁国产网站cc| 欧美日韩一区中文字幕| 国产麻豆精品在线| 香蕉久久一区二区不卡无毒影院| 精品国产乱码久久久久久闺蜜| 国产成人免费网站| 日日骚欧美日韩| 国产剧情一区在线| 国产精品视频观看| 国产欧美一区二区精品久导航| 欧洲一区二区三区在线| 国产一区二区三区免费| 亚洲欧美视频在线观看| 中文一区二区完整视频在线观看| 日韩精品一区二区三区蜜臀| 99视频在线观看一区三区| 国产不卡视频在线播放| 国产在线精品不卡| 久久电影网站中文字幕| 青青国产91久久久久久 | 美女mm1313爽爽久久久蜜臀| 日本一区二区综合亚洲| 久久香蕉国产线看观看99| 久久精品欧美一区二区三区不卡| 在线日韩av片| 懂色av一区二区三区免费观看| 一区二区三区欧美久久| 久久久久久久久久久99999| 欧美一级片免费看| 欧美日韩国产综合草草| av激情综合网| 色偷偷成人一区二区三区91| 粗大黑人巨茎大战欧美成人| 国产99久久久国产精品潘金 | 5566中文字幕一区二区电影| 久久99精品久久久| 国产一区二三区| 91蝌蚪porny| 欧美一级夜夜爽| 国产精品88888| 国产精品欧美精品| 久久久久99精品一区| 中文字幕av不卡| 国产精品色眯眯| 性做久久久久久免费观看| 日本网站在线观看一区二区三区| 国产精品88888| 91亚洲精品久久久蜜桃网站| 日韩三级在线观看| 一区二区三区美女视频| 91丨porny丨国产| 久久久久97国产精华液好用吗| 五月婷婷激情综合网| 成人美女视频在线观看18| 精品精品国产高清a毛片牛牛| 伊人色综合久久天天| 95精品视频在线| av电影天堂一区二区在线观看| 欧美午夜寂寞影院| 久久久久一区二区三区四区| 亚洲精品日韩综合观看成人91| 捆绑调教美女网站视频一区| 99精品视频在线免费观看| 日韩视频一区二区三区| 亚洲天堂成人网| 亚洲成人激情av| 在线免费不卡视频| 亚洲人午夜精品天堂一二香蕉| 亚洲一区二区三区免费视频| 日韩在线a电影| 99在线视频精品| 精品久久久三级丝袜| 亚洲最大的成人av| 成人激情免费网站| 欧美一级片在线| 午夜欧美2019年伦理| fc2成人免费人成在线观看播放| 91麻豆精品国产91久久久资源速度 | 91精品免费观看| 亚洲欧洲av一区二区三区久久| 久久99精品国产麻豆不卡| 色先锋久久av资源部| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲国产成人av好男人在线观看| 高清av一区二区| 欧美精三区欧美精三区 | 婷婷久久综合九色国产成人| 国产精品一区二区三区网站| 欧美一区二区三区成人| 亚洲成av人片在线| 日本高清成人免费播放| 亚洲欧洲av在线| 色综合天天狠狠| 中文字幕综合网| 91麻豆视频网站| 亚洲精品国产品国语在线app| 岛国精品一区二区| 中文字幕av在线一区二区三区| 久久成人麻豆午夜电影| 精品福利av导航| 久久国产免费看| www成人在线观看| 国产综合久久久久久久久久久久| 精品美女一区二区三区| 国产一本一道久久香蕉| 欧美激情中文不卡| 99精品视频在线观看免费| 亚洲视频在线一区二区| 在线观看欧美日本| 日本不卡的三区四区五区| 欧美一区二区美女| 国产成人在线观看免费网站| 精品国产污污免费网站入口 | 在线观看日韩一区| 欧美日韩免费不卡视频一区二区三区| 欧美美女一区二区三区| 亚洲综合在线第一页| 一本久道中文字幕精品亚洲嫩| 亚洲va国产va欧美va观看| 蜜桃视频一区二区| 色一情一乱一乱一91av| 91麻豆精品国产自产在线观看一区| 麻豆成人在线观看| 日韩高清一区在线| 激情综合五月天| 国产精品18久久久久久久网站| 韩国一区二区在线观看| 另类人妖一区二区av| 亚洲黄色小视频| 在线看国产一区二区| 成人欧美一区二区三区小说| 色哟哟亚洲精品| 国产日产欧美一区二区视频| 美女国产一区二区| 欧美写真视频网站| 美女视频黄 久久| 亚洲色欲色欲www在线观看| 欧美性猛交一区二区三区精品| 另类专区欧美蜜桃臀第一页| 欧美成人在线直播| 在线视频国内自拍亚洲视频| 狠狠狠色丁香婷婷综合久久五月| 色噜噜狠狠色综合中国| 国产精品一区一区| 老司机精品视频在线| 亚洲美女精品一区| 精品入口麻豆88视频| 91久久精品国产91性色tv | 91麻豆精东视频| 美腿丝袜亚洲一区| 日韩国产精品久久久久久亚洲| 国产精品久久久久久久第一福利 | 精品奇米国产一区二区三区| 在线观看欧美日本| 欧美一级艳片视频免费观看| 久久国产生活片100| 亚洲sss视频在线视频| 国产网站一区二区三区| 欧美性受xxxx| 国产日韩成人精品| 日韩一区二区三区视频| 91色.com| 欧美一级艳片视频免费观看| 精品久久免费看| 一区二区三区中文在线观看| 国产亚洲精品中文字幕| 日韩精品一区二区三区中文精品 | 一本色道a无线码一区v| 91麻豆国产在线观看|