Initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
require_relative '../../../importer/lib/importer/query_batcher'
|
||||
|
||||
module CartoDB
|
||||
module InternalGeocoder
|
||||
|
||||
class LatitudeLongitude
|
||||
|
||||
def initialize(db, logger = nil)
|
||||
@db = db
|
||||
@logger = logger
|
||||
end
|
||||
|
||||
def geocode(table_schema, table_name, latitude_column, longitude_column)
|
||||
qualified_table_name = "\"#{table_schema}\".\"#{table_name}\""
|
||||
query_fragment_update = %Q{
|
||||
UPDATE #{qualified_table_name}
|
||||
SET
|
||||
the_geom = ST_GeomFromText(
|
||||
'POINT(' || REPLACE(TRIM(CAST("#{longitude_column}" AS text)), ',', '.') || ' ' ||
|
||||
REPLACE(TRIM(CAST("#{latitude_column}" AS text)), ',', '.') || ')', 4326
|
||||
)
|
||||
}
|
||||
query_fragment_where = %Q{
|
||||
REPLACE(TRIM(CAST("#{longitude_column}" AS text)), ',', '.') ~
|
||||
'^(([-+]?(([0-9]|[1-9][0-9]|1[0-7][0-9])(\.[0-9]+)?))|[-+]?180)$'
|
||||
AND REPLACE(TRIM(CAST("#{latitude_column}" AS text)), ',', '.') ~
|
||||
'^(([-+]?(([0-9]|[1-8][0-9])(\.[0-9]+)?))|[-+]?90)$'
|
||||
}
|
||||
|
||||
CartoDB::Importer2::QueryBatcher.new(
|
||||
@db,
|
||||
@logger,
|
||||
!table_has_cartodb_id(table_schema, table_name)
|
||||
).execute_update(
|
||||
%Q{#{query_fragment_update} where #{query_fragment_where}},
|
||||
table_schema, table_name
|
||||
)
|
||||
end
|
||||
|
||||
def table_has_cartodb_id(table_schema, table_name)
|
||||
result = @db.fetch(%Q{
|
||||
select *
|
||||
from information_schema.columns
|
||||
where table_schema = '#{table_schema}'
|
||||
and table_name = '#{table_name}'
|
||||
and column_name = 'cartodb_id'
|
||||
and data_type = 'integer';
|
||||
}).all
|
||||
!result[0].nil?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user