Skip to content

Commit 8808230

Browse files
author
Stephanie Reeder
committed
changes to feature geometry
1 parent 34beb9f commit 8808230

File tree

6 files changed

+77
-77
lines changed

6 files changed

+77
-77
lines changed

src/Examples/Sample 1.1.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,9 @@
7878
print "************************************************"
7979
print
8080

81-
ser = odm1service.get_series_by_id(1)
82-
pp.pprint(ser)
83-
ser = odm1service.get_series_by_id(173)
81+
ser = odm1service.get_all_series()
82+
8483
pp.pprint(ser)
85-
if ser:
86-
print ser.variable
8784

8885

8986
print
@@ -92,8 +89,9 @@
9289
print "************************************************"
9390
print
9491

95-
pp.pprint(odm1service.get_values_by_series(1))
96-
pp.pprint(odm1service.get_values_by_series(173))
92+
pp.pprint(odm1service.get_values_by_series(ser[0].id))
93+
9794
print "The end"
9895

9996

97+

src/Examples/Sample.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88

99

1010
#this will be removed when we can installthe api
11-
this_file = os.path.realpath(__file__)
12-
directory = os.path.dirname(os.path.dirname(this_file))
13-
print directory
14-
sys.path.insert(0, directory)
11+
# this_file = os.path.realpath(__file__)
12+
# directory = os.path.dirname(os.path.dirname(this_file))
13+
# print directory
14+
# sys.path.insert(0, directory)
1515

1616
from api.ODMconnection import dbconnection
1717
from api.ODM2.services.readService import *
@@ -23,6 +23,7 @@
2323
#createconnection (dbtype, servername, dbname, username, password)
2424
#session_factory = dbconnection.createConnection('mysql', 'localhost', 'odm2', 'ODM', 'odm')
2525
session_factory = dbconnection.createConnection('mysql', 'jws.uwrl.usu.edu', 'odm2', 'ODM', 'ODM123!!', 2)
26+
# session_factory= dbconnection.createConnection('mssql')
2627

2728

2829

@@ -78,24 +79,25 @@
7879
print "Unable to demo getSamplingFeatureByCode: ", e
7980

8081
#add sampling feature
82+
print "\n------------ Create Sampling Feature --------- \n",
8183
try:
8284
from api.ODM2.models import SamplingFeatures
8385
newsf = SamplingFeatures()
84-
newsf = SamplingFeatures()
85-
newsf.FeatureGeometry = sf.FeatureGeometry
86+
session = session_factory.getSession()
87+
newsf.FeatureGeometry = "POINT(-111.946 41.718)"
8688
newsf.Elevation_m=100
8789
newsf.ElevationDatumCV=sf.ElevationDatumCV
8890
newsf.SamplingFeatureCode= "TestSF"
8991
newsf.SamplingFeatureDescription = "this is a test to add Feature Geomotry"
90-
newsf.SamplingFeatureGeotypeCV= sf.SamplingFeatureGeotypeCV
92+
newsf.SamplingFeatureGeotypeCV= "Point"
9193
newsf.SamplingFeatureTypeCV=sf.SamplingFeatureTypeCV
92-
newsf.SamplingFeatureUUID= sf.SamplingFeatureUUID+"1"
93-
session_factory.getSession().add(newsf)
94-
session_factory.getSession().commit()
95-
print "new sampling deature added to database", newsf
94+
newsf.SamplingFeatureUUID= sf.SamplingFeatureUUID+"2"
95+
session.add(newsf)
96+
session.commit()
97+
print "new sampling feature added to database", newsf
9698

9799
except Exception as e :
98-
print "error adding a sampling feature" + e
100+
print "error adding a sampling feature: " + str(e)
99101

100102

101103
# Drill down and get objects linked by foreign keys

src/api/ODM1_1_1/services/series_service.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,7 @@ def get_series_from_filter(self):
307307
# Pass in probably a Series object, match it against the database
308308
pass
309309

