Загрузите Geojson в AP.NET MVC 5 - PullRequest
       9

Загрузите Geojson в AP.NET MVC 5

0 голосов
/ 06 сентября 2018

Запуск HTML-файла ниже хорошо работает в Firefox.

Используется файл geojson: "states.geojson".

<!DOCTYPE html>
<meta charset="utf-8">
<style>
    body {font: 12px sans-serif;}
    path {
        stroke-width: 1px;
        stroke: white;
        fill: #804040;
        cursor: pointer;
    }
    path:hover, path.highlighted {
        fill: #ff8000;
    }
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

//Map dimensions (in pixels)
var width = 600,
    height = 350;

//Map projection
var projection = d3.geo.albersUsa()
    .scale(730.2209486090715)
    .translate([width/2,height/2]) //translate to center the map in view

//Generate paths based on projection
var path = d3.geo.path()
    .projection(projection);

//Create an SVG
var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

//Group for the map features
var features = svg.append("g")
    .attr("class","features");

//Create zoom/pan listener
//Change [1,Infinity] to adjust the min/max zoom scale
var zoom = d3.behavior.zoom()
    .scaleExtent([1, Infinity])
    .on("zoom",zoomed);

svg.call(zoom);

d3.json("states.geojson",function(error,geodata) {
    if (error) return console.log(error); //unknown error, check the console

//Create a path for each map feature in the data
features.selectAll("path")
    .data(geodata.features)
    .enter()
    .append("path")
    .attr("d",path)
    .on("click",clicked);
});

function zoomed() {
    features.attr("transform", "translate(" + zoom.translate() + ")
    scale("+ zoom.scale() + ")")
   .selectAll("path").style("stroke-width", 1 / zoom.scale() + "px" );
}

</script>
</body>

Но теперь я хочу использовать это в проекте asp.net mvc. Я поместил файл geojson в папку App_Data моего проекта. В контроллере:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string path = GetGisPath() + "\\states.geojson";
        ViewBag.Path = path.Replace("\\", "/");
        return View();
    }

    private static string GetGisPath()
    {
        string appPath = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data");
        return appPath;
    }
}

Затем просмотр с именем Index. Я скопировал содержимое html файла в View и изменил код:

d3.json("states.geojson",function(error, geodata)

до:

d3.json("@ViewBag.Path", function (error, geodata)

Но ничего не произошло. Я вижу только ошибку в консоли Firefox:

XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "", status: 0, statusText: "", responseType: "", response: "" }

, связанный с кодом ниже:

d3.json("@ViewBag.Path", function (error, geodata) {
    if (error) return console.log(error); //unknown error, check the console
    ...

Я видел код ниже в «Просмотр исходной страницы»:

d3.json("C:/Users/XXXXXXXX/Documents/Visual Studio 2013/Projects/ASP.NET/proj/proj/App_Data/states.geojson", function (error, geodata) { ...

также используется:

string path = GetGisPath() + "\\states.geojson";
ViewBag.Path = path;
return View();

и увидел в «Просмотр исходной страницы»:

d3.json("C:\Users\XXXXXXXX\Documents\Visual Studio 2013\Projects\ASP.NET\proj\proj\App_Data\states.geojson", function (error, geodata) { ...

Есть предложения?

1 Ответ

0 голосов
/ 11 сентября 2018

OK. Я не могу найти решение для загрузки файла Geojson.

Но решение состоит в том, чтобы преобразовать Geojson в SVG и загрузить файл SVG. Хорошо работает.

Обновление:

После самых попыток следующий код должен быть добавлен в Web.config (не web.config).

<system.webServer>
  <staticContent>
    <mimeMap fileExtension=".geojson" mimeType="application/geojson" />
  </staticContent>
</system.webServer>

Используйте файлы в папке с именем, например, «Данные».

d3.json("/Data/geo/states.geojson", function (error, geodata) {

...}

Я вижу ошибку при использовании папки "App_Data".

d3.json("/App_Data/geo/states.geojson", function (error, geodata) {

...}


...