mapa na formatce - jak generować pozycje na niej ?

0

Mam na formatce wrzuconą mapę virtualearth w ten oto sposób:

private void generujMape()
        {
            Location loc = new Location();

            loc.Latitude = 47.6;

            loc.Longitude = -122.33;

            webBrowser1.ObjectForScripting = loc;

            StringBuilder markUp = new StringBuilder();

            markUp.Append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd/\">");

            markUp.Append("<html>\n");

            markUp.Append("<head>\n");

            markUp.Append("<title>:)</title>\n");

            markUp.Append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n");

            markUp.Append("<script type=\"text/javascript\" src=\"http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1\"></script>\n");

            markUp.Append("<script type=\"text/javascript\">\n");



            //Script to create the map and display it

            markUp.Append("var map = null;\n");

            markUp.Append("pinid=0; function GetMap(){latLong=null; map = new VEMap('myMap'); if(window.external != null){latLong = new VELatLong(window.external.Latitude,window.external.Longitude);} map.LoadMap(latLong); }\n");



            //Script to Add Pushpins

            markUp.Append("function AddPushpin(lat,lon)\n{map.SetCenter(new VELatLong(lat,lon));\n\tvar shape = new VEShape(VEShapeType.Pushpin, new VELatLong(lat,lon));\n\tshape.SetTitle('test');\n\tshape.SetDescription('This is shape number '+ pinid);\n\tpinid++;\n\tmap.AddShape(shape);\n}");



            //Script To Resize map

            markUp.Append("function ResizeMap(w,h)\n{\n\tmap.Resize(w, h);\n\tmyMap.style.width = w + \"px\";\n\tmyMap.style.height = h + \"px\";\n}");

            markUp.Append("</script>\n");



            markUp.Append("<body onload=\"GetMap();\">");

            markUp.AppendFormat("<div id='myMap' style=\"position:relative; width:{0}px; height:{1}px;\"></div>\n", webBrowser1.Width, webBrowser1.Height);

            markUp.Append("</body>\n");

            markUp.Append("</html>\n");

            webBrowser1.DocumentText = markUp.ToString();
        }

na tej mapie mam "wrzucone" 3 pictureboxy i chciałbym aby co ileś sekund zmieniała się pozycja tych pictureboxów.
Za nim to zrobię, chciałbym aby położenie tych 3 pictureboxów było tylko w pewnych miejscach: np. warszawa - jeśli to jest jakieś skomplikowane to kij, niech cały świat będzie brany pod uwagę (wygeneruje więcej pictureboxów).

0

najprościej to użyj Timer-a
nadaje sie akurat do czynności powtarzanych co określony odstęp czasu

0

okay :) ale jak te współrzędne brać?
jak to na tej mapie pokazywać ?
liczby mogę generować sobie z d**y, ale nie wiem jak te pozycji wpisywać.

0

hm, no normalnie, PictureBox ma właściwość Location ktora jest typu Point
więc:
PictureBox_1.Location = new Point(x,y);
;P

0

ok to było głupie pytanie^^ teraz je sprecyzuje: podaje współrzędne z GPS-a...i jak te wyświetlić na mapie... np. mam pokazaną warszawę, wpisuje obok w np. textboxie współprzędne nowego jorku i chce aby mapa wyświetliła mi NY

0

hm, a masz mapę całego świata?
więc przykładowo jak mapa całego świata ma 10.000pix na 10.000pix
a ekran do wyświetlania ma 400x400
i chcesz wyświetlić obszar wokoł punktu 9000x4.000
więc:
przykładowo Bitmapa ma taka metode jak Clone(rectangle rec, i cos tam dalej);
rectangle okresla prostokąt do skopiowania.
więc Twoja bitmapa do wyświetlenia bedzie miała postać
Display_Bitmap = World_Map.Clone(new Rectangle(9000-200,4000-200,400,400),jakis tam pixelformat);

