How to get the latitude and longitude in Open layers - reactjs

I am drawing one line from Location A to Location B using React.JS with Open Layers. I wish to get the Latitude and Longitude of the Location A and Location B.
I have added one listener after draw completion. But it is giving the co-ordinates as below . How can I get the latitude and longitude?
Listener:
draw.on('drawend',function(e){
console.log("Co Ordinates :",e.feature.getGeometry())
//console.log("Co Ordinates :",e.feature.getGeometry().getExtent())
});
Console :
Extent and flat coordinates values are printed in console as below
extent_:(4) [8732987.679175382, 1920132.5190330548, 8735555.9637923, 1920254.817578509]
flatCoordinates:(4) [8732987.679175382, 1920132.5190330548, 8735555.9637923, 1920254.817578509]

If you are just looking for a way to convert the coordinates you can use ol.proj.transform(coordinate, source, destination)
Using this
ol.proj.transform([8732987.679175382, 1920132.5190330548], 'EPSG:3857', 'EPSG:4326')
Will give this as output
[78.44976308230713, 16.99405070970775]
Also note that you can use getFirstCoordinate and getLastCoordinate methods on the line feature to get the first and last coordinates.

OpenLayer is working on different location formats like EPSG: 3857, EPSG: 4285 etc.
There are some Transform/Projection api enter link description here
Use this api's and transfer your locations to your desired formats

Related

How to use extra extra_x_ranges, extra_y_ranges with add_tile in bokeh

I want to use long/lat (EPSG:4326) coordinates in a bokeh plot and have a map in the Background.
I tried with the tile provider maps as suggested in bokeh: Mapping geo data.
But the format is in web mercator coordinates (EPSG:3857) and I don't want to convert my coordinates.
The general question how to do this is unanswered in Is it possible to set figure axis_type in bokeh to geographical (long/lat)?
My idea was to use extra axes:
from bokeh.plotting import figure, show
from bokeh.models import Range1d, LinearAxis
from bokeh.tile_providers import CARTODBPOSITRON, get_provider
tile_provider = get_provider(CARTODBPOSITRON)
p = figure(x_range=(-180, 180), y_range=(-90, 90)) # EPSG:4326
# add extra axis
p.extra_x_ranges = {"EPSG:3857x": Range1d(start=-20026376.39, end=20026376.39)}
p.extra_y_ranges = {"EPSG:3857y": Range1d(start=-20048966.10, end=20048966.10)}
# place extra axis
p.add_layout(LinearAxis(x_range_name="EPSG:3857x"), 'above')
p.add_layout(LinearAxis(y_range_name="EPSG:3857y"), 'right')
p.add_tile(tile_provider, x_range_name="EPSG:3857x", y_range_name="EPSG:3857y")
show(p)
But the map is not visible.
Is there a way to use extra axis for a tile_provider?
If you are just asking about displaying lat/lng visually on the axes, then all you have to do is set the axis type to "mercator"
p = figure(x_range=(-2000000, 6000000), y_range=(-1000000, 7000000),
x_axis_type="mercator", y_axis_type="mercator")
This is demonstrated on the documentation page you linked.
If you are asking about using data that is in lan/lng coordinates to plot on a tile plot, then you will need to convert it to Web Mercator first. The underlying coordinate system for tiles is always Web Mercator.
If you are asking about something else, then your question is not clear (please update to clarify).

ArcGIS .NET Converting from WebMercator to Wgs84

I have a set of polygon points that have the SpatialReferences.WebMercator property. I need to convert these points to SpatialReferences.Wgs84 before saving to a database. Ideally I would just keep the WebMercator setting, but the existing database is using the Wgs84 format.
I am using the GeometryEngine class, but I noticed that once I reload the polygon, it is off by some way. It is in a different location. How can I make sure this conversion is accurate?
MapPoint point = new MapPoint(lon, lat, SpatialReferences.WebMercator);
MapPoint convertedPoint = (MapPoint)GeometryEngine.Project(point, SpatialReferences.Wgs84);
So as an example, I just drew a polygon with points -33.9360095288856 18,391141081041, -33,9075206517435 18,390454436898, -33,9303125156119 18,423413355855
After performing the conversion, the points became -36.1141869553583 18.0832273300021, -36.0798547481093 18.0825746003061, -36.1073205139085 18.113902885547

Mapserver projection conversion

I have spent dozens of hour trying to find is it possible to change projection with mapserver with no luck so far. My input format is EPSG 3067 and I need to convert it to EPSG 900913 for Google Map use.
In the MAP object add
PROJECTION "init=epsg:900913" END
this sets the output projection of the map. Then in t LAYER object add
PROJECTION "init=epsg:3067" END
this set the projection that the incoming data for the layer is already in.
You will also need to add the following line to your /usr/share/proj/epsg or the equivalent path if you are on Windows:
Spherical Mercator projection
<900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +over +nadgrids=#null +no_defs <>

Connecting geo coordinate points by lines

I have a set of Geo coordinate points with lat/lon values . I have plotted the points on a map. I want to connect the points by lines. I have tried the Points to Line tool in GIS but it just creates a polygon. I want to draw lines between the from(lon/lat) and to(lon/lat) coordinate points in this data set. Is there a simple way to do it? Here is some sample data.
From_Lon From_Lat To_Lon To_Lat
80.869178 16.357785 78.404167 17.383333
80.159683 12.981479 80.096817 12.992996
80.159412 12.981387 80.159422 12.981405
80.224847 12.975094 78.509808 17.441822
80.27 13.0839 78.509583 17.441693
78.4346 17.5088 80.203153 13.130134
80.201632 13.128197 80.201642 13.128202
80.201661 13.128212 80.037924 12.819227
80.021806 12.783412 80.168016 12.92074

Google Maps coordinates in KML

I'm trying to use kml for rendering geo-coordinates in google maps.
Unfortunately, I have some troubles with coordinates: when I insert in KML coordinates from Google maps, and then pass this KML file to google maps service, placemarks points to another place in the Earth.
Maybe I dont guess format of placemark location for KML ?
Sometimes Google Maps will report coordinates in "Degrees, Minutes, Seconds" (DMS) notation, which can look like this: 37°48'21.0"N 122°27'57.6"W.
KML needs coordinates in "Decimal Degrees" (DD) notation, which would look like this: -122.466001, 37.805828. Note that KML also expects the order Longitude, Latitude, which is different from many other places, which show Latitude then Longitude.
So... if you're somehow getting your coordinates in DMS notation, then you'll need to convert to DD notation, and make sure the Lon,Lat order is correct.
in the KML file i have the LatLng was backwards.
KML => -.709448,54.009222,0
gmaps => 54.009222,-.709448
use pandas to read cvs into df
then use simplekml to export it into lml
Note: coords is (lon,lat,height) # lon, lat, optional height
example:
import simplekml
snet_kml='test.kml'
kml = simplekml.Kml()
for name,lat,lon,height in zip(snet[NAMES[0]], snet[NAMES[1]], snet[NAMES[2]], snet[NAMES[3]]):
kml.newpoint(name=name, coords=[(lon,lat,height)]) # lon, lat, optional height
print("*** Created {}".format(snet_kml))
print(kml.kml())
kml.save(snet_kml)

Resources