310-
311-
#Data Value Methods
310+
# Data Value Methods
312311
def get_values_by_series(self, series_id):
313312
'''
314313
@@ -492,7 +491,6 @@ def save_series(self, series, dvs):
492491
# there wasn't an existing file to overwrite
493492
raise Exception("Series does not exist, unable to save. Please select 'Save As'")
494493

495-
496494
def save_new_series(self, series, dvs):
497495
""" Create as a new catalog entry
498496
:param series:
@@ -514,7 +512,6 @@ def save_new_series(self, series, dvs):
514512
self._session.rollback()
515513
raise e
516514

517-
518515
#logger.debug("A new series was added to the database, series id: "+str(series.id))
519516
return True
520517

@@ -526,7 +523,6 @@ def save_values(self, values):
526523
"""
527524
values.to_sql(name="datavalues", if_exists='append', con=self._session_factory.engine, index=False)
528525

529-
530526
def create_new_series(self, data_values, site_id, variable_id, method_id, source_id, qcl_id):
531527
"""
532528
@@ -634,7 +630,6 @@ def create_qcl(self, code, definition, explanation):
634630
self._session.commit()
635631
return qcl
636632

637-
638633
def create_qualifier_by_qual(self, qualifier):
639634
self._session.add(qualifier)
640635
self._session.commit()
@@ -671,7 +666,6 @@ def delete_series(self, series):
671666
self._session.delete(delete_series)
672667
self._session.commit()
673668

674-
675669
def delete_values_by_series(self, series):
676670
"""
677671
@@ -738,6 +732,7 @@ def series_exists_quint(self, site_id, var_id, method_id, source_id, qcl_id):
738732
return True
739733
except:
740734
return False
735+
741736
def qcl_exists(self, q):
742737
"""
743738
@@ -784,9 +779,6 @@ def variable_exists(self, v):
784779
return None
785780

786781

787-
788-
789-
790782
####CV_Service
791783

792784
def get_vertical_datum_cvs(self):
@@ -796,6 +788,7 @@ def get_vertical_datum_cvs(self):
796788
def get_samples(self):
797789
result = self._session.query(ODM.Sample).order_by(ODM.Sample.lab_sample_code).all()
798790
return result
791+
799792
def get_site_type_cvs(self):
800793
result = self._session.query(ODM.SiteTypeCV).order_by(ODM.SiteTypeCV.term).all()
801794
return result
@@ -857,7 +850,6 @@ def get_unit_by_id(self, unit_id):
857850
result = self._session.query(ODM.Unit).filter_by(id=unit_id).first()
858851
return result
859852

860-
861853
def copy_series(from_series):
862854
new = ODM.Series()
863855
new.site_id = from_series.site_id

src/api/ODM2/LikeODM1/models.py

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class SpatialReference(Base):
2828
srs_id = Column('srsid', String)
2929
srs_name = Column('srsname', String)
3030
is_geographic = None
31-
#is_geographic = Column('IsGeographic', Boolean)
31+
# is_geographic = Column('IsGeographic', Boolean)
3232
notes = Column('description', String)
3333

3434
def __repr__(self):
@@ -65,21 +65,18 @@ class Site(Base):
6565

6666
local_x = None
6767
local_y = None
68-
local_projection_id = None #Column('LocalProjectionID', Integer, ForeignKey('SpatialReferences.SpatialReferenceID'))
68+
local_projection_id = None # Column('LocalProjectionID', Integer, ForeignKey('SpatialReferences.SpatialReferenceID'))
6969
pos_accuracy_m = None
7070
state = None
7171
county = None
7272
comments = None
7373

74-
75-
7674
# relationships
7775
# TODO @sreeder, Please take a look at this line as it throws: sqlalchemy.exc.InvalidRequestError: Class <class 'ODM2.LikeODM1.model.Site2'> does not have a mapped column named 'lat_long_datum_id'
7876
# :)
79-
#spatial_ref = relationship(SpatialReference, primaryjoin=("SpatialReference.id==Site2.lat_long_datum_id"))
80-
#spatial_ref = relationship(SpatialReference)
81-
#spatial_ref = relationship(SpatialReference, primaryjoin="Site.lat_long_datum_id == SpatialReference.id")
82-
77+
# spatial_ref = relationship(SpatialReference, primaryjoin=("SpatialReference.id==Site2.lat_long_datum_id"))
78+
# spatial_ref = relationship(SpatialReference)
79+
# spatial_ref = relationship(SpatialReference, primaryjoin="Site.lat_long_datum_id == SpatialReference.id")
8380

8481
def __repr__(self):
8582
return "<Site('%s', '%s', '%s')>" % (self.code, self.name, self.elevation_m)
@@ -208,7 +205,6 @@ class Source(Base):
208205
email = source_join.c.odm2_affiliations_primaryemail # Column('Email', String, nullable=False)
209206
address = source_join.c.odm2_affiliations_primaryaddress # Column('Address', String, nullable=False)
210207

211-
212208
@property
213209
def city(self):
214210
return "Unknown"
@@ -233,7 +229,7 @@ def citation(self):
233229
#iso_metadata_id = Column('MetadataID', Integer, ForeignKey('ODM2.ISOMetadata.Metadataid'), nullable=False)
234230
'''
235231
# relationships
236-
#iso_metadata = relationship(ISOMetadata)
232+
# iso_metadata = relationship(ISOMetadata)
237233