to tak z głowy pisane, nie wiem jak funkcjonuje Twoj program.

0

nie chce być niemiły ale weź sobie wsadź ten mój kod z pierwszego posta do Formy i zobacz jak to działa.
Dokładnie tak samo jak na maps.google.com: masz stały rozmiar okienka w którym masz mapę, w momencie gdy "chwycisz" myszką mapę i zaczniesz przeciągać to mapa tez się przeciąga: ten kod na górze działa dokładnie tak samo.

0

ne0 czemu chcesz kwadratowe kolo odkryc? D:D
w aplikacji forms do WebBrowser wrzycasz z palca generowany html, ktory mape wyswietla z weba
dlaczego nie uzyjesz javascriptu, nie wiem jak mapy MS, ale pewnie podobnie jak google maja jakies api w js do jakis manipulacji nimi
w js mozesz tez sobie timer odpalic

0

Ponieważ jest to jedyna rzecz jaką do tej pory znalazłem która działa. Po drugie dlatego że nie bardzo mam teraz już czas na szukanie Twojego rozwiązania, jeśli masz gdzieś gotowe rozwiązania to podaj - postaram się skorzystać, ale jeśli słyszę o jakimś API to podejrzewam że będę musiał się nieźle z tym namęczyć...

0

popraw jesli cos zle zrozumialem
mape wyswietlasz w webbrowser i usem moze ja myszka przesuwac, ja np. maps.google.com
na webbrowser rysujesz iles tam picturebox'ow, ktore maja rysowac sie w odpowiednich miejscach oraz przemieszczac same w czasie, czy chodzi o zmiane ich pozycji, kiedy zmieni sie pozycja mapy

jesli to chcesz osiagnac, to jak mowie: nie podążaj tą drogą (jak mawial pewien pan w tv :))

mapa w webbrowser przesuwa sie uzywajac ajax'a a ty w formsach nie wiesz jakie wspolrzedne geog. ma obecnie pokazywany srodek mapy
api do map google'a jest dosc proste, nie sadze zeby MS jakos udziwnil swoje
poza tym jak chesz byc programista jesli nie chcesz sie uczyc
zamiast sie pieklic kiedy chcemy ci pomoc, po prostu zrob to jak powinno byc dobrze i sluchaj rad jesli o nie prosisz

0

nie piekle się :)
po prostu chce iść najprostszą linią oporu aby to działało tylko wizualnie - w moim projekcie który robię to jest taki dodatek - bajer.
Osobiście nie jestem i nie będę programistą :)
Spróbuje z tymi api jak mówisz...

dobra: załóżmy że używam google api-> tam jest kod w html-u, czy jest jakaś inna opcja aby użyć tego kodu ale nie tak jak ja to robiłem poprzez "markUp.Append("<html>\n");" tylko cały kod od razu w jednym takim append?

0

string s = @"jakis text
to dalej jest ten text
i kolejna linia, chce miec cudzysłow, a nie apostrof, wiec musze napisac dwa ""
i teraz koniec";

analogicznie kazdy string mozna w tez sposob napisac w c#
.Append(@"i tu caly kod
wiecej kodu
wiecej kodu");

0

z tego:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps API Sample</title>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q"></script>
    <script type="text/javascript">

    function initialize() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
      }
    }

    </script>
  </head>
  <body onload="initialize()" onunload="GUnload()" style="font-family: Arial;border: 0 none;">
    <div id="map_canvas" style="width: 500px; height: 300px"></div>
  </body>
</html>

robię

 markUp.Append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\">  <head>    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"/>    <title>Google Maps API Sample</title>    <script src=\"http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q\"></script>   <script type=\"text/javascript\">\n");

            markUp.Append("function initialize() {     if (GBrowserIsCompatible()) {    var map = new Map2(document.getElementById(\"map_canvas\"));    map.setCenter(new GLatLng(37.4419, -122.1419), 13);      }    }\n");
            markUp.Append(" </script>  </head> <body onload=\"initialize()\" onunload=\"GUnload()\" style=\"font-family: Arial;border: 0 none;\">   <div id=\"map_canvas\" style=\"width: 500px; height: 300px\"></div> </body></html>\n");

