4
$\begingroup$

I have a list of geographical coordinates(maybe the coordinates are not that accurate, but the problem is not that vital):

 geodata = {{"30\[Degree]16'38.43''N", 
 "120\[Degree]10'55.54''E"}, {"30\[Degree]16'18.17''N", 
 "120\[Degree]11'2.03''E"}, {"30\[Degree]15'58.53''N", 
 "120\[Degree]11'2.58''E"}, {"30\[Degree]15'38.9''N", 
 "120\[Degree]11'0.67''E"}, {"30\[Degree]15'29.61''N", 
 "120\[Degree]11'0.63''E"}, {"30\[Degree]15'21.84''N", 
 "120\[Degree]10'59.94''E"}, {"30\[Degree]15'10.91''N", 
 "120\[Degree]10'57.55''E"}, {"30\[Degree]15'52.85''N", 
 "120\[Degree]12'48.06''E"}, {"30\[Degree]15'46.65''N", 
 "120\[Degree]12'25.2''E"}, {"30\[Degree]15'36.61''N", 
 "120\[Degree]12'10.54''E"}, {"30\[Degree]15'26.53''N", 
 "120\[Degree]11'59.61''E"}, {"30\[Degree]15'16.68''N", 
 "120\[Degree]11'45.45''E"}, {"30\[Degree]15'1.32''N", 
 "120\[Degree]11'40.07''E"}, {"30\[Degree]14'51.96''N", 
 "120\[Degree]11'36.82''E"}, {"30\[Degree]14'35.73''N", 
 "120\[Degree]11'22.55''E"}, {"30\[Degree]15'40.19''N", 
 "120\[Degree]13'10.21''E"}, {"30\[Degree]15'28.39''N", 
 "120\[Degree]13'0.05''E"}, {"30\[Degree]15'9.78''N", 
 "120\[Degree]12'43.92''E"}, {"30\[Degree]14'58.1''N", 
 "120\[Degree]12'33.66''E"}, {"30\[Degree]14'38.61''N", 
 "120\[Degree]12'16.68''E"}, {"30\[Degree]14'33.41''N", 
 "120\[Degree]12'12.38''E"}, {"30\[Degree]14'21.62''N", 
 "120\[Degree]12'1.76''E"}, {"30\[Degree]14'51.43''N", 
 "120\[Degree]12'7.32''E"}, {"30\[Degree]14'59.66''N", 
 "120\[Degree]12'1.47''E"}, {"30\[Degree]15'7.55''N", 
 "120\[Degree]11'55.81''E"}, {"30\[Degree]15'13.21''N", 
 "120\[Degree]11'51.7''E"}} // GeoPosition;

And I want to show those points in one picture with the background being the local map.

At first I tried

GeoGraphics[GeoMarker[geodata], ImageSize -> 600]

as you can see,

here

there should be a rivulet at every geomarker, just as the one on the left of the picture. But the map Mathematica originally provided is not precise enough, the rest rivulets are not shown here(Those rivulets are very important!). Then I used GeoStyling["ReliefMap"] and GeoStyling["ContourMap"] to specify a small region just to make it present better,

<< "ComputationalGeometry`";
GeoGraphics[{GeoStyling["ContourMap"], Polygon[#]},ImageSize -> 600] &[
Extract[geodata[[1]], List /@ ConvexHull[geodata[[1]]]] // 
GeoPosition]

(Here ComputationalGeometry package and ConvexHull are used to generate a convexhull, they don't matter much) but you will see that the polygon is just a piece of green, the same problem still remains.

So what should I do to make the map more precise that can show the small rivulets? Thanks!

Edit: I have thought to use google earth to screenshot the map, but the rivulets are too thin to distinguished from the background, it's hard to use image-processing method.

And, if I use google map, but google map doesn't support multi-geomarkers like 26, I can't show every geomarkers on google map. Or else, I firstly take the screenshot, then add the geomarkers, but I think it's not easy to place the geomarkers at accurate places.

$\endgroup$
6
$\begingroup$

What datum was used for your geodata? Google Maps uses WGS84/Pseudo-Mercator (http://en.wikipedia.org/wiki/Web_Mercator) and it does not seem to align well with your data.

The following was copied from Mark McClure (How to combine more locations (GPS coordinates inside one city) with Google map?)

geodata = {
    {"30\[Degree]16'38.43''N", 
     "120\[Degree]10'55.54''E"}, {"30\[Degree]16'18.17''N", 
     "120\[Degree]11'2.03''E"},
    {"30\[Degree]15'58.53''N", 
     "120\[Degree]11'2.58''E"}, {"30\[Degree]15'38.9''N", 
     "120\[Degree]11'0.67''E"},
    {"30\[Degree]15'29.61''N", 
     "120\[Degree]11'0.63''E"}, {"30\[Degree]15'21.84''N", 
     "120\[Degree]10'59.94''E"},
    {"30\[Degree]15'10.91''N", 
     "120\[Degree]10'57.55''E"}, {"30\[Degree]15'52.85''N", 
     "120\[Degree]12'48.06''E"},
    {"30\[Degree]15'46.65''N", 
     "120\[Degree]12'25.2''E"}, {"30\[Degree]15'36.61''N", 
     "120\[Degree]12'10.54''E"},
    {"30\[Degree]15'26.53''N", 
     "120\[Degree]11'59.61''E"}, {"30\[Degree]15'16.68''N", 
     "120\[Degree]11'45.45''E"},
    {"30\[Degree]15'1.32''N", 
     "120\[Degree]11'40.07''E"}, {"30\[Degree]14'51.96''N", 
     "120\[Degree]11'36.82''E"},
    {"30\[Degree]14'35.73''N", 
     "120\[Degree]11'22.55''E"}, {"30\[Degree]15'40.19''N", 
     "120\[Degree]13'10.21''E"},
    {"30\[Degree]15'28.39''N", 
     "120\[Degree]13'0.05''E"}, {"30\[Degree]15'9.78''N", 
     "120\[Degree]12'43.92''E"},
    {"30\[Degree]14'58.1''N", 
     "120\[Degree]12'33.66''E"}, {"30\[Degree]14'38.61''N", 
     "120\[Degree]12'16.68''E"},
    {"30\[Degree]14'33.41''N", 
     "120\[Degree]12'12.38''E"}, {"30\[Degree]14'21.62''N", 
     "120\[Degree]12'1.76''E"}, {"30\[Degree]14'51.43''N", 
     "120\[Degree]12'7.32''E"}, {"30\[Degree]14'59.66''N", 
     "120\[Degree]12'1.47''E"},
    {"30\[Degree]15'7.55''N", 
     "120\[Degree]11'55.81''E"}, {"30\[Degree]15'13.21''N", 
     "120\[Degree]11'51.7''E"}} //
   GeoPosition;
markerString[{lat_, lng_}] := 
  "&markers=" <> ToString[lat] <> "," <> ToString[lng];
url = StringJoin[Flatten[{
     "http://maps.googleapis.com/maps/api/staticmap?sensor=false&size=800x500&\
zoom=14",
     markerString /@ geodata[[1]]}]];
Import[url]

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.