【问题标题】:Static google maps dont work in asp.net静态谷歌地图在 asp.net 中不起作用
【发布时间】:2014-03-14 19:07:23
【问题描述】:

我想在网络上生成包含大量信息和线条的地图。 我尝试应用静态谷歌地图,它在其中生成为图像并且加载速度很快。我尝试应用以下示例,但它并不希望地图http://en.googlemaps.subgurim.net/ejemplos/ejemplo_999999_Static_Map.aspx 。我怎样才能让它在 asp.net 网络表单中工作?

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="PlantDiseasesSystem.WebForm3" %>
<%@ Register assembly="GMaps" namespace="Subgurim.Controles" tagprefix="cc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<p>
    <br />
</p>
<cc1:StaticGMap ID="StaticGMap1" runat="server" />
<br />
<br />
<cc1:StaticGMap ID="StaticGMap2" runat="server" />

【问题讨论】:

  • 您有遇到问题的 c# 代码吗?
  • 我在 asp.net 中嵌入了谷歌地图 API 4 .. 我的工作方式和我引用的例子一样..但是没有生成静态谷歌地图..

标签: asp.net google-maps google-maps-api-3 subgurim-maps


【解决方案1】:

好的,这是我的工作。我打算在我自己的网站(而不是谷歌)中打开一个谷歌地图,让用户在他的地址(家庭、工作和其他地址)上移动一个标记。然后他/她将此标记位置记录到服务器上的地址表中。当其他用户打开他的页面时,他们可以看到“在地图上显示”链接按钮。当他们点击按钮时,资源管理器会打开一个谷歌地图(如果你愿意,你可以在你自己页面的 div 中进行),他们可以看到标记和关于标记的描述。我没有在我的项目中设计线条,但您可以用相同的方式添加它们。

此代码的另一个属性是用户 - 添加他/她的地址 - 可以通过将他/她的地址写入文本框并使用谷歌查找机制找到地址。这样他/她就可以轻松放置标记。

我使用了 java 和 vb 代码。但是由 javascript 代码处理的重要部分,因为 google subgrim 完全是 java :)

这里是提到的完整的 javascript 代码。

var _id = "";
var _adres = "";
var _kull_adi = "";
var _lat;
var _lng;
var geocoder;
var map; 
var marker;
var koords = new Array();

window.onload = function () {
    geocoder = new google.maps.Geocoder();

    var latlng = new google.maps.LatLng(39.42324,35.27587);
    map = new google.maps.Map(document.getElementById('map'), {
        center: latlng,
        zoom: 6,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    marker = new google.maps.Marker({
        position: latlng,
        map: map,
        title: 'Move the marker to the address.',
        draggable: true
    });
    google.maps.event.addListener(marker, 'dragend', function (a) {
        _lat = a.latLng.lat().toFixed(8);
        _lng = a.latLng.lng().toFixed(8);
        $('#mapbilgileri_div').html("Enlem : " + _lat + "</br>Boylam : " + _lng);
    });
};

function codeAddress() {
    var address = document.getElementById("address").value;
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            marker.setMap(null);
            map.setZoom(15);
            map.setCenter(results[0].geometry.location);
            marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location,
                title: 'İşaretçiyi adresinizin üzerine getiriniz.',
                draggable: true
            });
            $('#mapbilgileri_div').html("Enlem : " + results[0].geometry.location.lat().toFixed(8) + "</br>Boylam : " + results[0].geometry.location.lng().toFixed(8));
            _lat = results[0].geometry.location.lat().toFixed(8);
            _lng = results[0].geometry.location.lng().toFixed(8);
            map.setCenter(marker.position);
            marker.setMap(map);
            google.maps.event.addListener(marker, 'dragend', function (a) {
                _lat = a.latLng.lat().toFixed(8);
                _lng = a.latLng.lng().toFixed(8);
                $('#mapbilgileri_div').html("Enlem : " + _lat + "</br>Boylam : " + _lng);
            });
        } else {
            alert("Address couldn't find. Please be sure that you wrote it tuely!: " + status);
        }
    });
}

function set_guid(guid, adres,kull_adi,adres_decoded) {
    _id = guid;
    _adres = adres;
    _kull_adi = kull_adi;
    $('#address').val(adres_decoded);
    $('#adresbilgileri_div').html(_id + "</br>" + _adres);
    $('#mapbilgileri_div').html("Enlem : " + _lat + "</br>Boylam : " + _lng);
    codeAddress();
}

function koordinatekle() {
    if (_id.length > 3 && _lat != undefined && _lng != undefined && _adres.length > 3) {
        WebService.koordinatekle(_id, _lat, _lng, _kull_adi, geri_donus);
    } else {
        alert('Please select an address and coordinate from the map !')
    }
}

function geri_donus(result, eventArgs) {
    if (result = "1") {
        alert("coordinate added successfully.");
    } else {
        alert("Error!");
    }
    __doPostBack('', '');
}

代码中有一些土耳其语单词,将它们视为名称。以及网络服务代码:

<WebMethod()> _
    Public Function koordinatekle(ByVal _adres_tipi As String, ByVal _lat As Double, ByVal _lng As Double, ByVal _kull_adi As String) As String
        Try
            Dim _id As Integer = Val(_adres_tipi.Substring(_adres_tipi.IndexOf("-(ID:") + 5))
            If Left(_adres_tipi, 2) = "An" Then
                Dim sorgu = (From p In tablolar.genel_bilgilers Where p.kullanici_adi = _kull_adi Select p).First

                sorgu.lat = _lat
                sorgu.lon = _lng
                tablolar.SubmitChanges()
            End If
            If Left(_adres_tipi, 2) = "Ek" Then
                Dim sorgu = (From p In tablolar.free_texts Where p.id = _id Select p).First

                sorgu.lat = _lat
                sorgu.lon = _lng
                tablolar.SubmitChanges()
            End If
            Return 1
        Catch ex As Exception
            Return ex.Data.ToString
        End Try
    End Function

