def test(): import os opts = DefaultOptions() opts.logger = Logger() opts.logger.start_debug() opts.sourceFile = os.path.abspath("./testdata/test.gdb/TRAILS_ln") opts.outputFile = "./testdata/test_trails.osm" opts.translator = Translator.get_translator("trails") opts.datasetKey = get_pk_name(opts, 'nps:source_system_key_value') makeosmfile(opts)
def test(): logger = Logger() logger.start_debug() featureclass = './tests/test.gdb/roads_ln' logtable = './tests/test_road_sync.csv' translator = Translator.get_translator('parkinglots') api_server = OsmApiServer('test') api_server.logger = logger api_server.logger.start_debug() xml = None try: xml = arc_build_osm_change_xml(featureclass, logtable, translator, api_server, logger) except ValueError as e: print e if xml is not None: data = Et.tostring(xml, encoding='utf-8') osmchangefile = './tests/test_road_update.osm' with open(osmchangefile, 'w', encoding='utf-8') as fw: fw.write(data) print "Done."
def validation_test(): import OsmApiServer from Translator import Translator server = OsmApiServer.OsmApiServer('test') sde = 'Database Connections/akr_facility_on_inpakrovmais_as_domainuser.sde' test_list = [('./testdata/test.gdb/roads_ln', 'roads'), ('./testdata/test.gdb/trails_ln', 'trails'), ('./testdata/test.gdb/multipoints', 'generic'), ('./testdata/test.gdb/parkinglots_py', 'parkinglots'), ('./testdata/test.gdb/poi_pt', 'poi'), ('./testdata/test.gdb/trails_ln', 'none'), ('./testdata/test.gdb/trails_ln', None), (sde + '/akr_facility.GIS.TRAILS_ln', 'trails'), # crashes python: da.cursor in ArcGIS 10.3 32bit (sde + '/akr_facility.GIS.ROADS_ln', 'roads') ] for src, tname in test_list: print '**** Testing', src, 'with', tname if tname is None: translator = None else: translator = Translator.get_translator(tname) print valid4upload(src, server, translator) print valid4sync(src, translator)
def cmdline(): # Setup program usage usage = """%prog [Options] SRC LOG DST or: %prog --help Creates a file called DST from changes in SRC compared to LOG. SRC is an ArcGIS feature class LOG is an ArcGIS table that describes the features sent to places DST is a OSM change file """ parser = optparse.OptionParser(usage=usage) parser.add_option("-t", "--translator", dest="translator", type=str, help=( "Name of translator to convert ArcGIS features to OSM Tags. " + "Defaults to Generic."), default='generic') parser.add_option("-s", "--server", dest="server", type=str, help=( "Name of server to connect to. I.e. 'places', 'osm', 'osm-dev', 'local'." + "Defaults to 'places'. Name must be defined in the secrets file."), default='places') parser.add_option("-v", "--verbose", dest="verbose", action="store_true", help="Write processing step details to stdout.") parser.add_option("-d", "--debug", dest="debug", action="store_true", help="Write debugging details to stdout.") parser.add_option("--changeset-id", dest="changesetId", type=int, help="Sentinal ID number for the changeset. Only used " + "when an osmChange file is being created. " + "Defaults to -1.", default=-1) parser.set_defaults(verbose=False, debug=False) # Parse and process arguments (options, args) = parser.parse_args() if len(args) < 3: parser.error(u"You must specify a source, log and destination") elif len(args) > 3: parser.error(u"You have specified too many arguments.") # Input and output file featureclass = args[0] logtable = args[1] osmchangefile = args[2] if os.path.exists(osmchangefile): parser.error(u"The destination file exist.") # Translator translator = Translator.get_translator(options.translator) # API Server if options.server: api_server = OsmApiServer(options.server) else: api_server = OsmApiServer('places') online = api_server.is_online() if api_server.error: print api_server.error sys.exit(1) if not online: print "Server is not online right now, try again later." sys.exit(1) if not api_server.is_version_supported(): print "Server does not support version " + api_server.version + " of the OSM" sys.exit(1) logger = None if options.verbose or options.debug: logger = Logger() if options.debug: logger.start_debug() api_server.logger = logger # Build Change XML xml = None try: xml = arc_build_osm_change_xml(featureclass, logtable, translator, api_server, logger) except (ValueError, TypeError) as e: print e # Output results if xml: # TODO: do exception checking data = Et.tostring(xml, encoding='utf-8') with open(osmchangefile, 'w', encoding='utf-8') as fw: fw.write(data) print "Done."
def makeosmfile(options): """ Save or return (as an xml string) an OsmChange File. :rtype : None, or (error string, None) or (None, xml_string) on success :param options: a DefaultOptions() object with the input and control parameters :return: (basestring, basestring) """ # Set/Reset/Clear the global state (list of geometries and features) Geometry.elementIdCounter = options.id Geometry.geometries = [] Feature.features = [] global vertices vertices = {} try: if options.outputFile is None: options.logger.info(u"Preparing to convert '{0:s}'." .format(options.sourceFile)) else: options.logger.info(u"Preparing to convert '{0:s}' to '{1:s}'." .format(options.sourceFile, options.outputFile)) except AttributeError: pass if not options.translator: try: options.logger.info(u"Loading translator '{0:s}'.".format(options.translationMethod)) except AttributeError: pass translator = Translator.get_translator(options.translationMethod) if translator.translation_module is None: try: options.logger.error(translator.error) except AttributeError: pass else: try: options.logger.info(u"Successfully loaded '{0:s}' translation method ('{1:s}').".format( translator.name, translator.path)) for function in translator.function_status: options.logger.info(u"{1:s} method for function '{0:s}'".format( function, translator.function_status[function])) except AttributeError: pass options.translator = translator parsedata(options) if options.mergeNodes: mergepoints(options) if options.mergeWayNodes: mergewaypoints(options) options.translator.transform_pre_output( Geometry.geometries, Feature.features) error, data = output_xml(options) if options.outputFile: with open(options.outputFile, 'w', encoding='utf-8') as fw: fw.write(data) try: options.logger.info(u"Wrote {0:d} elements to file '{1:s}'" .format(-1 * Geometry.elementIdCounter, options.outputFile)) except AttributeError: pass else: try: options.logger.info(u"Returning {0:d} converted elements".format(-1 * Geometry.elementIdCounter)) except AttributeError: pass return error, data