亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩精品一区二区三区蜜臀| 欧美高清一级片在线观看| 国产大陆精品国产| 亚洲va国产天堂va久久en| 337p日本欧洲亚洲大胆精品| 欧美视频在线不卡| 成人黄色综合网站| 精品在线播放午夜| 亚洲高清中文字幕| 中文字幕在线一区| 欧美大片一区二区三区| 欧洲色大大久久| 波多野结衣中文字幕一区| 蜜臀av国产精品久久久久| 一区二区三区成人| 亚洲国产精品激情在线观看| 日韩丝袜情趣美女图片| 欧美视频在线播放| 色婷婷精品大视频在线蜜桃视频| 国产一区二区三区四区五区入口| 日日夜夜精品视频天天综合网| 亚洲天堂2014| 国产精品久久夜| 国产亚洲成年网址在线观看| 精品久久国产字幕高潮| 欧美肥胖老妇做爰| 欧美丝袜第三区| 色综合天天综合在线视频| 丁香亚洲综合激情啪啪综合| 狠狠狠色丁香婷婷综合久久五月| 琪琪久久久久日韩精品| 日精品一区二区| 亚洲v精品v日韩v欧美v专区 | 精品国产乱码久久久久久闺蜜| 欧美性猛交一区二区三区精品| 色综合久久久久综合体桃花网| 成人不卡免费av| 成人激情黄色小说| 成人av动漫网站| 99久久免费视频.com| 成人综合婷婷国产精品久久蜜臀| 国产麻豆精品视频| 国产不卡高清在线观看视频| 国产精品一区专区| 国产乱码精品一区二区三| 国产在线精品视频| 国产不卡在线视频| av在线不卡电影| 一本到不卡免费一区二区| 色综合中文综合网| 另类小说一区二区三区| 青青草国产精品亚洲专区无| 美女高潮久久久| 国产毛片精品视频| 成人妖精视频yjsp地址| 99在线视频精品| 欧美最猛性xxxxx直播| 欧美色图12p| 日韩美女视频在线| 久久久久久久久久久黄色| 日本一区二区三级电影在线观看| 国产精品系列在线| 一区二区国产视频| 日韩精品一级中文字幕精品视频免费观看 | av高清不卡在线| 精品视频在线免费观看| 欧美岛国在线观看| 亚洲欧美综合在线精品| 午夜国产不卡在线观看视频| 国内欧美视频一区二区| 成人免费的视频| 欧美性xxxxxxxx| 欧美大度的电影原声| 亚洲国产经典视频| 亚洲国产色一区| 国精品**一区二区三区在线蜜桃| 成人一级视频在线观看| 欧美日韩一区二区三区视频| 精品乱码亚洲一区二区不卡| 精品一区二区三区免费| 夜夜嗨av一区二区三区网页| 蜜臀va亚洲va欧美va天堂| 成人免费视频网站在线观看| 欧美色偷偷大香| 久久久高清一区二区三区| 一区二区三区视频在线看| 蜜臀av性久久久久蜜臀aⅴ四虎| 成人av在线播放网址| 在线播放国产精品二区一二区四区| 久久久久99精品国产片| 亚洲午夜电影在线观看| 国产一区二区视频在线播放| 在线免费观看日韩欧美| 久久免费美女视频| 日韩av不卡一区二区| 99久久精品一区二区| 日韩欧美专区在线| 亚洲综合无码一区二区| 国产在线视视频有精品| 欧美视频一区二| 国产精品久久久久一区二区三区 | 欧美日韩成人综合天天影院| 中文字幕第一区二区| 美腿丝袜亚洲综合| 色偷偷成人一区二区三区91| 久久精品日产第一区二区三区高清版| 亚洲一区二区黄色| 成人ar影院免费观看视频| 精品少妇一区二区| 亚洲高清在线视频| 色综合久久久久网| 国产欧美视频一区二区三区| 蜜桃精品视频在线| 欧美三级中文字幕在线观看| 欧美韩国一区二区| 国产一区二区在线观看免费| 日韩一区二区麻豆国产| 亚洲影院在线观看| 色美美综合视频| 亚洲欧洲性图库| 粉嫩高潮美女一区二区三区| 久久综合色播五月| 美女视频黄免费的久久 | 亚洲最新在线观看| 99精品国产91久久久久久| 久久久影院官网| 狠狠久久亚洲欧美| www精品美女久久久tv| 久久66热re国产| 日韩欧美国产综合在线一区二区三区| 偷拍一区二区三区四区| 欧美在线小视频| 亚洲综合色丁香婷婷六月图片| 91色综合久久久久婷婷| 亚洲乱码国产乱码精品精可以看 | 国产精品系列在线观看| 亚洲精品一区二区三区四区高清| 免费观看久久久4p| 欧美大片拔萝卜| 国模娜娜一区二区三区| 国产三级欧美三级| 国产精一区二区三区| 国产亚洲短视频| 成人高清av在线| 亚洲欧美成人一区二区三区| 色中色一区二区| 亚洲成av人片一区二区三区| 欧美色精品在线视频| 免费看精品久久片| 久久综合五月天婷婷伊人| 国产福利一区在线| 亚洲丝袜另类动漫二区| 欧美三级午夜理伦三级中视频| 日韩精品1区2区3区| 91精品国产欧美日韩| 激情综合网最新| 欧美国产一区在线| 日本二三区不卡| 日韩福利视频导航| 26uuu亚洲综合色| 91蜜桃视频在线| 日韩专区在线视频| 久久先锋资源网| 91网站最新地址| 青青草91视频| 亚洲综合久久av| 亚洲激情自拍偷拍| 欧美片在线播放| 国产一区二区三区四区五区美女| 国产精品高潮呻吟久久| 欧美日韩电影在线播放| 国内精品久久久久影院薰衣草| 国产精品丝袜在线| 欧美日韩不卡一区二区| 国产酒店精品激情| 亚洲大片免费看| 欧美激情中文字幕一区二区| 欧美性受xxxx黑人xyx性爽| 麻豆精品一二三| 亚洲丝袜美腿综合| 日韩精品一区二区三区老鸭窝| av在线播放不卡| 久久狠狠亚洲综合| 一区二区三区**美女毛片| 在线观看三级视频欧美| 国产人成亚洲第一网站在线播放| av中文字幕亚洲| 欧美日韩一级黄| 亚洲精品少妇30p| 欧美videos大乳护士334| 成人动漫一区二区在线| 亚洲va国产天堂va久久en| 欧美日韩国产一二三| 怡红院av一区二区三区| 精品区一区二区| 在线精品观看国产| av午夜一区麻豆| 久草在线在线精品观看| 亚洲女与黑人做爰| 国产亚洲一区字幕|