i to nie działa... nie wiem czemu :/

0

ne0 czytanie ze zrozumieniem!
dobra łopatologicznie

  1. przed wielolinijkowym stringiem dajesz @ (dla jaj sobie tego tam nie wpisalem)
  2. aby w takim stringu "wyescapowac" cudzysłów musisz go poprzedzic takze cudzyslowem a nie \

markUp.Append(@"<!DOCTYPE html PUBLIC ""-W3CDTD XHTML 1.0 Strict*EN"" http:*www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">...

0

OK;
teraz pytanie drugie, mam takie coś:

 function initialize() {
      if (GBrowserIsCompatible()) {
      
        var map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(37.88, -122.442626), 10);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
    
        GEvent.addListener(map,"click", function(overlay,latlng) {
          if (overlay) {
            // ignore if we click on the info window
            return;
          }
          var tileCoordinate = new GPoint();
          var tilePoint = new GPoint();
          var currentProjection = G_NORMAL_MAP.getProjection();
          tilePoint = currentProjection.fromLatLngToPixel(latlng, map.getZoom());
          tileCoordinate.x = Math.floor(tilePoint.x / 256);
          tileCoordinate.y = Math.floor(tilePoint.y / 256);
          var myHtml = "Latitude: " + latlng.lat() + "<br/>Longitude: " + latlng.lng() +
            "<br/>The Tile Coordinate is:<br/> x: " + tileCoordinate.x +
            "<br/> y: " + tileCoordinate.y + "<br/> at zoom level " + map.getZoom();  
          map.openInfoWindow(latlng, myHtml);
        });
      }
    }

kod ten pokazuje "dymek" ze współrzędnymi X i Y, pytanie jest: jak te info przekazać dalej do zmiennych na formatce ? Np. abym mógł ustawić te pictureboxy które mają "jeździć" po tej mapie.

0

no i tu dochodzimy do problemu nie do przejscia (ale moze czegos nie wiem)
kontrolka webbrowser nie zostala pomyslana do tego aby aplikacja w ktorej jest osadzona mogla byc serwerem aplikacji webowych
ty potrzebujesz ze strony web wyslac informacje do serwera (ajax) o wsp. geog., a aplikacja forms nie jest serwerem web

/* jesli sie myle niech mnie ktos poprawi :) */

dlatego od razu sugerowalem uzycie api map i javascriptu
moze lepiej napisz co maja oznaczac te pictureboxy poruszajace sie po mapie i zasady poruszania, a pewnie ktos wskaze ci rozwiazanie przy uzyciu api map i js

0

Mają to być dwa zdjęcia autek: jedno zdjęcie to autko czerwona a drugie to autko zielone. Ich ilość będzie z góry założona w jakieś tablicy czy gdzie kolwiek indziej, poruszać się mają po tej mapie na przypadkowych lokalizacjach. tyle

[edit]
tak sobie teraz myślę: że w sumie to mogą być dwa rodzaje "pinesek" z tych map. jedna koloru zielonego a druga czerwona i niech przypadkowo one będą się poruszać.

0

Muszę się dostać do tych pozycji. Czy mógłbyś mi wytłumaczyć jak się zabrać za to api map i javascriptu?

0

webbrowser wyswietla kod html, jesli mialbys cos pobrac ze strony (wsp. geog.) to strona musialby odpowiedziec do serwera, twoja aplikacja forms nie jest serwerem
zdaje sie ze ta kontrolka nie zostala pomyslana do takich celow jakie chcesz osiagnac

0

no ok, to rozumiem, ale chodzi mi o wyjaśnienie rozwiązania które zaproponowałeś: api mapy / JS

1 użytkowników online, w tym zalogowanych: 0, gości: 1