Skip to content

Commit

Permalink
Use (longitude, latitude) coordinate order for WKT
Browse files Browse the repository at this point in the history
  • Loading branch information
invisibleroads committed Feb 15, 2018
1 parent 6f20020 commit 112328b
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 20 deletions.
6 changes: 3 additions & 3 deletions datasets/leona-selected-grid-mv-lines.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
WKT
"LINESTRING (15.7230180309079 -16.5240428342476, 15.7204712822643 -16.45979485215119)"
"LINESTRING (15.7204712822643 -16.45979485215119, 15.6990162260261 -16.39475446682649)"
"LINESTRING (15.6990162260261 -16.39475446682649, 15.67694993024816 -16.36668175282426)"
"LINESTRING (-16.5240428342476 15.7230180309079, -16.45979485215119 15.7204712822643)"
"LINESTRING (-16.45979485215119 15.7204712822643, -16.39475446682649 15.6990162260261)"
"LINESTRING (-16.39475446682649 15.6990162260261, -16.36668175282426 15.67694993024816)"
10 changes: 5 additions & 5 deletions infrastructure_planning/electricity/report.py
Original file line number Diff line number Diff line change
Expand Up @@ -392,9 +392,9 @@ def save_total_lines(

node1_d, node2_d = order_nodes(node1_d, node2_d, edge_order)
wkt = LineString([(
node1_d['latitude'], node1_d['longitude'],
node1_d['longitude'], node1_d['latitude'],
), (
node2_d['latitude'], node2_d['longitude'],
node2_d['longitude'], node2_d['latitude'],
)]).wkt
rows.append([line_length, discounted_cost, edge_order, wkt])
properties_folder = make_folder(join(target_folder, 'properties'))
Expand Down Expand Up @@ -535,7 +535,7 @@ def save_total_map(
'Proposed MV Line Length (m)': node_d.get(
'grid_mv_line_adjusted_length_in_meters'),
'Levelized Cost Per kWh Consumed': levelized_cost,
'WKT': Point(latitude, longitude).wkt,
'WKT': Point(longitude, latitude).wkt,
'FillColor': color_by_technology[technology],
'RadiusInPixelsRange5-10': node_d['peak_demand_in_kw'],
})
Expand All @@ -552,8 +552,8 @@ def save_total_map(
node2_d['peak_demand_in_kw'])
line_length = edge_d['grid_mv_line_adjusted_length_in_meters']
geometry_wkt = LineString([
(node1_d['latitude'], node1_d['longitude']),
(node2_d['latitude'], node2_d['longitude'])]).wkt
(node1_d['longitude'], node1_d['latitude']),
(node2_d['longitude'], node2_d['latitude'])]).wkt
rows.append({
'Name': name,
'Peak Demand (kW)': peak_demand,
Expand Down
8 changes: 3 additions & 5 deletions infrastructure_planning/macros.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from invisibleroads_macros.disk import (
make_enumerated_folder_for, make_folder, remove_safely,
replace_file_extension)
from invisibleroads_macros.geometry import flip_xy, transform_geometries
from invisibleroads_macros.iterable import merge_dictionaries, sort_dictionary
from invisibleroads_macros.table import normalize_key
from networkx import Graph, write_gpickle
Expand Down Expand Up @@ -133,18 +132,17 @@ def run(main_functions, g):
g.update(compute(f, g))
continue
for node_id, node_d in g['infrastructure_graph'].cycle_nodes():
l = merge_dictionaries(node_d, {
v = merge_dictionaries(node_d, {
'node_id': node_id,
'local_overrides': dict(g['demand_point_table'].ix[node_id])})
node_d.update(compute(f, l, g))
node_d.update(compute(f, v, g))
return g


def save_shapefile(target_path, geotable):
if 'wkt' in geotable:
geometries = [wkt.loads(x) for x in geotable['wkt']]
# Shapefiles expect (x, y) or (longitude, latitude) coordinate order
geometries = transform_geometries(geometries, flip_xy)
geometries = [wkt.loads(x) for x in geotable['wkt']]
else:
xys = geotable[['longitude', 'latitude']].values
geometries = [Point(xy) for xy in xys]
Expand Down
4 changes: 0 additions & 4 deletions infrastructure_planning/parsers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import geometryIO
import re
from invisibleroads_macros.geometry import flip_xy, transform_geometries
from invisibleroads_macros.iterable import merge_dictionaries
from pandas import DataFrame, read_csv

Expand Down Expand Up @@ -47,10 +46,7 @@ def load_geotable(path):
elif path.endswith('.zip'):
proj4, geometries, fields, definitions = geometryIO.load(path)
normalize_geometry = geometryIO.get_transformGeometry(proj4)
# Convert to (longitude, latitude)
geometries = [normalize_geometry(x) for x in geometries]
# Convert to (latitude, longitude)
geometries = transform_geometries(geometries, flip_xy)
table = DataFrame(fields, columns=[x[0] for x in definitions])
table['WKT'] = [x.wkt for x in geometries]
else:
Expand Down
6 changes: 3 additions & 3 deletions infrastructure_planning/preprocessors.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def normalize_solar_mini_grid_panel_table(solar_mini_grid_panel_table):


def normalize_grid_mv_line_geotable(grid_mv_line_geotable, demand_point_table):
'Make sure that grid mv lines use (latitude, longitude) coordinate order'
'Make sure that grid mv lines use (longitude, latitude) coordinate order'
raw_geometries = [wkt.loads(x) for x in grid_mv_line_geotable['wkt']]
# Remove incompatible geometries
geometries, xs = [], []
Expand All @@ -93,10 +93,10 @@ def normalize_grid_mv_line_geotable(grid_mv_line_geotable, demand_point_table):
if geometries:
regular = tuple(GeometryCollection(geometries).centroid.coords[0])[:2]
flipped = regular[1], regular[0]
reference = tuple(demand_point_table[['latitude', 'longitude']].mean())
reference = tuple(demand_point_table[['longitude', 'latitude']].mean())
# If the flipped coordinates are closer,
if get_distance(reference, flipped) < get_distance(reference, regular):
# Flip coordinates to get (latitude, longitude) coordinate order
# Flip coordinates to get (longitude, latitude) coordinate order
geometries = transform_geometries(geometries, flip_xy)
grid_mv_line_geotable['wkt'] = [x.wkt for x in geometries]
return {'grid_mv_line_geotable': grid_mv_line_geotable}
Expand Down

0 comments on commit 112328b

Please sign in to comment.