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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ili2reader.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************** * $Id: ili2reader.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  Interlis 2 Reader * Purpose:  Implementation of ILI2Reader class. * Author:   Markus Schnider, 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_ili2.h"#include "cpl_conv.h"#include "cpl_string.h"#include "ilihelper.h"#include "iomhelper.h"#include "ili2reader.h"#include "ili2readerp.h"using namespace std;CPL_CVSID("$Id: ili2reader.cpp 10646 2007-01-18 02:38:10Z warmerdam $");//// constants//static const char *ILI2_TID = "TID";static const char *ILI2_REF = "REF";static const int ILI2_STRING_TYPE = 0;static const int ILI2_COORD_TYPE = 1;static const int ILI2_ARC_TYPE = 2;static const int ILI2_POLYLINE_TYPE = 4;static const int ILI2_BOUNDARY_TYPE = 8;static const int ILI2_AREA_TYPE = 16; // also SURFACEstatic const int ILI2_GEOMCOLL_TYPE = 32;static const char *ILI2_COORD = "COORD";static const char *ILI2_ARC = "ARC";static const char *ILI2_POLYLINE = "POLYLINE";static const char *ILI2_BOUNDARY = "BOUNDARY";static const char *ILI2_AREA = "AREA";static const char *ILI2_SURFACE = "SURFACE";// // helper functions// int cmpStr(string s1, string s2) {    string::const_iterator p1 = s1.begin();  string::const_iterator p2 = s2.begin();  while (p1 != s1.end() && p2 != s2.end()) {    if (toupper(*p1) != toupper(*p2))      return (toupper(*p1) < toupper(*p2)) ? -1 : 1;    ++p1;    ++p2;  }  return (s2.size() == s1.size()) ? 0 :         (s1.size() < s2.size()) ? -1 : 1;}string ltrim(string tmpstr) {  unsigned int i = 0;  while (i < tmpstr.length() && (tmpstr[i] == ' ' || tmpstr[i] == '\t' || tmpstr[i] == '\r' || tmpstr[i] == '\n')) ++i;  return i > 0 ? tmpstr.substr(i, tmpstr.length()-i) : tmpstr;}string rtrim(string tmpstr) {  unsigned int i = tmpstr.length() - 1;  while (i >= 0 && (tmpstr[i] == ' ' || tmpstr[i] == '\t' || tmpstr[i] == '\r' || tmpstr[i] == '\n')) --i;  return i < tmpstr.length() - 1 ? tmpstr.substr(0, i+1) : tmpstr;}string trim(string tmpstr) {  tmpstr = ltrim(tmpstr);  tmpstr = rtrim(tmpstr);  return tmpstr;}int getGeometryTypeOfElem(DOMElement* elem) {  int type = ILI2_STRING_TYPE;    if (elem && elem->getNodeType() == DOMNode::ELEMENT_NODE) {    if (cmpStr(ILI2_COORD, XMLString::transcode(elem->getTagName())) == 0) {      type = ILI2_COORD_TYPE;    } else if (cmpStr(ILI2_ARC, XMLString::transcode(elem->getTagName())) == 0) {      type = ILI2_ARC_TYPE;    } else if (cmpStr(ILI2_POLYLINE, XMLString::transcode(elem->getTagName())) == 0) {      type = ILI2_POLYLINE_TYPE;    } else if (cmpStr(ILI2_BOUNDARY, XMLString::transcode(elem->getTagName())) == 0) {      type = ILI2_BOUNDARY_TYPE;    } else if (cmpStr(ILI2_AREA, XMLString::transcode(elem->getTagName())) == 0) {      type = ILI2_AREA_TYPE;    } else if (cmpStr(ILI2_SURFACE, XMLString::transcode(elem->getTagName())) == 0) {      type = ILI2_AREA_TYPE;    }  }  return type;}char *getObjValue(DOMElement *elem) {  DOMElement *textElem = (DOMElement *)elem->getFirstChild();    if ((textElem != NULL) && (textElem->getNodeType() == DOMNode::TEXT_NODE))    return CPLStrdup(XMLString::transcode(textElem->getNodeValue()));    return NULL;}char *getREFValue(DOMElement *elem) {    return CPLStrdup(XMLString::transcode(elem->getAttribute(XMLString::transcode(ILI2_REF))));}OGRPoint *getPoint(DOMElement *elem) {  // elem -> COORD (or ARC)  OGRPoint *pt = new OGRPoint();    DOMElement *coordElem = (DOMElement *)elem->getFirstChild();  while (coordElem != NULL) {    if (cmpStr("C1", XMLString::transcode(coordElem->getTagName())) == 0)      pt->setX(atof(getObjValue(coordElem)));    else if (cmpStr("C2", XMLString::transcode(coordElem->getTagName())) == 0)      pt->setY(atof(getObjValue(coordElem)));    else if (cmpStr("C3", XMLString::transcode(coordElem->getTagName())) == 0)      pt->setZ(atof(getObjValue(coordElem)));    coordElem = (DOMElement *)coordElem->getNextSibling();  }  pt->flattenTo2D();  return pt;}OGRLineString *ILI2Reader::getArc(DOMElement *elem) {  // elem -> ARC  OGRLineString *ls = new OGRLineString();  // previous point -> start point  OGRPoint *ptStart = getPoint((DOMElement *)elem->getPreviousSibling()); // COORD or ARC  // end point  OGRPoint *ptEnd = new OGRPoint();  // point on the arc   OGRPoint *ptOnArc = new OGRPoint();  double radius = 0; // radius    DOMElement *arcElem = (DOMElement *)elem->getFirstChild();  while (arcElem != NULL) {    if (cmpStr("C1", XMLString::transcode(arcElem->getTagName())) == 0)      ptEnd->setX(atof(getObjValue(arcElem)));    else if (cmpStr("C2", XMLString::transcode(arcElem->getTagName())) == 0)      ptEnd->setY(atof(getObjValue(arcElem)));    else if (cmpStr("C3", XMLString::transcode(arcElem->getTagName())) == 0)      ptEnd->setZ(atof(getObjValue(arcElem)));    else if (cmpStr("A1", XMLString::transcode(arcElem->getTagName())) == 0)      ptOnArc->setX(atof(getObjValue(arcElem)));    else if (cmpStr("A2", XMLString::transcode(arcElem->getTagName())) == 0)      ptOnArc->setY(atof(getObjValue(arcElem)));    else if (cmpStr("A3", XMLString::transcode(arcElem->getTagName())) == 0)      ptOnArc->setZ(atof(getObjValue(arcElem)));    else if (cmpStr("R", XMLString::transcode(arcElem->getTagName())) == 0)      radius = atof(getObjValue(arcElem));    arcElem = (DOMElement *)arcElem->getNextSibling();  }  ptEnd->flattenTo2D();  ptOnArc->flattenTo2D();  interpolateArc(ls, ptStart, ptOnArc, ptEnd, arcIncr);  return ls;}OGRLineString *getLineString(DOMElement *elem) {  // elem -> POLYLINE  OGRLineString *ls = new OGRLineString();    DOMElement *lineElem = (DOMElement *)elem->getFirstChild();  while (lineElem != NULL) {    if (cmpStr(ILI2_COORD, XMLString::transcode(lineElem->getTagName())) == 0)      ls->addPoint(getPoint(lineElem));    else if (cmpStr(ILI2_ARC, XMLString::transcode(lineElem->getTagName())) == 0) {      // end point      OGRPoint *ptEnd = new OGRPoint();      // point on the arc       OGRPoint *ptOnArc = new OGRPoint();      // radius      double radius = 0;            DOMElement *arcElem = (DOMElement *)lineElem->getFirstChild();      while (arcElem != NULL) {                if (cmpStr("C1", XMLString::transcode(arcElem->getTagName())) == 0)          ptEnd->setX(atof(getObjValue(arcElem)));        else if (cmpStr("C2", XMLString::transcode(arcElem->getTagName())) == 0)          ptEnd->setY(atof(getObjValue(arcElem)));        else if (cmpStr("C3", XMLString::transcode(arcElem->getTagName())) == 0)          ptEnd->setZ(atof(getObjValue(arcElem)));        else if (cmpStr("A1", XMLString::transcode(arcElem->getTagName())) == 0)          ptOnArc->setX(atof(getObjValue(arcElem)));        else if (cmpStr("A2", XMLString::transcode(arcElem->getTagName())) == 0)          ptOnArc->setY(atof(getObjValue(arcElem)));        else if (cmpStr("A3", XMLString::transcode(arcElem->getTagName())) == 0)          ptOnArc->setZ(atof(getObjValue(arcElem)));        else if (cmpStr("R", XMLString::transcode(arcElem->getTagName())) == 0)          radius = atof(getObjValue(arcElem));                arcElem = (DOMElement *)arcElem->getNextSibling();      }            ptEnd->flattenTo2D();      ptOnArc->flattenTo2D();      OGRPoint *ptStart = getPoint((DOMElement *)lineElem->getPreviousSibling()); // COORD or ARC      interpolateArc(ls, ptStart, ptOnArc, ptEnd, PI/180);    } /* else { // FIXME StructureValue in Polyline not yet supported    } */            lineElem = (DOMElement *)lineElem->getNextSibling();  }    return ls;}OGRLineString *getBoundary(DOMElement *elem) {    DOMElement *lineElem = (DOMElement *)elem->getFirstChild();  if (lineElem != NULL)    if (cmpStr(ILI2_POLYLINE, XMLString::transcode(lineElem->getTagName())) == 0)      return getLineString(lineElem);    return new OGRLineString;}OGRPolygon *getPolygon(DOMElement *elem) {  OGRPolygon *pg = new OGRPolygon();    DOMElement *boundaryElem = (DOMElement *)elem->getFirstChild(); // outer boundary  while (boundaryElem != NULL) {    if (cmpStr(ILI2_BOUNDARY, XMLString::transcode(boundaryElem->getTagName())) == 0)      pg->addRing((OGRLinearRing *)getBoundary(boundaryElem));            boundaryElem = (DOMElement *)boundaryElem->getNextSibling(); // inner boundaries  }    return pg;}OGRGeometry *ILI2Reader::getGeometry(DOMElement *elem, int type) {  OGRGeometryCollection *gm = new OGRGeometryCollection();  DOMElement *childElem = elem;  while (childElem != NULL) {    switch (type) {      case ILI2_COORD_TYPE :         if (cmpStr(ILI2_COORD, XMLString::transcode(childElem->getTagName())) == 0)          return getPoint(childElem);        break;      case ILI2_ARC_TYPE :        // is it possible here? It have to be a ARC or COORD before (getPreviousSibling)        if (cmpStr(ILI2_ARC, XMLString::transcode(childElem->getTagName())) == 0)          return getArc(childElem);        break;      case ILI2_POLYLINE_TYPE :        if (cmpStr(ILI2_POLYLINE, XMLString::transcode(childElem->getTagName())) == 0)          return getLineString(childElem);        break;      case ILI2_BOUNDARY_TYPE :        if (cmpStr(ILI2_BOUNDARY, XMLString::transcode(childElem->getTagName())) == 0)          return getLineString(childElem);        break;      case ILI2_AREA_TYPE :        if ((cmpStr(ILI2_AREA, XMLString::transcode(childElem->getTagName())) == 0) ||          (cmpStr(ILI2_SURFACE, XMLString::transcode(childElem->getTagName())) == 0))          return getPolygon(childElem);        break;      default :         if (type >= ILI2_GEOMCOLL_TYPE) {          int subType = getGeometryTypeOfElem(childElem); //????          gm->addGeometry(getGeometry(childElem, subType));        }        break;    }        // GEOMCOLL    childElem = (DOMElement *)childElem->getNextSibling();  }    return gm;}const char* ILI2Reader::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(GetAttrObj(model, topic, "container"), "name"));    strcat(layername, ".");    strcat(layername, iom_getattrvalue(topic, "name"));    strcat(layername, ".");    strcat(layername, iom_getattrvalue(table, "name"));    return layername;}void ILI2Reader::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);  if (EQUAL(typenam, "iom04.metamodel.SurfaceType")) {  } else if (EQUAL(typenam, "iom04.metamodel.AreaType")) {  } else if (EQUAL(typenam, "iom04.metamodel.PolylineType") ) {  } else if (EQUAL(typenam, "iom04.metamodel.CoordType")) {  } else {    OGRFieldDefn fieldDef(iom_getattrvalue(obj, "name"), OFTString);    layer->GetLayerDefn()->AddFieldDefn(&fieldDef);    CPLDebug( "OGR_ILI", "Field %s: %s", fieldDef.GetNameRef(), typenam);  }}int ILI2Reader::ReadModel(char **modelFilenames) {  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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级黄色大片| 亚洲伊人色欲综合网| 亚洲一级在线观看| 国产成人亚洲综合色影视| 欧美日韩一区二区三区在线看| 精品福利在线导航| 丝袜美腿亚洲色图| 91同城在线观看| 久久久久久久性| 精品一区二区三区在线观看国产| 欧美无乱码久久久免费午夜一区| 日本一区二区视频在线| 激情都市一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 久久久www成人免费毛片麻豆 | 极品美女销魂一区二区三区免费| 色婷婷av一区二区三区gif| 日本一区二区综合亚洲| 国产精品一区二区久激情瑜伽 | 久久99精品国产91久久来源| 欧美少妇一区二区| 亚洲人成影院在线观看| 成人v精品蜜桃久久一区| 精品成人私密视频| 免费观看91视频大全| 欧美疯狂做受xxxx富婆| 午夜一区二区三区在线观看| 欧美综合欧美视频| 一区二区在线电影| 91免费观看视频在线| 中文字幕中文字幕一区| 成人黄色网址在线观看| 国产精品狼人久久影院观看方式| 粉嫩欧美一区二区三区高清影视| 久久免费视频色| 国产成人精品免费网站| 国产精品美女久久福利网站| 成人va在线观看| 亚洲欧美色一区| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 在线观看亚洲专区| 亚洲一区二区三区自拍| 欧美精品丝袜中出| 精品综合久久久久久8888| 国产亚洲短视频| 色综合视频一区二区三区高清| 一区二区三区国产豹纹内裤在线| 欧美图区在线视频| 奇米影视一区二区三区小说| 久久精品一区四区| 色综合天天综合给合国产| 性久久久久久久久| 亚洲精品一区二区三区影院| 国产成人啪午夜精品网站男同| 国产精品久久久久一区| 欧美日韩视频在线第一区| 韩国女主播成人在线观看| 国产精品乱码人人做人人爱 | av男人天堂一区| 亚洲电影欧美电影有声小说| 日韩欧美中文一区二区| 成人性生交大片免费看在线播放| 亚洲一区二区三区四区在线免费观看| 欧美日韩日日骚| 国产99久久久国产精品潘金网站| 亚洲精品福利视频网站| 91精品国产美女浴室洗澡无遮挡| 成人做爰69片免费看网站| 亚洲高清免费视频| 国产亚洲欧美中文| 欧美日韩精品一区二区在线播放| 国产精品一级片在线观看| 一区二区三区电影在线播| 久久久久久久久97黄色工厂| 欧美三级蜜桃2在线观看| 国产乱人伦精品一区二区在线观看| 亚洲视频免费看| 日韩欧美国产综合| 欧美三级视频在线播放| 成人污污视频在线观看| 欧美a一区二区| 亚洲成人自拍网| 国产精品网站在线观看| 日韩欧美电影一区| 欧美三级电影精品| aaa欧美大片| 国产精品资源在线| 全国精品久久少妇| 亚洲国产成人av| 亚洲欧美日韩在线播放| 久久久久成人黄色影片| 日韩午夜精品电影| 欧美日韩国产综合一区二区三区| 成人免费看的视频| 国产最新精品精品你懂的| 三级精品在线观看| 一区二区三区欧美亚洲| 国产精品美女久久久久久久久久久| 精品国精品自拍自在线| 欧美一区二视频| 欧美精品免费视频| 欧美美女一区二区在线观看| 欧美综合天天夜夜久久| 色婷婷av一区二区三区gif| 成人国产精品免费观看动漫| 国产盗摄女厕一区二区三区| 国产综合色精品一区二区三区| 麻豆精品视频在线| 亚洲国产精品自拍| 一区二区三区免费在线观看| 亚洲激情综合网| 亚洲国产精品影院| 亚洲成人777| 免费一级欧美片在线观看| 免费人成精品欧美精品| 欧美96一区二区免费视频| 蜜桃一区二区三区在线观看| 久久99热国产| 国产成人在线视频网站| voyeur盗摄精品| 91视频免费观看| 日本国产一区二区| 欧美日韩视频一区二区| 欧美一区二区三区免费观看视频| 日韩视频免费观看高清完整版| 日韩一区二区电影在线| 欧美成人a在线| 国产日韩在线不卡| 综合亚洲深深色噜噜狠狠网站| 亚洲人吸女人奶水| 亚洲一区二区三区四区中文字幕 | 国产精品色一区二区三区| 国产精品视频第一区| 亚洲色图另类专区| 五月综合激情网| 国产一区二区免费视频| 成人国产精品免费网站| 欧美写真视频网站| 精品国产百合女同互慰| 国产精品无码永久免费888| 亚洲精品视频在线看| 日韩av成人高清| 国产高清亚洲一区| 一本大道综合伊人精品热热| 91精品一区二区三区久久久久久| 精品av久久707| 亚洲精品高清在线| 久久精品国产亚洲aⅴ| 91在线观看污| 制服.丝袜.亚洲.中文.综合| 日本一区二区三区电影| 一个色综合网站| 国模无码大尺度一区二区三区| aaa国产一区| 欧美成人一区二区| 亚洲欧美另类久久久精品2019| 青娱乐精品视频| 色天天综合久久久久综合片| 日韩欧美高清一区| 亚洲综合激情小说| 风间由美一区二区三区在线观看 | 国产精品中文欧美| 欧美视频在线一区| 国产精品视频一二| 日韩在线播放一区二区| 91在线观看一区二区| 精品久久99ma| 婷婷久久综合九色综合绿巨人| 成人av在线网站| 久久久久久久久蜜桃| 美女精品自拍一二三四| 欧美视频在线一区| 亚洲视频香蕉人妖| 大陆成人av片| 国产亚洲一本大道中文在线| 日韩av中文字幕一区二区三区| 色哟哟日韩精品| 国产精品久久久久9999吃药| 久久精品噜噜噜成人88aⅴ| 欧美亚洲免费在线一区| 成人免费视频在线观看| 懂色av一区二区三区蜜臀 | 亚洲欧美国产高清| 成人精品高清在线| 久久婷婷国产综合精品青草| 麻豆精品在线视频| 欧美一区二区三区视频在线观看| 亚洲一区二区三区在线| 欧美主播一区二区三区| 一区二区三区不卡在线观看 | 色成年激情久久综合| 国产精品水嫩水嫩| 成人三级在线视频| 中日韩av电影| www.在线欧美| 中文字幕中文乱码欧美一区二区| 国产不卡高清在线观看视频| 久久久久88色偷偷免费| 国产精品主播直播| 国产精品免费观看视频|