javascript 代码调用此服务以便在 div 元素上记录选定的标记位置。

我使用 jquery 不要忘记,因为它大大简化了工作。首先,它看起来很复杂,但非常简单。让我解释一下。

onload 函数初始化地图。创建一个地理编码器来查找输入的地址。在“map”div 元素上创建一个地图。在此地图上创建一个标记并为标记拖动事件设置一个侦听器。

codeaddress 函数尝试查找用户输入的地址。这个的重要作用:

geocoder.geocode({ 'address': address }, function (results, status) {....

此函数将地址数据发送给google并尝试获取地址的坐标。

另一个函数只是设置数据并通过网络服务将它们发送到服务器。

我希望这可以帮助...

如果它有效,别忘了投票给我 :) 谢谢。

不是:我假设您已将必要的 google subgrim 密钥和必要的 dll 文件 (GMaps.dll) 添加到您的进程中。

【讨论】:

    【解决方案2】:

    我刚刚做了这个,第一次成功了

    WebForm1.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Website.WebForm1" %>
    
    <%@ Register TagPrefix="cc1" Namespace="Subgurim.Controles" Assembly="GMaps, Version=4.1.0.5, Culture=neutral, PublicKeyToken=564d55b144e7aa5a" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <cc1:StaticGMap ID="StaticGMap1" runat="server" Language="en" format="png32" />
            <br />
            <cc1:StaticGMap ID="StaticGMap2" runat="server" Language="en" format="png32" />
        </form>
    </body>
    </html>
    

    WebForm1.aspx.cs

    public partial class WebForm1 : System.Web.UI.Page
    {
        protected override void OnPreLoad(EventArgs e)
        {
            base.OnPreLoad(e);
    
            LoadMap();
        }
    
        private void LoadMap()
        {
            GLatLng latLng = new GLatLng(41, -7);
    
            int colorEnumLength = 11;
            int sizeEnumLength = 3;
            double latStep = -1;
            double lngStep = 0.4;
            string msg = "Subgurim Google Maps";
    
            int iLat = 0;
            int iLng = 0;
    
            Random r = new Random();
            foreach (char c in msg)
            {
                if (c == ' ')
                {
                    iLat++;
                    continue;
                }
    
                GLatLng latlngAux = latLng + new GLatLng(latStep * iLat + r.NextDouble() * 0.4, lngStep * iLng);
    
                int randomColor = r.Next(colorEnumLength);
                StaticGMarker.ColorEnum color = (StaticGMarker.ColorEnum)randomColor;
    
                int randomSize = r.Next(2, sizeEnumLength);
                StaticGMarker.SizeEnum size = (StaticGMarker.SizeEnum)randomSize;
    
                StaticGMarker staticGMarker = new StaticGMarker(latlngAux, size, color, c);
                StaticGMap1.addStaticGMarker(staticGMarker);
    
                iLng++;
            }
    
            StaticPath path = new StaticPath();
            path.colorNet = Color.FromArgb(255, 0, 80);
            path.weight = 5;
            path.alpha = 150;
    
            path.points.Add(new GLatLng(41, -5));
            path.points.Add(new GLatLng(41, -4));
            path.points.Add(new GLatLng(40, -4));
            path.points.Add(new GLatLng(39, -2));
    
            StaticGMap1.addStaticPath(path);
    
            StaticGMap2.setCenter(new GLatLng("Valencia, Spain"));
            GLatLng paris = new GLatLng("Paris");
            GLatLng athens = new GLatLng();
            athens.optionalStringValue = "athens";
    
            StaticGMap2.addStaticGMarker(new StaticGMarker(paris, new StaticGIcon("http://maps.google.com/mapfiles/kml/shapes/sunny.png")));
            StaticGMap2.addStaticGMarker(new StaticGMarker(athens, new StaticGIcon("http://maps.google.com/mapfiles/kml/shapes/sunny.png", true)));
    
            StaticPath path2 = new StaticPath();
            path2.fillColorNet = Color.Brown;
            path2.colorNet = Color.ForestGreen;
            path2.weight = 2;
            path2.alpha = 150;
            path2.points.Add(new GLatLng("Berlin"));
            path2.points.Add(new GLatLng("Rome"));
            path2.points.Add(new GLatLng("Morocco"));
            StaticGMap2.Add(path2);
        }
    }
    

    您是否引用了* GMap.dll?

    您是否编译了应用程序?

    *更新

    编辑

    我说的是注册,我的意思是参考。我要做的是将 GMap.dll 放入解决方案根目录中名为 Libs 的文件夹中(而不是 bin 文件夹中),然后在 Visual Studio 中右键单击您的项目并选择“添加引用...”,然后浏览到Libs文件夹中的.dll文件,选中它,点击几次ok。现在构建您的解决方案(按组合键 Ctrl + Shift + B)

    不过,我们确实需要查看您页面中的代码,如果您在复制它时犯了一个小错误,它可能会破坏它。否则,这就像把你的车修好,但不让机械师看看引擎盖!

    【讨论】:

    • 不,不注册任何东西,我只是从 subgurim 下载它..并嵌入它..如果我需要注册它..请你告诉我怎么做。跨度>
    • 我没有任何公钥..我的代码中的区别是: 但在您的代码中:
    • 这是否意味着我没有以正确的方式添加它......或者因为我没有公钥令牌......我怎样才能得到这个密钥......我问了很多问题,因为我是新手谷歌地图应用程序
    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多