238234
def __repr__(self):
239235
return "<Source('%s', '%s', '%s', '%s', '%s', '%s', '%s')>" % \
@@ -530,29 +526,24 @@ class DataValue(Base):
530526
utc_offset = joined_table.c.odm2_timeseriesresultvalues_valuedatetimeutcoffset
531527
site_id = joined_table.c.odm2_featureactions_SFID #joined_table.c.odm2_featureactions_FeAID
532528
variable_id = joined_table.c.odm2_results_variableid
533-
offset_value = None #column_property(-1) ## Question for jeff
534-
offset_type_id = None #column_property(-1)#None ## Question for Jeff
529+
offset_value = None # column_property(-1) ## Question for jeff
530+
offset_type_id = None # column_property(-1)#None ## Question for Jeff
535531
censor_code = joined_table.c.odm2_timeseriesresultvalues_censorcodecv
536532

537533
method_id = joined_table.c.odm2_actions_methodid
538534
source_id = joined_table.c.odm2_actionby_affiliationid
539-
sample_id = column_property(site_id) ## Question for jeff
540-
derived_from_id = None #column_property(-1)
535+
sample_id = column_property(site_id) # Question for jeff
536+
derived_from_id = None # column_property(-1)
541537
quality_control_level_id = joined_table.c.odm2_timeseriesresultvalues_qualitycodecv
542538

543-
qualifier_id = None ## Join with annotations..
544-
# date_time_utc = column_property(local_date_time+utc_offset) ## column propertly datetimeutcoffset
539+
qualifier_id = None # Join with annotations..
540+
# date_time_utc = column_property(local_date_time+utc_offset) ## column property datetimeutcoffset
545541
# @declared_attr
542+
546543
@property
547544
def date_time_utc(cls):
548545
return cls.local_date_time - timedelta(hours=cls.utc_offset)
549546

550-
# @classmethod
551-
# def date_time_utc(cls):
552-
# return select([])
553-
554-
555-
556547
# relationships
557548
# site = relationship(Site, primaryjoin = site_id==Site.id)
558549
variable = relationship(Variable, primaryjoin=variable_id == Variable.id)
@@ -587,22 +578,27 @@ def __repr__(self):
587578
method_table = select([
588579
method_table.c.methodid,
589580
method_table.c.methoddescription,
590-
#method_table.c.organizationid.label('methodorgid'),
581+
# method_table.c.organizationid.label('methodorgid'),
591582

592583
]).alias("odm2_methods")
593584

594585
processing_levels_table = ProcessingLevels().__table__
595-
586+
'''
596587
joined_table_2 = feature_action_table.join(result_aliased_table, feature_action_table.c.FeAID ==
597588
result_aliased_table.c.FAID)
589+
# Obtain TSResults
590+
joined_table_2 = joined_table_2.join(ts_table, joined_table_2.c.odm2_results_RID ==
591+
ts_table.c.resultid)
592+
'''
593+
joined_table_2 = result_aliased_table.join(ts_table, result_aliased_table.c.RID== ts_table.c.resultid)
594+
joined_table_2= joined_table_2.join(feature_action_table, joined_table_2.c.odm2_results_FAID== feature_action_table.c.FeAID)
595+
598596
joined_table_2 = joined_table_2.join(site_join, joined_table_2.c.odm2_featureactions_SFID ==
599597
site_join.c.odm2_sites_samplingfeatureid)
600598
joined_table_2 = joined_table_2.join(variables_table, joined_table_2.c.odm2_results_variableid ==
601599
variables_table.c.variableid)
602600

603-
# Obtain TSResults
604-
joined_table_2 = joined_table_2.join(ts_table, joined_table_2.c.odm2_results_RID ==
605-
ts_table.c.resultid)
601+
606602
# Obtaining Action
607603
joined_table_2 = joined_table_2.join(action_aliased_table, joined_table_2.c.odm2_featureactions_actid ==
608604
action_aliased_table.c.AID)
@@ -666,7 +662,7 @@ class Series(Base):
666662

667663
# begin_date_time_utc = None # Column('BeginDateTimeUTC', DateTime)
668664
# end_date_time_utc = None # Column('EndDateTimeUTC', DateTime)
669-
utc_offset = -7 #joined_table_2.c.odm2_timeseriesresultvalues_valuedatetimeutcoffset
665+
utc_offset = -7 # joined_table_2.c.odm2_timeseriesresultvalues_valuedatetimeutcoffset
670666

