def _register_arcgis_url(url, username, password, owner=None, parent=None): """ Register an ArcGIS REST service URL """ # http://maps1.arcgisonline.com/ArcGIS/rest/services baseurl = _clean_url(url) if re.search("\/MapServer\/*(f=json)*", baseurl): # This is a MapService arcserver = ArcMapService(baseurl) if isinstance(arcserver, ArcMapService) and arcserver.spatialReference.wkid in [ 102100, 3857, 900913 ]: return_json = [ _process_arcgis_service(arcserver, owner=owner, parent=parent) ] else: return_json = [{ 'msg': _("Could not find any layers in a compatible projection.") }] else: # This is a Folder arcserver = ArcFolder(baseurl) return_json = _process_arcgis_folder(arcserver, services=[], owner=owner, parent=parent) return HttpResponse(json.dumps(return_json), mimetype='application/json', status=200)
def _verify_service_type(base_url, service_type=None): """ Try to determine service type by process of elimination """ exceptions = [] if service_type in ['WMS', 'OWS', None]: try: service = WebMapService(base_url) except: pass else: return ['WMS', service] if service_type in ['WFS', 'OWS', None]: try: servicewfs = WebFeatureService(base_url) except: pass else: return ['WFS', servicewfs] if service_type in ['TMS', None]: try: service = TileMapService(base_url) except: pass else: return ['TMS', service] if service_type in ['REST', None]: try: service = ArcFolder(base_url) except: pass else: service.services return ['REST', service] if service_type in ['CSW', None]: try: service = CatalogueServiceWeb(base_url) except: raise else: return ['CSW', service] if service_type in ['OGP', None]: #Just use a specific OGP URL for now if base_url == settings.OGP_URL: return ["OGP", None] return [None, None]
def _register_arcgis_url(url,username, password, owner=None, parent=None): """ Register an ArcGIS REST service URL """ #http://maps1.arcgisonline.com/ArcGIS/rest/services baseurl = _clean_url(url) if re.search("\/MapServer\/*(f=json)*", baseurl): #This is a MapService arcserver = ArcMapService(baseurl) return_json = [_process_arcgis_service(arcserver, owner=owner, parent=parent)] else: #This is a Folder arcserver = ArcFolder(baseurl) return_json = _process_arcgis_folder(arcserver, services=[], owner=owner, parent=parent) return HttpResponse(json.dumps(return_json), mimetype='application/json', status=200)
def create_services_from_endpoint(url): """ Generate service/services from an endpoint. WMS, WMTS, TMS endpoints correspond to a single service. ESRI, CWS endpoints corrispond to many services. """ num_created = 0 endpoint = get_sanitized_endpoint(url) try: urllib2.urlopen(endpoint, timeout=10) except Exception as e: print 'ERROR! Cannot open this endpoint: %s' % endpoint message = traceback.format_exception(*sys.exc_info()) return False, message detected = False # test if it is WMS, TMS, WMTS or Esri # WMS try: service = WebMapService(endpoint, timeout=10) service_type = 'OGC:WMS' detected = True service = create_service_from_endpoint( endpoint, service_type, title=service.identification.title, abstract=service.identification.abstract) if service is not None: num_created = num_created + 1 except Exception as e: print str(e) # TMS if not detected: try: service = TileMapService(endpoint, timeout=10) service_type = 'OGC:TMS' detected = True create_service_from_endpoint( endpoint, service_type, title=service.identification.title, abstract=service.identification.abstract) if service is not None: num_created = num_created + 1 except Exception as e: print str(e) # WMTS if not detected: try: service = WebMapTileService(endpoint, timeout=10) service_type = 'OGC:WMTS' detected = True create_service_from_endpoint( endpoint, service_type, title=service.identification.title, abstract=service.identification.abstract) if service is not None: num_created = num_created + 1 except Exception as e: print str(e) # Esri # a good sample is here: https://gis.ngdc.noaa.gov/arcgis/rest/services if not detected: try: esri = ArcFolder(endpoint) services = esri.services service_type = 'ESRI' detected = True # root root_services = process_esri_services(services) num_created = num_created + len(root_services) # folders for folder in esri.folders: folder_services = process_esri_services(folder.services) num_created = num_created + len(folder_services) except Exception as e: print str(e) if detected: return True, '%s service/s created' % num_created else: return False, 'ERROR! Could not detect service type for endpoint %s or already existing' % endpoint
def create_services_from_endpoint(url): """ Generate service/services from an endpoint. WMS, WMTS, TMS endpoints correspond to a single service. ESRI, CWS endpoints corrispond to many services. """ num_created = 0 endpoint = get_sanitized_endpoint(url) try: urllib2.urlopen(endpoint, timeout=10) except Exception as e: print 'ERROR! Cannot open this endpoint: %s' % endpoint message = traceback.format_exception(*sys.exc_info()) return False, message detected = False # test if it is WMS, TMS, WMTS or Esri # WMS try: service = WebMapService(endpoint, timeout=10) service_type = 'OGC:WMS' detected = True service = create_service_from_endpoint( endpoint, service_type, title=service.identification.title, abstract=service.identification.abstract) if service is not None: num_created = num_created + 1 except Exception as e: print str(e) # TMS if not detected: try: service = TileMapService(endpoint, timeout=10) service_type = 'OSGeo:TMS' detected = True create_service_from_endpoint( endpoint, service_type, title=service.identification.title, abstract=service.identification.abstract) if service is not None: num_created = num_created + 1 except Exception as e: print str(e) # WMTS if not detected: try: service = WebMapTileService(endpoint, timeout=10) service_type = 'OGC:WMTS' detected = True create_service_from_endpoint( endpoint, service_type, title=service.identification.title, abstract=service.identification.abstract) if service is not None: num_created = num_created + 1 except Exception as e: print str(e) # Esri # a good sample is here: https://gis.ngdc.noaa.gov/arcgis/rest/services # we can safely assume the following condition (at least it is true for 1170 services) # we need to test this as ArcFolder can freeze with not esri url such as this one: # http://hh.worldmap.harvard.edu/admin/aggregator/service/?q=%2Frest%2Fservices if '/rest/services' in endpoint: if not detected: try: esri = ArcFolder(endpoint) services = esri.services service_type = 'ESRI' detected = True # root root_services = process_esri_services(services) num_created = num_created + len(root_services) # folders for folder in esri.folders: folder_services = process_esri_services(folder.services) num_created = num_created + len(folder_services) except Exception as e: print str(e) if detected: return True, '%s service/s created' % num_created else: return False, 'ERROR! Could not detect service type for endpoint %s or already existing' % endpoint