EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:将地图标记的纬度和经度设置为当前位置

本主题描述如何使用HTML Geolocation API实现将用户的坐标传递到详细视图中的纬度经度属性的操作。在此,假定您具有根据“使用栅格地图”教程创建的应用程序。请注意,在移动应用程序中,此功能是内置的。

将以下Controller添加到ASP.NET模块项目中。

using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Actions;
using DevExpress.ExpressApp.Web.SystemModule;
using DevExpress.ExpressApp.Web.Templates.ActionContainers;
using DevExpress.ExpressApp.Web.Templates.ActionContainers.Menu;
using DevExpress.Persistent.Base;
// ...
public class FillCoordinatesController : ViewController<DetailView> {
    private SimpleAction getPositionAction;
    public FillCoordinatesController() {
        TargetObjectType = typeof(IMapsMarker); 

        getPositionAction = new SimpleAction(
            this, "Get current position",
            PredefinedCategory.Edit);            

        string getPositionClientScript = @"
function idContains(selector, text) {
  var elements = document.querySelectorAll(selector);
  return [].filter.call(elements, function(element){
    return RegExp(text).test(element.id);
  });
}

function setLocalizedValueToInput(input, value) {
    var curValue = input.value.toString();
    var newValue = value.toString();    
    var isCommaAsFloatPoint = curValue.indexOf(',') > -1;

    if (isCommaAsFloatPoint)
        newValue = newValue.replace('.', ',');

    input.value = newValue;
}

function showMap(position) {
  var latitude = position.coords.latitude;
  var latInputs = idContains('input', 'Latitude_Edit(?!.*Info$)');  
  if (latInputs.length == 1) { setLocalizedValueToInput(latInputs[0], latitude); }

  var longitude = position.coords.longitude;
  var lonInputs = idContains('input', 'Longitude_Edit(?!.*Info$)'); 
  if (lonInputs.length == 1) { setLocalizedValueToInput(lonInputs[0], longitude); }
}

navigator.geolocation.getCurrentPosition(showMap);";

        getPositionAction.SetClientScript(getPositionClientScript, false);
    }

    protected override void OnActivated() {
        base.OnActivated();
        View.ViewEditModeChanged  = DetailView_ViewEditModeChanged;
        UpdateActionState();
    }
    protected override void OnDeactivated() {            
        View.ViewEditModeChanged -= DetailView_ViewEditModeChanged;
        base.OnDeactivated();
    }
    private void DetailView_ViewEditModeChanged(object sender, System.EventArgs e) {
        UpdateActionState();
    }
    private void UpdateActionState() {
        getPositionAction.Enabled["EditMode"] = View.ViewEditMode == DevExpress.ExpressApp.Editors.ViewEditMode.Edit;
    }
}

运行ASP.NET应用程序并编辑一个支持IBaseMapsMarker接口的对象(例如,“使用栅格地图”主题中演示的Location对象)。点击获取当前位置。纬度和经度编辑器将填充当前坐标。

Maps_GetCurrentPosition

请注意,浏览器可能会警告您该站点要跟踪您的实际位置。

Maps_TrackWarning

转载保留此链接,注明出处