671667
@property
672668
def begin_date_time_utc(cls):

src/api/ODM2/apiCustomType.py

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,30 +41,38 @@ def saves_as_bound(cls):
4141

4242
@compiles(cls)
4343
def compile_function(element, compiler, **kw):
44-
return element.__str__()
44+
return element
4545

4646
@compiles(cls, 'postgresql')
4747
def compile_function(element, compiler, **kw):
4848
#print "postgresql Save : %s" % element.__str__()
49-
return element.__str__()
49+
return "%s(%s)"%(element.name, "'POINT(30 10)'")
5050

5151
@compiles(cls, 'mysql')
5252
def compile_function(element, compiler, **kw):
53-
print "mysql Save Table %s Alter column %s" % (element.name, element.__str__())
54-
#return "%s(%s)"%(element.name, "'POINT (30 10)'")
55-
return element.__str__()
53+
name= element.name.split('_')[-1]
54+
55+
# GeomFromText("POINT(30 10)")
56+
# GeomFromText(:featuregeometry)
57+
58+
val = "%s(%s)"%(name, element.clauses.clauses[0])
59+
return val
5660

5761
@compiles(cls, 'sqlite')
5862
def compile_function(element, compiler, **kw):
59-
element.name= element.name.split('_')[-1]
60-
# print element.name
63+
name= element.name.split('_')[-1]
6164
#return "%s(%s)" % (element.name.replace('_', ''), "'POINT (30 10)'")
62-
return element.__str__()
65+
66+
return "%s(%s)"%(name, "'POINT(30 10)'")
6367

6468
@compiles(cls, 'mssql')
6569
def compile_function(element, compiler, **kw):
6670
#return "Geometry::%s(%s, 0)"%(element.name.replace('_', ''), "'POINT (30 10)'")
67-
element.name = "Geometry::%s" % element.name.replace('_', '')
71+
name = "Geometry::%s" % element.name.replace('_', '')
72+
return "%s(%s,0)"%(name, "'POINT(30 10)'")
73+
74+
75+
6876
return cls
6977

7078

@@ -81,7 +89,7 @@ class ST_AsText(FunctionElement):
8189
class ST_AsBinary(FunctionElement):
8290
name = 'ST_AsBinary'
8391

84-
92+
from sqlalchemy import String, type_coerce
8593
class Geometry(GeometryBase):
8694

8795
def column_expression(self, col):
@@ -91,12 +99,15 @@ def column_expression(self, col):
9199
return value
92100

93101
def bind_expression(self, bindvalue):
94-
val = None
95-
try:
96-
val = GeometryBase.bind_expression(self, bindvalue)
97-
except:
98-
pass
99-
val = ST_GeomFromText(bindvalue, type_=self)
102+
103+
#mysql, sqlite
104+
val = func.GeomFromText(bindvalue, type_=self)
105+
106+
#postgresql
107+
#val = func.ST_GeomFromText(bindvalue, type_=self)
108+
#mssql
109+
if val is None:
110+
val = ST_GeomFromText(bindvalue, type_=self)
100111
return val
101112

102113

src/api/ODM2/models.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -545,9 +545,9 @@ class SamplingFeatures(Base):
545545
FeatureGeometry = Column('featuregeometry', Geometry)
546546

547547
def __repr__(self):
548-
return "<SamplingFeatures('%s', '%s', '%s', '%s')>" % (
548+
return "<SamplingFeatures('%s', '%s', '%s', '%s', '%s')>" % (
549549
self.SamplingFeatureCode, self.SamplingFeatureName, self.SamplingFeatureDescription,
550-
self.Elevation_m) # self.FeatureGeometry)
550+
self.Elevation_m, self.FeatureGeometry)
551551

552552

553553
class FeatureActions(Base):
@@ -1401,7 +1401,8 @@ class SamplingFeatureExternalIdentifiers(Base):
14011401
ForeignKey(ExternalIdentifierSystems.ExternalIdentifierSystemID),
14021402
nullable=False)
14031403
SamplingFeatureExternalIdentifier = Column('samplingfeatureexternalidentifier', String(255), nullable=False)
1404-
SamplingFeatureExternalIdentifierURI = Column('samplingfeatureexternalidentifieruri', String(255))
1404+
SamplingFeatureExternalIdentifierURI = Column('samplingfeatureexternalidentiferuri', String(255))
1405+
14051406

14061407
ExternalIdentifierSystemObj = relationship(ExternalIdentifierSystems)
14071408
SamplingFeatureObj = relationship(SamplingFeatures)

0 commit comments

Comments
 (0)