📄 tigercompletechain.cpp
字号:
/****************************************************************************** * $Id: tigercompletechain.cpp,v 1.20 2004/10/05 19:30:44 fwarmerdam Exp $ * * Project: TIGER/Line Translator * Purpose: Implements TigerCompleteChain, providing access to RT1 and * related files. * Author: Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * 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. ****************************************************************************** * * $Log: tigercompletechain.cpp,v $ * Revision 1.20 2004/10/05 19:30:44 fwarmerdam * Added bug fix for a "full" shape record at the end of the .RT2 file. * http://bugzilla.remotesensing.org/show_bug.cgi?id=628 * * Revision 1.19 2004/02/12 16:00:03 warmerda * failure to open shapefile is no longer an error, just a warning * * Revision 1.18 2004/02/12 06:39:16 warmerda * added preliminary support for some GDT quirks * * Revision 1.17 2004/02/03 05:46:00 warmerda * fixed problem with chains at EOF without shape points being dropped * * Revision 1.16 2004/01/13 17:23:49 warmerda * recover more gracefully from RT2 open errors * * Revision 1.15 2003/10/15 19:09:46 warmerda * fixed memory leak of panShapeRecordId array * * Revision 1.14 2003/01/11 15:29:55 warmerda * expanded tabs * * Revision 1.13 2003/01/04 23:21:56 mbp * Minor bug fixes and field definition changes. Cleaned * up and commented code written for TIGER 2002 support. * * Revision 1.12 2002/12/28 21:45:05 warmerda * oncall uses spaces instead of zero for null vertices in .RT2 file * * Revision 1.11 2002/12/26 00:20:19 mbp * re-organized code to hold TIGER-version details in TigerRecordInfo structs; * first round implementation of TIGER_2002 support * * Revision 1.10 2001/07/19 16:05:49 warmerda * clear out tabs * * Revision 1.9 2001/07/18 04:55:16 warmerda * added CPL_CSVID * * Revision 1.8 2001/07/04 23:25:32 warmerda * first round implementation of writer * * Revision 1.7 2001/07/04 05:40:35 warmerda * upgraded to support FILE, and Tiger2000 schema * * Revision 1.6 2001/07/04 03:08:21 warmerda * fixed FRADDL width * * Revision 1.5 2001/01/19 21:15:20 warmerda * expanded tabs * * Revision 1.4 2000/01/13 05:18:11 warmerda * added support for multiple versions * * Revision 1.3 1999/12/22 15:38:15 warmerda * major update * * Revision 1.2 1999/11/04 21:14:31 warmerda * various improvements, and TestCapability() * * Revision 1.1 1999/10/07 18:19:21 warmerda * New * */#include "ogr_tiger.h"#include "cpl_conv.h"CPL_CVSID("$Id: tigercompletechain.cpp,v 1.20 2004/10/05 19:30:44 fwarmerdam Exp $");static TigerFieldInfo rt1_2002_fields[] = { // fieldname fmt type OFTType beg end len bDefine bSet bWrite { "MODULE", ' ', ' ', OFTString, 0, 0, 8, 1, 0, 0 }, { "TLID", 'R', 'N', OFTInteger, 6, 15, 10, 1, 1, 1 }, { "SIDE1", 'R', 'N', OFTInteger, 16, 16, 1, 1, 1, 1 }, { "SOURCE", 'L', 'A', OFTString, 17, 17, 1, 1, 1, 1 }, { "FEDIRP", 'L', 'A', OFTString, 18, 19, 2, 1, 1, 1 }, { "FENAME", 'L', 'A', OFTString, 20, 49, 30, 1, 1, 1 }, { "FETYPE", 'L', 'A', OFTString, 50, 53, 4, 1, 1, 1 }, { "FEDIRS", 'L', 'A', OFTString, 54, 55, 2, 1, 1, 1 }, { "CFCC", 'L', 'A', OFTString, 56, 58, 3, 1, 1, 1 }, { "FRADDL", 'R', 'A', OFTString, 59, 69, 11, 1, 1, 1 }, { "TOADDL", 'R', 'A', OFTString, 70, 80, 11, 1, 1, 1 }, { "FRADDR", 'R', 'A', OFTString, 81, 91, 11, 1, 1, 1 }, { "TOADDR", 'R', 'A', OFTString, 92, 102, 11, 1, 1, 1 }, { "FRIADDL", 'L', 'A', OFTString, 103, 103, 1, 1, 1, 1 }, { "TOIADDL", 'L', 'A', OFTString, 104, 104, 1, 1, 1, 1 }, { "FRIADDR", 'L', 'A', OFTString, 105, 105, 1, 1, 1, 1 }, { "TOIADDR", 'L', 'A', OFTString, 106, 106, 1, 1, 1, 1 }, { "ZIPL", 'L', 'N', OFTInteger, 107, 111, 5, 1, 1, 1 }, { "ZIPR", 'L', 'N', OFTInteger, 112, 116, 5, 1, 1, 1 }, { "AIANHHFPL", 'L', 'N', OFTInteger, 117, 121, 5, 1, 1, 1 }, { "AIANHHFPR", 'L', 'N', OFTInteger, 122, 126, 5, 1, 1, 1 }, { "AIHHTLIL", 'L', 'A', OFTString, 127, 127, 1, 1, 1, 1 }, { "AIHHTLIR", 'L', 'A', OFTString, 128, 128, 1, 1, 1, 1 }, { "CENSUS1", 'L', 'A', OFTString, 129, 129, 1, 1, 1, 1 }, { "CENSUS2", 'L', 'A', OFTString, 130, 130, 1, 1, 1, 1 }, { "STATEL", 'L', 'N', OFTInteger, 131, 132, 2, 1, 1, 1 }, { "STATER", 'L', 'N', OFTInteger, 133, 134, 2, 1, 1, 1 }, { "COUNTYL", 'L', 'N', OFTInteger, 135, 137, 3, 1, 1, 1 }, { "COUNTYR", 'L', 'N', OFTInteger, 138, 140, 3, 1, 1, 1 }, { "COUSUBL", 'L', 'N', OFTInteger, 141, 145, 5, 1, 1, 1 }, { "COUSUBR", 'L', 'N', OFTInteger, 146, 150, 5, 1, 1, 1 }, { "SUBMCDL", 'L', 'N', OFTInteger, 151, 155, 5, 1, 1, 1 }, { "SUBMCDR", 'L', 'N', OFTInteger, 156, 160, 5, 1, 1, 1 }, { "PLACEL", 'L', 'N', OFTInteger, 161, 165, 5, 1, 1, 1 }, { "PLACER", 'L', 'N', OFTInteger, 166, 170, 5, 1, 1, 1 }, { "TRACTL", 'L', 'N', OFTInteger, 171, 176, 6, 1, 1, 1 }, { "TRACTR", 'L', 'N', OFTInteger, 177, 182, 6, 1, 1, 1 }, { "BLOCKL", 'L', 'N', OFTInteger, 183, 186, 4, 1, 1, 1 }, { "BLOCKR", 'L', 'N', OFTInteger, 187, 190, 4, 1, 1, 1 }};static TigerRecordInfo rt1_2002_info = { rt1_2002_fields, sizeof(rt1_2002_fields) / sizeof(TigerFieldInfo), 228 };static TigerFieldInfo rt1_fields[] = { // fieldname fmt type OFTType beg end len bDefine bSet bWrite { "MODULE", ' ', ' ', OFTString, 0, 0, 8, 1, 0, 0 }, { "TLID", 'R', 'N', OFTInteger, 6, 15, 10, 1, 1, 1 }, { "SIDE1", 'R', 'N', OFTInteger, 16, 16, 1, 1, 1, 1 }, { "SOURCE", 'L', 'A', OFTString, 17, 17, 1, 1, 1, 1 }, { "FEDIRP", 'L', 'A', OFTString, 18, 19, 2, 1, 1, 1 }, { "FENAME", 'L', 'A', OFTString, 20, 49, 30, 1, 1, 1 }, { "FETYPE", 'L', 'A', OFTString, 50, 53, 4, 1, 1, 1 }, { "FEDIRS", 'L', 'A', OFTString, 54, 55, 2, 1, 1, 1 }, { "CFCC", 'L', 'A', OFTString, 56, 58, 3, 1, 1, 1 }, { "FRADDL", 'R', 'A', OFTString, 59, 69, 11, 1, 1, 1 }, { "TOADDL", 'R', 'A', OFTString, 70, 80, 11, 1, 1, 1 }, { "FRADDR", 'R', 'A', OFTString, 81, 91, 11, 1, 1, 1 }, { "TOADDR", 'R', 'A', OFTString, 92, 102, 11, 1, 1, 1 }, { "FRIADDL", 'L', 'A', OFTInteger, 103, 103, 1, 1, 1, 1 }, { "TOIADDL", 'L', 'A', OFTInteger, 104, 104, 1, 1, 1, 1 }, { "FRIADDR", 'L', 'A', OFTInteger, 105, 105, 1, 1, 1, 1 }, { "TOIADDR", 'L', 'A', OFTInteger, 106, 106, 1, 1, 1, 1 }, { "ZIPL", 'L', 'N', OFTInteger, 107, 111, 5, 1, 1, 1 }, { "ZIPR", 'L', 'N', OFTInteger, 112, 116, 5, 1, 1, 1 }, { "FAIRL", 'L', 'N', OFTInteger, 117, 121, 5, 1, 1, 1 }, { "FAIRR", 'L', 'N', OFTInteger, 122, 126, 5, 1, 1, 1 }, { "TRUSTL", 'L', 'A', OFTString, 127, 127, 1, 1, 1, 1 }, { "TRUSTR", 'L', 'A', OFTString, 128, 128, 1, 1, 1, 1 }, { "CENSUS1", 'L', 'A', OFTString, 129, 129, 1, 1, 1, 1 }, { "CENSUS2", 'L', 'A', OFTString, 130, 130, 1, 1, 1, 1 }, { "STATEL", 'L', 'N', OFTInteger, 131, 132, 2, 1, 1, 1 }, { "STATER", 'L', 'N', OFTInteger, 133, 134, 2, 1, 1, 1 }, { "COUNTYL", 'L', 'N', OFTInteger, 135, 137, 3, 1, 1, 1 }, { "COUNTYR", 'L', 'N', OFTInteger, 138, 140, 3, 1, 1, 1 }, { "FMCDL", 'L', 'N', OFTInteger, 141, 145, 5, 1, 1, 1 }, { "FMCDR", 'L', 'N', OFTInteger, 146, 150, 5, 1, 1, 1 }, { "FSMCDL", 'L', 'N', OFTInteger, 151, 155, 5, 1, 1, 1 }, { "FSMCDR", 'L', 'N', OFTInteger, 156, 160, 5, 1, 1, 1 }, { "FPLL", 'L', 'N', OFTInteger, 161, 165, 5, 1, 1, 1 }, { "FPLR", 'L', 'N', OFTInteger, 166, 170, 5, 1, 1, 1 }, { "CTBNAL", 'L', 'N', OFTInteger, 171, 176, 6, 1, 1, 1 }, { "CTBNAR", 'L', 'N', OFTInteger, 177, 182, 6, 1, 1, 1 }, { "BLKL", 'L', 'N', OFTString, 183, 186, 4, 1, 1, 1 }, { "BLKR", 'L', 'N', OFTString, 187, 190, 4, 1, 1, 1 }}; static TigerRecordInfo rt1_info = { rt1_fields, sizeof(rt1_fields) / sizeof(TigerFieldInfo), 228 };static TigerRecordInfo rt2_info = { NULL, // RT2 is handled specially in the code below; the only 0, // thing from this structure that is used is: 208 // <--- nRecordLength };static TigerFieldInfo rt3_2000_Redistricting_fields[] = { // fieldname fmt type OFTType beg end len bDefine bSet bWrite { "TLID", 'R', 'N', OFTInteger, 6, 15, 10, 0, 0, 1 }, { "STATE90L", 'L', 'N', OFTInteger, 16, 17, 2, 1, 1, 1 }, { "STATE90R", 'L', 'N', OFTInteger, 18, 19, 2, 1, 1, 1 }, { "COUN90L", 'L', 'N', OFTInteger, 20, 22, 3, 1, 1, 1 }, { "COUN90R", 'L', 'N', OFTInteger, 23, 25, 3, 1, 1, 1 }, { "FMCD90L", 'L', 'N', OFTInteger, 26, 30, 5, 1, 1, 1 }, { "FMCD90R", 'L', 'N', OFTInteger, 31, 35, 5, 1, 1, 1 }, { "FPL90L", 'L', 'N', OFTInteger, 36, 40, 5, 1, 1, 1 }, { "FPL90R", 'L', 'N', OFTInteger, 41, 45, 5, 1, 1, 1 }, { "CTBNA90L", 'L', 'N', OFTInteger, 46, 51, 6, 1, 1, 1 }, { "CTBNA90R", 'L', 'N', OFTInteger, 52, 57, 6, 1, 1, 1 }, { "AIR90L", 'L', 'N', OFTInteger, 58, 61, 4, 1, 1, 1 }, { "AIR90R", 'L', 'N', OFTInteger, 62, 65, 4, 1, 1, 1 }, { "TRUST90L", 'L', 'A', OFTString, 66, 66, 1, 1, 1, 1 }, { "TRUST90R", 'L', 'A', OFTString, 67, 67, 1, 1, 1, 1 }, { "BLK90L", 'L', 'A', OFTString, 70, 73, 4, 1, 1, 1 }, { "BLK90R", 'L', 'A', OFTString, 74, 77, 4, 1, 1, 1 }, { "AIRL", 'L', 'N', OFTInteger, 78, 81, 4, 1, 1, 1 }, { "AIRR", 'L', 'N', OFTInteger, 82, 85, 4, 1, 1, 1 }, { "ANRCL", 'L', 'N', OFTInteger, 86, 90, 5, 1, 1, 1 }, { "ANRCR", 'L', 'N', OFTInteger, 91, 95, 5, 1, 1, 1 }, { "AITSCEL", 'L', 'N', OFTInteger, 96, 98, 3, 1, 1, 1 }, { "AITSCER", 'L', 'N', OFTInteger, 99, 101, 3, 1, 1, 1 }, { "AITSL", 'L', 'N', OFTInteger, 102, 106, 5 , 1, 1, 1 }, { "AITSR", 'L', 'N', OFTInteger, 107, 111, 5, 1, 1, 1 }};static TigerRecordInfo rt3_2000_Redistricting_info = { rt3_2000_Redistricting_fields, sizeof(rt3_2000_Redistricting_fields) / sizeof(TigerFieldInfo), 111 };static TigerFieldInfo rt3_fields[] = { // fieldname fmt type OFTType beg end len bDefine bSet bWrite { "TLID", 'R', 'N', OFTInteger, 6, 15, 10, 0, 0, 1 }, { "STATE90L", 'L', 'N', OFTInteger, 16, 17, 2, 1, 1, 1 }, { "STATE90R", 'L', 'N', OFTInteger, 18, 19, 2, 1, 1, 1 }, { "COUN90L", 'L', 'N', OFTInteger, 20, 22, 3, 1, 1, 1 }, { "COUN90R", 'L', 'N', OFTInteger, 23, 25, 3, 1, 1, 1 }, { "FMCD90L", 'L', 'N', OFTInteger, 26, 30, 5, 1, 1, 1 }, { "FMCD90R", 'L', 'N', OFTInteger, 31, 35, 5, 1, 1, 1 }, { "FPL90L", 'L', 'N', OFTInteger, 36, 40, 5, 1, 1, 1 }, { "FPL90R", 'L', 'N', OFTInteger, 41, 45, 5, 1, 1, 1 }, { "CTBNA90L", 'L', 'N', OFTInteger, 46, 51, 6, 1, 1, 1 }, { "CTBNA90R", 'L', 'N', OFTInteger, 52, 57, 6, 1, 1, 1 }, { "AIR90L", 'L', 'N', OFTInteger, 58, 61, 4, 1, 1, 1 }, { "AIR90R", 'L', 'N', OFTInteger, 62, 65, 4, 1, 1, 1 }, { "TRUST90L", 'L', 'A', OFTInteger, 66, 66, 1, 1, 1, 1 }, { "TRUST90R", 'L', 'A', OFTInteger, 67, 67, 1, 1, 1, 1 }, { "BLK90L", 'L', 'A', OFTString, 70, 73, 4, 1, 1, 1 }, { "BLK90R", 'L', 'A', OFTString, 74, 77, 4, 1, 1, 1 }, { "AIRL", 'L', 'N', OFTInteger, 78, 81, 4, 1, 1, 1 }, { "AIRR", 'L', 'N', OFTInteger, 82, 85, 4, 1, 1, 1 }, { "VTDL", 'L', 'A', OFTString, 104, 107, 4, 1, 1, 1 }, { "VTDR", 'L', 'A', OFTString, 108, 111, 4, 1, 1, 1 }};static TigerRecordInfo rt3_info = { rt3_fields, sizeof(rt3_fields) / sizeof(TigerFieldInfo), 111 };/************************************************************************//* TigerCompleteChain() *//************************************************************************/TigerCompleteChain::TigerCompleteChain( OGRTigerDataSource * poDSIn, const char * pszPrototypeModule ){ poDS = poDSIn; poFeatureDefn = new OGRFeatureDefn( "CompleteChain" ); poFeatureDefn->SetGeomType( wkbLineString ); if (poDS->GetVersion() >= TIGER_2002) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -