# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET MVC >  بدست آوردن طول و عرض جغرافیایی یک مکان در نقشه ی گوگل مپ

## IR-Developer

سلام من نیاز به امکانی دارم که کاربر بیاد نام یک مکان را بزنه و روی نقشه ی گوگل مپ مکانش را نشون بده . با کلیک کاربر روی نقطه ی مورد نظر طول و عرض جغرافیایی اون را باید بدست بیارم .

چطور باید این کار را بکنم ؟

----------


## niloo17

شما کافیه googlemap را درون صفحه لود کنید . 
با استفاده از کد زیر با کلیک کاربر بر روی نقشه موقعیت جغرافیایی در کنترل مورد نظرتون نمایش داده می شه .

  google.maps.event.addListener(map, "click", function (e) {
                placeMarker(e.latLng, map); 

     });

    function placeMarker(pos, map) {
            if (oldMarkers && oldMarkers.length !== 0) {
                for (var i = 0; i < oldMarkers.length; ++i) {
                    oldMarkers[i].setMap(null);
                }
            }
            if (oldiw && oldiw.length !== 0) {
                for (var i = 0; i < oldiw.length; ++i) {
                    oldiw[i].setMap(null);
                }
            }
            oldMarkers = [];
            oldiw = [];
            var g = google.maps;
            var marker = new g.Marker({
                position: pos,
                map: map
            });
            document.getElementById("Longitude").value = pos.lng();
            document.getElementById("Latitude").value = pos.lat();

            oldMarkers.push(marker);
            var iw = new g.InfoWindow();
            var cont = "<div style='float:right'>موقعیت ملک شما </br>عرض جغرافیایی : " + pos.lat() + "</br> طول جغرافیایی : " + pos.lng() + "</div>";
            iw.setOptions({ content: cont, position: pos, pixelOffset: new g.Size(0, -22) });
            iw.open(map);
            map.panTo(pos);
            oldiw.push(iw);
            document.getElementById("remove").style.display = "block";
        };

----------


## IR-Developer

> شما کافیه googlemap را درون صفحه لود کنید . 
> با استفاده از کد زیر با کلیک کاربر بر روی نقشه موقعیت جغرافیایی در کنترل مورد نظرتون نمایش داده می شه .


مرسی ولی کار نکرد !  با فایرباگ هم تست کردم هرکار میکنم  داخل Event نمیره کد کامل را میزارم شما هم ببینید .:


<!DOCTYPE html>
<html>
<head>
    <script src="http://maps.googleapis.com/maps/api/js"></script>
    <script>
        function initialize() {
            var mapProp = {
                center: new google.maps.LatLng(32.700292, 51.522438),
                zoom: 5,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("googleMap  "), mapProp);
        }
        google.maps.event.addDomListener(window, 'load', initialize);

     
        google.maps.event.addListener(map, "click", function (e) {
            placeMarker(e.latLng, map);

        });

        function placeMarker(pos, map) {
            if (oldMarkers && oldMarkers.length !== 0) {
                for (var i = 0; i < oldMarkers.length; ++i) {
                    oldMarkers[i].setMap(null);
                }
            }
            if (oldiw && oldiw.length !== 0) {
                for (var i = 0; i < oldiw.length; ++i) {
                    oldiw[i].setMap(null);
                }
            }
            oldMarkers = [];
            oldiw = [];
            var g = google.maps;
            var marker = new g.Marker({
                position: pos,
                map: map
            });
            document.getElementById("Longitude").value = pos.lng();
            document.getElementById("Latitude").value = pos.lat();

            oldMarkers.push(marker);
            var iw = new g.InfoWindow();
            var cont = "<div style='float:right'>موقعیت ملک شما </br>عرض جغرافیایی : " + pos.lat() + "</br> طول جغرافیایی : " + pos.lng() + "</div>";
            iw.setOptions({ content: cont, position: pos, pixelOffset: new g.Size(0, -22) });
            iw.open(map);
            map.panTo(pos);
            oldiw.push(iw);
            document.getElementById("remove").style.display = "block";
        };


    </script>
</head>

<body></body>

</html>

----------


## niloo17

addListener را باید داخل خود initialize می گذاشنید .


 function initialize() {

            var latlngPos = new google.maps.LatLng(31.919607, 54.378544);
            var mapProp = {
                center: latlngPos,
                zoom: 13,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                panControl: true
            };
            var map = new google.maps.Map(document.getElementById("googleMap  "), mapProp);
            google.maps.event.addListener(map, "click", function (e) {
                placeMarker(e.latLng, map);
            });
        }

        var oldMarkers = null;
        var oldiw = null;

        function placeMarker(pos, map) {
            if (oldMarkers && oldMarkers.length !== 0) {
                for (var i = 0; i < oldMarkers.length; ++i) {
                    oldMarkers[i].setMap(null);
                }
            }
            if (oldiw && oldiw.length !== 0) {
                for (var i = 0; i < oldiw.length; ++i) {
                    oldiw[i].setMap(null);
                }
            }
            oldMarkers = [];
            oldiw = [];
            var g = google.maps;
            var marker = new g.Marker({
                position: pos,
                map: map
            });
            document.getElementById("Longitude").value = pos.lng();
            document.getElementById("Latitude").value = pos.lat();

            oldMarkers.push(marker);
            var iw = new g.InfoWindow();
            var cont = "<div style='float:right'>موقعیت ملک شما </br>عرض جغرافیایی : " + pos.lat() + "</br> طول جغرافیایی : " + pos.lng() + "</div>";
            iw.setOptions({ content: cont, position: pos, pixelOffset: new g.Size(0, -22) });
            iw.open(map);
            map.panTo(pos);
            oldiw.push(iw);
            document.getElementById("remove").style.display = "block";
        };

        google.maps.event.addDomListener(window, 'load', initialize);

----------


## IR-Developer

از این کد استفاده کردم دیگه نقشه هم لود نمیشه .

پروژه را میزارم لطفا شما ی نگاه بکنید ببینید مشکلش کجاست . 

http://up.vbiran.ir/uploads/20619142...apApipart1.rar

http://up.vbiran.ir/uploads/10651429...apApipart2.rar
تشکر

----------


## niloo17

فایل صفحه ای که  در سایتم استفاده کرده ام، پیوست کردم .

----------


## IR-Developer

> فایل صفحه ای که  در سایتم استفاده کرده ام، پیوست کردم .


تشکر ولی باز نقشه را نمیاره . 

لایبری چیزی توی Layout میخواد ؟

لطفا اگر میشه همین کدها را توی یک پروژه ی جدید کپی کنید و بزارید .

مرسی

----------


## IR-Developer

حل شد مرسی .

اون آی دی Div که باید نقشه توش نمایش داده بشه با اون چیزی که توی جاوااسکریپت گرفته شده بود فرق میکرد .

با کد شما کارم راه افتاد .

تشکر :قلب:

----------


## IR-Developer

دوست عزیز طول و عرض جغرافیایی یک نقطه که با این کد شما بدست میاد  به این شکله  : 

51.6702675819397 , 51.6702675819397

ولی اونی که خود نقشه گوگل بصورت آنلاین میده اینه :

32.658603, 51.669624

با جستجویی که کردم ظاهرا یک محاسبه ایی باید این وسط انجام بشه تا نتیجه مثل اون بشه ولی نفهمیدم چطوری .

باید چکار کنم ؟

----------


## niloo17

طول و عرضی که این کد میاره هیج مشکلی نداره و به چیز دیگه ای نباید تبدبل بشه.
اگه همین مقادیر را در نقشه لود کنید می بینید که مشکلی نداره . من با همین مقادیر دوباره موقعیت مکان را در نقشه به کاربر نمایش میدهم .

----------


## IR-Developer

> طول و عرضی که این کد میاره هیج مشکلی نداره و به چیز دیگه ای نباید تبدبل بشه.
> اگه همین مقادیر را در نقشه لود کنید می بینید که مشکلی نداره . من با همین مقادیر دوباره موقعیت مکان را در نقشه به کاربر نمایش میدهم .


من تست کردم و طول و عرض جغرافیایی یک نقطه را که این کد میداد با اونی که آنلاین گرفتم مقایسه کردم اصلا شباهتی به هم نداشتن .

حتی وقتی اونی که کد میده را به عنوان نقطه ی شروع نقشه توی کد میزارم نا کجا آباد را نشون میده .

مثلا این را ببینید : 

  function initialize() {

            var latlngPos = new google.maps.LatLng(32.646602, 51.667866);
            var mapProp = {
                center: latlngPos,
                zoom: 13,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                panControl: true
            };
            var map = new google.maps.Map(document.getElementById("googleMap  "), mapProp);
            google.maps.event.addListener(map, "click", function (e) {
                placeMarker(e.latLng, map);
               
            });
        }

