We are purchasing a database of zip codes and their corresponding Lat/Long. I want to store cities in a separate table with a lat/long point representing the center of the city. Can I calculate that based on taking all of the zips that belong to that city, getting the min/max points for each direction, and taking the center point of the resulting rectangle?
Is there a more accurate method? I want to avoid purchasing another DB. We haven't purchased the full DB yet so I can't just try it and compare the results to Google Maps.
Well actually ZIP codes do not always encompass cities. Zip codes are arbitrary regions used to defined postal addresses.
Edit: Not always your assumption that the sum of all ZIP Codes will correspond to the city boundary or will retrieve you the correct centroid.
Your best bet is to get a countys table with spatial data in it.
In PostGIS a simple ST_Centroid(GeometryField) would suffice to get you the centroid of a polygon. That works out for any type of polygons.
If you are in the US, probably exists a public county/cities/states dataset availuable on the internet. Consider GIS tools for doing this work.
Would that be very helpful? That might give you something that approximates the geographic center, but normally when you talk about the center of the city, you are talking about the town square, or the commercial center, or the historical center.
Go to google maps for example. If you search for New York, it will take you directly to Times Square. Isn't that really what you expect if you search for the center of that City.
Well, the center of a city is impossible to calculate exactly, as there are probably as many views on what the center is as there are people...
Instead of using just the min/max points of the zip code areas, you could get the average of all positions, that would give you a more weighted position.
If you have an approximate number of people for each zip code you could use that as weight for the points, that would give you a "gravital center" of the population.
City Hall is always used to define the city center, used by the National Transportation and Highways division, all globes and maps.
I would use the average value of the four coordinates of the four borders of the town as the geographical center, using the Google map.
Related
I have lots of places data(tourist attractions) stored in database. Every place has coordination info, such as latitude and longitude. When I randomly choose a route (for example: from somewhere in New York to somewhere in Boston), how can I find the 10 closest places along the route? I guess it's relative to geography algorithms. I'm trying to find a way to minimize the total calculation time and save cell phone battery. Thank you for any suggestions!
One way would be:
Consider the map to be a grid eg of 1km x1km boxes
plot the route and see which of these grid boxes it enters.
for each box, find the places/landmarks in the box which is not computationally expensive if you search your database my min/max longitude/latidtude position where the grid box starts/ends
To show the top N from these, you can calculate the shortest distance for these subset of places rather than the whole dataset.
perhaps this is a simple question.
I have 3 GPS coordinates (one is the current user location). What I want now is to calculate the angle between the user location and the two GPS coordinates. Imagine the user location in the center of the two other points, the three points can be seen as a triangle. And I want to calculate the angle at the user location.
I hope someone can help me because I have no idea how to do this with spherical coordinates like the GPS coordinates I have.
THX - nekro
For short distances (less than 100km, say) you can safely ignore the spherical nature of the calculation and treat the problem as a 2 cartesian coordinate problem. For large distances the spherical geometry gets pretty gnarly. I could probably figure it out, but I don't want to think that hard right now.
Edit:
All you need to do is to convert both coordinates to KM, and then treat it as a cartesian problem. (At a small scale, you can ignore the curved nature of the "lines" and treat them as normal cartesian grid lines, since the curvature is small enough to ignore at that scale)
The distance per degree of latitude is constant. The distance for a degree of longitude changes based on latitude.
Do a google search on "KM per degree of longitude" and find a link that explains it clearly. Here's one: http://www.colorado.edu/geography/gcraft/warmup/aquifer/html/distance.html
You could use thessien polygons and calculate the geometry on those from a strictly GIS perspective. If you have qgis or arcgis this should be fairly simple. These packages offer APIs which might suit your needs.
You're essentially doing two calculations (bearing to (or from) current position to two other positions) and not crosstrack (distance from a great circle line between to other points).
However, both can be found in Ed William's Aviation Formulary which has the most comprehensive collection of formulas for spherical calculations I've found.
You would be looking for "Course between points" which is listed as:
tc1=mod(atan2(sin(lon1-lon2)*cos(lat2),
cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon1-lon2)), 2*pi)
I have a large data set of regions , each of which is defined by a longitude, latitude and a given radius. I have a location point with a a latitude and longitude and I need to determine which of the regions contains my point.
Currently I am using brute force : I compute the distance between the target point and each region's center longitude and latitude ; if the distance is less than the radius of the region, I include the region in in my result.
Obviously this solution is not tenable.
Can GeoHash be used to formulate a solution ?
Edit : The business problem is given a set of cell phone with known ranges and a fixed set of available locations owned by a real estate holding, where is the place for a signal repeater. There are other considerations of course besides location and distance. Otherwise someone will have drive around the country with a signal detection kit -- not optimal . Not a homework question. I have Comp Sci background but GIS is new to me and I am willing to learn.
Edit : I will continue using brute force across several ec2 instances. Not the most optimum solution but it works. Thank you all for proposed solutions but unfortunately given the time and knowledge constraints and vagueness of the methodology, I am not going to be able to try them out.
The usual approach is to use a spatial index like quad tree or kd tree.
To this index you add the rectangular bounds of all circles to build up the index.
Uisng the quad tree:
Query the index which objects overlap a quad node at given position. The result will be some circles , these you check as you described.
quad trees don't like the deletion of elements.
I have seen people asking questions about calculating distance between two geo points and that distance would be the direct line between two points while taking into consideration earth's radius and using the formulas that people have suggested.
In my case I have drawn a bus route on Google map (I am using iOS and kml file that contains the coordinates) and I want to calculate the distance between two bus stops on that route and I want to use the route coordinates that I have described my self. My bus routes are closed loop and there are no shortcuts or multiple ways to get to a point.
Any suggestions how to do that?
thank you,
I need to plot geo locations (lat, lon) on svg maps just like it's done in this demo: http://people.opera.com/danield/svg/where-am-i.svg
I however have 3 blank maps not displaying the whole world. One of them is http://en.wikipedia.org/wiki/File:BlankMap-USA-states-Canada-provinces,_HI_closer.svg
There is seldom or no information about it on the web. I have been looking for a while but it seems like knowledge of the maps is required. I noticed the demo mentioned above first finds the world center, then multiply by a factor. How it's done is not really explained.
And as far as the world center, I wonder if I can find it on a map that's only displaying part of it.
Thanks a lot in advance for any help.
The problem is that the coordinates used to build the SVG are not lat/long. Using the "world center" as (0,0) is a useful convention (place where the prime meridian meets the equator), but it will not allow for a very precise placement due to projection issues.
In your case, the line of latitude between Canada and the US combined with the longitude between Manitoba and Saskatchewan could be used as your "world center" (0,0) coordinate. Find out what the actual lat/long of that point is, then express other lat/long pairs relative to that one.
Again, I should restate that this is not a precise way of locating points, and there will be error especially when you get closer to the edges of the map.