این :  32.646602, 51.667866   عددی هست که نقشه آنلاین گوگل بهم داد و درست نشون میده .

ولی این : 51.670846939086914 ,   51.670846939086914         عددی هست که نقشه ی اون کد بهم داد و همون نقطه هست .

 به عنوان نقطه ی شروع میزنم مکان اشتباه بهم نشون میده . نفهمیدم دلیلش چیه !

----------


## niloo17

این دو مقدار که در کد زیر ست می شه ، اون محدوده ای هست که می خوایم نمایش بدیم . مثلا من برای سایت خودم مرکز شهر یزد را ست کردم .


 new google.maps.LatLng(32.646602, 51.667866);


با کلیک روی نقشه دو مقدار در فیلدهای ما ست کی شوند که اونا را توی دیتا بیس ذخیره میشه و موقع نمایش مجدد ابتدا باید محدوده را مشخص کنید و در کد بالا ست کنید و بعد marker نمایش بدید.

----------


## IR-Developer

> این دو مقدار که در کد زیر ست می شه ، اون محدوده ای هست که می خوایم نمایش بدیم . مثلا من برای سایت خودم مرکز شهر یزد را ست کردم .
> 
> 
>  new google.maps.LatLng(32.646602, 51.667866);
> 
> 
> با کلیک روی نقشه دو مقدار در فیلدهای ما ست کی شوند که اونا را توی دیتا بیس ذخیره میشه و موقع نمایش مجدد ابتدا باید محدوده را مشخص کنید و در کد بالا ست کنید و بعد marker نمایش بدید.


خوب منم همینا گفتم .

مشکل من اینه که با کلیک روی نقشه اون مقادیری که میده اشتباه هستن . وقتی توی این کد 

 new google.maps.LatLng(32.646602, 51.667866);


میزارم اون مکان را نشون نمیده . یجای دور افتاده نشون میده اصلا معلوم نیست چیه .

با کلیک روی نقشه مقادیری که میده اعدادبزرگتری هستن نسبت به اینکه از سایت map.google.com مقادیر را بگیریم . 

من نمیدونم شما چطور میگید اون مقادیری گه با کلیک روی نقشه میگیرید درست برای شما نشون میده .!

----------


## HOSSEINONLINE7

------------------------------------

----------


## IR-Developer

دوستان کارم خیلی گیره هر کار کردم به نتیجه نرسیدم لطفا راهنمایی کنید .

باید چکار کنم ؟

----------


## niloo17

مقادیری که از این روش به دست میارید کاملا درسته . شما این مقادیر را در دیتابیس ذهیره می کنید.
زمانی که می خوایید موقعیت را نمایش بدید از کد زیر استفاده کنید .

 function initialize() {
            var pos1 = $("#Latitude");
            var pos2 = $("#Longitude");
            if (pos1.val() != "" && pos2.val() != "")
                var latlngPos = new google.maps.LatLng(parseFloat(pos1.val()), parseFloat(pos2.val()));
            else
                var latlngPos = new google.maps.LatLng(30.281340, 57.068996);
            var mapProp = {
                center: latlngPos,
                zoom: 13,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                panControl: true
            };
            var map = new google.maps.Map(document.getElementById("googleMap  ")
             , mapProp);
            if (pos1.val() != "" && pos2.val() != "") {
                var marker = new google.maps.Marker({
                    position: latlngPos,
                    map: map,
                    title: "موقعیت ملک"
                });
            }

        }

        google.maps.event.addDomListener(window, 'load', initialize);


در ابتدا بررسی می کنم اگر مقداری در دیتابیس ذخیره شده بود موقعیت نمایش داده می شه در غیر این صورت مرکز یزد نمایش میده.

----------


## _sonya_

کتاب رابطهای برنامه نویسی نقشه های گوگل توسط انتشارات ناقوس در نمایشگاه کتاب ارائه شده. برای آموزش نقشه های گوگله. احتمالاً باد خیلی به دردبخور باشه.

----------


## mja460it2

> فایل صفحه ای که  در سایتم استفاده کرده ام، پیوست کردم .


سلام .
من هم دقیقا یه همچین چیزی میخوام، از دوستان و اساتید کسی هست که کد PHP  بده، من از MVC  چیزی نمیدونم.
متشکرم

----------

